郭芳超 周霆 徐晓光中航工业西安航空计算技术研究所
一种嵌入式分区操作系统中虚拟化串口的设计与实现
郭芳超周霆徐晓光
中航工业西安航空计算技术研究所
摘要:文章针对软件虚拟化过程中对设备虚拟化的需求,提出了基于客户(CLIENT)/服务器(SERVER)模式的串口设备访问模型,分别阐述了虚拟化过程中串口服务器的处理功能、硬件设备中断处理方法、客户端代理驱动接口功能及结构设计、以及数据传输采用的地址空间共享。
关键字:设备虚拟化 串口 代理驱动 客户/服务器
设备虚拟化是软件虚拟化的重要研究方向,也是软件虚拟化过程中必须解决的。高效的设备虚拟化方法可以有效提高设备访问效率,提高系统。串口通信方式简单、可靠、稳定,具有很好的可移植性、实时性,且具有使用线路少、成本低的特点。在嵌入式操作系统中对串口进行虚拟化可以快速验证设备虚拟化方案的。
虚拟化串口访问模型采用客户(CLIENT)/服务器(SERVER)模式的设备虚拟化方法实现,设备驱动程序在设备服务分区地址空间内。虚拟化串口的访问要求设备服务分区内包含合适的驱 动程序,其它分区包含代理驱动。一旦用户调用代理驱动提供的设备操作接口,它就会把用户的请求转发到设备服务分区内的串口服务器。代理驱动提供的函数在接口形式上与原物理设备驱动接口保持一致,在函数内部将对物理设备的访问封装为特定形式的IPC消息格式转发到串口服务器。串口服务器为每个分区创建一个虚拟串口设备,分区所有对物理设备的访问请求被转换为对虚拟串口设备的访问。
设备服务器直接控制物理设备,仲裁处理各个分区之间的竞争,同时处理设备中断请求。另外,为了处理来自微内核虚拟机管理器转发的串口中断请求,在设备服务分区内创建处理串口中断的用户级中断处理任务。
2.1串口服务器
串口服务器的主要功能之一就是对某个物理串口设备,在设备服务器内部创建多个虚拟串口实例,用户分区通过IPC请求操作设备时,设备服务器将访问对象转换为创建出的虚拟串口。串口服务线程启动后根据配置信息检测硬件设备并初始化,读取分区配置信息判断系统中需要使用串口的分区个数,根据配置信息生成虚拟串口设备描述符,进行部分初始化,然后进入等待态,等待来自其它应用分区的设备使用请求,设备使用请求包含四类:
a请求设备:处理来自客户分区对串口设备的请求,为虚拟设备分配共享逻辑地址空间,将共享空间的<逻辑--物理>地址映射关系通过虚拟机管理器提供的映射/解映射接口加入客户分区设备owner 线程(pager)的映射表中,将共享空间的逻辑地址和大小反馈给客户分区。
b注册控制块:将客户分区划分好的共享空间控制块地址注册到串口服务器分配的对应虚拟设备描述符中。方便之后客户分区与串口服务器交换数据读/写位置等信息。
c初始化虚拟设备:实现虚拟设备所有者信息的注册/变更,只有虚拟设备的所有者被允许修改设备的访问属性,例如打开/关闭等。
d关闭虚拟设备:清理缓冲区,将待发送队列中的所有数据发送出去。如果接收缓冲内有数据,通知虚拟串口对应的分区来取数据。最后删除虚拟设备描述符。
e中断请求和数据收发请求,串口服务器将这两类时间统一划分为异步事件。系统中虚拟设备与物理设备之间存在多对一的关系,因此设计了双层数据处理流。数据发送时,串口服务器程根据应用分区待发送数据流内的数据包个数,为其分配下层数据包,初始化下层数据包内各个域的值,加入到下层数据发送队列中。数据接收时,根据待接收数据的个数分配下层数据包并加入接收等待队列中。上层数据包与下层数据包只是建立对应依赖关系而不进行数 据拷贝。
串口服务器处理发送/接收数据请求的流程。串口服务器在发送流程处理过程中如果有下层 数据包不够使用的情况出现,需要主动清空虚拟设备占有的下层发送队列数据包。进入当前处理流程后,数据已由硬件发送出去,此时只需要修改下层数据包对应的上层数据包状态,将处理完后的数据包加入到当前虚拟设备的空闲队列中,处理完成后释放下层数据包,同时通知接收分区处理上层数据包。
2.2串口中断处理
串口设备中断处理包括上下两层,下层位于虚拟机管理器中,物理中断到来时,虚拟机管理器进行中断统一处理流程,再调用串口中断处理函数时向设备服务分区发送中断通知。设备服务分区内单独创建一个处理来自串口的中断处理线程。
2.3代理驱动
在客户分区,创建代理驱动程序供应用程序访问,代理驱动程序在接口形式上保持与原始驱动程 序接口一致。串口设备访问过程中基本的操作有 open、close、read、write和ioctl。
2.4串口数据传输
本文使用的IPC消息机制可以高效的传递设备控制信息,传输数据时由于数据量比较大,使用IPC通信方式会影响设备访问效率,影响虚拟设备的性能,所以需要使用更为高效的共享内存方式。
本文采用基于客户(CLIENT)/服务器(SERVER) 模式的设备访问模型在嵌入式分区操作系统中对串口设备进行了虚拟化,实现了设备服务分区内串口服务器的功能设计,硬件设备中断的任务级处理、数据发送、接收流程设计、客户端代理驱动程序的设计,以及其他关键技术。通过串口设备的成功虚拟化,有效验证了基于C/S模型设备虚拟化方法的可行性。
参考文献
[1]Gernot Heiser, Chief Technology. Virtualization for Embedded Systems, OK 40036:2007
[2]Asif Iqbal, Nayeema Sadeque, Rafika Ida Mutia. An Overview of Microkernel, Hypervisor and Microvisor Virtualization Approaches for Embedded Systems, Sweden
[3]郝继锋,任晓瑞,胡宁,一种基于微核架构的虚拟化设备高效访问模型,电子技术,2013 42(7)4-6
[4]VxWorks中任务恢复机制的设计与实现[J].空军工程大学学报(自然科学版),2013 14(5)3-4.