的事件;Linux内网络收发重定向服务与可信计算辅助软件配合,为可信计算附件提供虚拟网卡服务;视频输出切换模块用来控制视频输出选择开关。
[0066]在Linux内核中设置可被视频输出切换模块、USB键盘驱动、USB鼠标驱动访问的共享变量working_status,其中working_status的值域为{可信1态,普通1态}。当working_status为可信1态时,连接到USB-1Nl、USB_IN2的USB键盘、鼠标的输入将被可信计算附件自身使用,而不会通过USB-HOST接口转发给通用计算机,VGA显示设备的输入来自于可信计算附件内部的显示适配器;当working_status为普通1态时,可信计算附件把来自USB-1Nl和USB-1N2的USB键盘、鼠标输入通过USB-HOST接口转发给通用计算机,VGA显示设备的输入来自于通用计算机。
[0067]可信计算附件预设特定的组合键作为1状态的切换开关,如定义当Ctrl、Alt和FlO这三个键被按下时,进行working_status状态的改变,从而引起输入和输出的切换。Linux内键盘监听模块在Linux的USB键盘驱动中实现。下面以预定义的切换组合键为Ctrl+Alt+F10为例,来说明修改后的USB键盘驱动当接收到USB键盘事件时,所执行的主要流程。此时USB键盘驱动中增加变量total_down、位图down_keys和变量last_key,其中若down_keys的第O位为I,表示此时FlO键被按下;若down_keys的第I位为I,表示此时Alt键被按下;若down_keys的第2位为1,表示此时Ctrl键被按下;last_key和total_down的初始值均为O。
[0068]当USB键盘驱动获知有键盘输入时,执行包括如下步骤的流程:
[0069]KBDl获得当前键盘输入的扫描码kmap ;
[0070]KBD2若kmap与last_key不同,且kmap表示某个键被按下,则total_down 一 total_down+l ;
[0071]KBD3 last—key — kmap ;
[0072]KBD4若扫描码kmap指示Ctrl、Alt、F10中某个键被按下,则将down—keys位图中相应位置I ;
[0073]KBD5若扫描码kmap指示Ctrl、Alt、FlO中某个键被释放、且当前total_down为
3、且down_keys为0x7,则转到步骤KBD6,否则转到步骤KBD14 ;
[0074]KBD6 将 down_keys 位图清零,将 total_down 清零;
[0075]KBD7若working_status值为普通1态,则执行步骤KBD8,否则转到步骤KBDll ;
[0076]KBD8操作USB键盘模块,使其通过USB-HOST接口向通用计算机发送Ctrl+Alt+F10组合键释放事件;
[0077]KBD9将working_status改为可信1态,调用视频输出切换模块,进行视频输出切换;
[0078]KBDlO处理结束;
[0079]KBDll向当前操作系统上层提交Ctrl+Alt+F10组合键释放事件;
[0080]KBD12将working_status改为普通1态,调用视频输出切换模块,进行视频输出切换;
[0081]KBD13处理结束;
[0082]KBD14若扫描码指不某个键被释放,则total_down — total_down_l ;
[0083]KBD15若扫描码指示指示Ctrl、Alt、F10中某个键被释放,则将down_keys位图中的相应位清零;
[0084]KBD16若当前working_status为普通1态,则操作USB键盘模块,使其通过USB-HOST接口向通用计算机发送kmap对应的键盘事件,否则向当前操作系统上层提交kmap对应的键盘事件。
[0085]对USB鼠标驱动的修改主要为:当working_status为普通1态时,鼠标驱动利用USB鼠标模块,将收到的鼠标事件转换成USB报文,通过USB-HOST接口,发送给通用计算机。
[0086]Linux内网络收发重定向服务通过Linux内置的TUN/TAP机制和应用层报文转发服务完成,其中TUN/ΤΑΡ机制用于给可信应用提供虚拟网络接口,而应用层报文转发服务作为一个传输中介,将可信应用发送到虚拟网络接口的报文转交给运行于通用计算机上的可信计算辅助软件进行网络发送,并将可信计算辅助软件接收到网络报文转交给虚拟网络接口。当应用层报文转发服务从TUN/TAP设备读取到报文时,执行包括如下步骤的流程:
[0087]RTUNl操作USB串口模块,使其向通用计算机输出报文发送请求;
[0088]RTUN2操作USB串口模块,使其向通用计算机输出读取到的网络报文;
[0089]当应用层报文转发服务发现通用计算机向USB串口模块发送数据时,执行包括如下步骤的流程:
[0090]WTUNl从USB串口模块读取数据,直至得到完整的网络报文;
[0091]WTUN2将步骤WTUNl所得的网络报文写入TUN/TAP设备,以使得虚拟网络接口接收到外部网络输入。
[0092]需要说明的是,当USB串口模块的数据速度影响对可信计算的性能造成较大影响时,可以如“物理结构”部分描述,采用USB存储模块来实现此数据传输过程。其方法为:在可信计算附件出厂前,将用作U盘的Flash存储空间格式化为包含两个分区,如图3所示,第二个分区位于Flash存储器中,用于存储可信应用软件包;第一个分区则对应一片连续的主存区域,用于存储通用计算机与可信计算附件之间需要频繁交换的信息,下文称此在内存中的分区为交换分区。此时可以采用USB串口模块来进行事件通知,比如,可信计算附件的网络收发重定向服务执行包含如下步骤的流程,来请求可信计算辅助软件进行网络报文发送:
[0093]DSENDl通过内存访问方式,在交换分区中写入待发送的网络报文;
[0094]DSEND2操作USB串口模块,使其通过USB-HOST端口向通用计算机发送串口通知消息。
[0095]此时,可信计算辅助软件在启动时,通过可信计算附件的USB存储模块,可以发现有一个U盘,进一步,发现该U盘被分成了两个分区,并以裸设备的方式直接访问这个U盘的第二个分区(即:交换分区)。为了与DSENDl?DSEND2的流程向对应,在收到串口通知消息后,可信计算辅助软件执行包括如下步骤的流程获得待发送的报文:
[0096]DRELAYI裸设备的方式读取交换分区中的待发送报文;
[0097]DRELAY2从交换分区中清除掉步骤DRELAY1所获取的待发送报文,以回收该存储空间;
[0098]DRELAY3通过网络,发送步骤DRELAY1所获取的待发送报文。
[0099]交换分区空间还可进一步细分,方便可信计算辅助软件将收到的网络报文写入交换分区。可信计算辅助软件通过向USB串口模块对应的通用计算机串口输出“新报文到达”通告,来通知可信计算附件的网络收发重定向服务将位于交换分区中的报文写入TUN/TAP设备。
[0100]当不担心Flash存储器的使用寿命时,可以直接使用Flas