薛楠 张乐乐 逯计划 胡靖宇
摘要:航电网络系统中,每一个网络节点都有其独立的嵌入式操作系统和基于此操作系统所开发的驱动软件以及应用,而操作系统又决定了此网络节点相关驱动软件和应用的开发方式,间接也影响了此网络节点的稳定性、可靠性和安全性。因此,在PCI/PCIe驱动软件设计中,操作系统平台的选择和驱动软件的开发方式是非常重要的。该文介绍了基于嵌入式实时多分区操作系统平台下PCI/PCIe驱动软件的设计和开发方式以及驱动软件的应用场景。
关键词:航电网络;网络总线驱动;分区操作系统
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)29-0069-02
1 引言
随着航空电子技术的快速发展,航电网络也在不断创新,规模和复杂度也在不斷扩充。而整个航电网络是由一个个网络节点组成的,网络节点的设计标准、应用的使用规范直接影响网络节点自身的稳定性、可靠性,也间接影响整个航电网络系统的安全性。一般航电网络节点的设计从底层到上层的顺序依次是底层硬件相关层、操作系统服务层、上层驱动和应用层[1]。由于操作系统在航电网络节点中的位置介于底层硬件层和上层软件层之间,所以操作系统的稳定性是航电网络节点乃至整个航电网络系统稳定性的前提。
机载嵌入式操作系统分为非分区操作系统和分区操作系统,其中非分区操作系统相当于没有分区层只有内核层。若要在软件设计上实现不同功能模块的独立性,需将航电网络系统综合化和模块化,系统设计需要采用嵌入式实时多分区操作系统,保证应用软件在不同应用模块下实现时间和空间上的隔离性。
2 分区操作系统介绍
根据美国航电委员会制定的ARINC653标准,规定了分区操作系统应用程序接口标准,并且提出了分区操作系统必须具有的三层软件结构:应用软件层、操作系统支持层和硬件支持层。其中航电网络节点的应用软件在应用软件层实现,且运行在对应的应用分区中,时间和空间受限于分区[1]。不同功能的应用运行在对应分区中,各个分区实现了时间和空间的隔离,保证了使用独立性和安全性。
操作系统本身也分为分区操作系统和核心操作系统,其中分区操作系统存在于分区中,管理分区内部的数据资源,包括分区进程管理和相关调度等;核心操作系统驻留于内核中,主要负责分区之间的通信、分区调度管理、分区故障监控、分区资源管理等功能[1]。应用软件在分区操作系统和核心操作系统共同协作下完成其在航电网络系统中的功能,核心操作系统的代码和驱动程序运行在系统层,分区操作系统的代码、驱动程序和用户的应用软件运行在上层[1,2]。不同于非分区操作系统,基于分区操作系统下的驱动软件设计在地址访问方面比较复杂,且一般情况下分区层和核心层之间的访问有限制,实现数据的隔离性和安全性。嵌入式实时多分区操作系统的架构如图1所示:
3 驱动软件设计实现
3.1 分区层与核心层访问
分区操作系统为PCI/PCIe设备驱动软件开发提供了虚端口、虚分区、扩展系统调用和设备管理等方式,本文重点研究基础扩展系统调用下驱动软件的开发。在一般的分区操作系统下,为了安全和保护数据,核心层来管理各个分区层,但是分区层一般不能直接访问核心层。由于分区层和核心层的访问权限不同,若用户应用需要调用核心层的接口,则必须通过系统调用功能来使用核心层的接口。底层硬件将中断传至核心层,核心层收到中断信息后,使用虚中断的方式将中断信息从核心层发至分区层再告知用户应用进行相关处理,核心层也可以将自身的命令通过虚中断方式发至分区层通知分区进行相关处理。如果操作系统配置允许,分区层中不同分区之间或者分区层与核心层之间也可以通过配置好的共享数据区进行数据的交互。
3.2驱动软件分层实现
鉴于分区操作系统的特殊性,在此操作系统下PCI/PCIe驱动软件的设计就要考虑到分区层和核心层两层关系。由于用户应用运行在分区层,而驱动软件本身要调用核心层操作系统提供的系统接口,所以要在分区层和核心层都要有驱动软件的代码实现,并用系统调用方式实现分区层访问核心层接口,用虚中断的方式实现中断消息从核心层传递至分区层。在两层驱动软件的设计中,要同时兼顾分区操作系统使用的特殊性以及驱动软件自身的维护两个方面,保证驱动软件的稳定性和安全性。
在分区层,若用户应用在多个分区都使用了驱动软件所提供的接口对应的功能,那么要在软件设计上就要考虑可以同时用于多分区调用的函数接口,保证应用可以同时在多个分区使用从而来实现应用的需求[2]。
3.3 驱动软件地址分配和转换
在非分区操作系统开发的驱动软件中,若有两个或更多任务接口调用同一个函数,则调用的是同一个地址空间中的函数和对应变量,如果是同时调用且需要修改全局变量的值,那么就可能会产生调用冲突甚至导致变量内容错误,高度并发访问处理会导致严重的资源竞争。若在分区操作系统中实现并发调用同一个函数访问同一个地址,在分区层看到是使用同一个逻辑地址,但是对应在物理地址上是不同的,不会产生调用冲突。
在分区操作系统下,开发PCI/PCIe驱动软件所使用的地址空间包含虚拟地址、物理地址和PCI地址三个。其中物理地址指的是实实在在存在的地址,相当于非分区操作系统中直接可以访问的地址;虚拟地址是在分区层应用看到并可以访问的地址,不是真实的物理地址,但是和某一块物理地址空间存在一一对应的关系,在核心层根据需要也可能设计有核心层的虚拟地址,和真正的物理地址也是一一对应关系;PCI地址指的是若CPU上面挂接了PCI设备,PCI设备要访问CPU内存时所使用的地址空间。根据三种地址空间的含义,需在光纤网络总线驱动软件设计中,针对不同的地址空间需要进行对应的操作处理。分区层驱动软件只能操作分区层虚拟地址,在设计核心层驱动软件时要进行准确的PCI地址和虚拟地址的转换,才能保证用户应用在使用驱动软件时对CPU内存物理地址操作的准确性,保证网络节点应用使用的安全性。
4 应用实例
在航电网络设备当中,硬件的设计模式决定了驱动软件中关于地址空间的分配和访问方式。在使用分区操作系统的航电网络节点中,使用最多的就是单CPU上面挂接一个或者几个PCI设备(PCI/PCIe硬件设备),此时主机访问和PCI设备访问CPU的内存地址是一样的,即都是操作同一个虚拟地址映射的物理地址,此種硬件结构的访问方式决定了驱动软件在设计中,不需要进行地址转换,对应的PCI地址和虚拟地址是同一个地址。具体内存地址访问方式如图2所示。
另外一种比较复杂的应用情形,就是航电网络节点中有多个CPU,一个主CPU上面挂接一个或者多个从CPU,PCI设备挂接在其中某一个从CPU上面,整体是通过PCI交换设备连接的星型物理结构。CPU存储空间分为IO空间、RAM空间、PCIE配置空间等,其中主CPU的PCIE配置空间给从CPU以及外接PCI设备分配对应的使用空间,仅当第一个CPU正常运行时,才能给其他从CPU以及PCI设备分配资源,保证其正常运行使用,用户的应用软件运行在主CPU之上。这种情况下,PCI设备的PCI地址就不是驱动软件里面的虚拟地址了。在光纤网络总线驱动软件的实现中,必须通过一层地址转换关系,才能得到PCI设备的PCI地址从而实现PCI设备访问主CPU分配给它的虚拟地址。此种方式的内存地址访问方式如图3所示:
目前,在航电系统某型号飞机某网络节点上正在使用多分区操作系统的多CPU挂接PCI设备的硬件结构模式,机载应用和驱动软件基于此种模式的操作系统和硬件结构进行针对性设计。经过长时间的测试和验证,此节点应用功能正常,稳定性强。
5 结束语
嵌入式实时多分区操作系统所应用的硬件环境复杂,且针对不同的应用环境驱动软件的设计架构也略有不同,要根据对应的操作系统类型、硬件环境模式以及用户应用的使用方式的不同针对性地进行驱动软件的开发,保证驱动软件的稳定性。在开发驱动软件时基于多分区特性,在多分区操作系统下进行驱动软件和航电网络应用程序的开发,可以很大程度上提高航电网络系统的安全性。
参考文献:
[1] 仝敏,张东.嵌入式实时多分区操作系统两态访问的研究[J].航空计算技术, 2014,44(6): 88-91.
[2] 杨晓宁,曹原. 嵌入式实时分区操作系统中健康监控机制的设计与实现[J].现代导航, 2013,21(13):101-103.
[3] 徐晓光,折楠,邢亮.分区操作系统下的BIT 软件的设计[J]. 电子设计工程, 2013,21(13):187-190.
【通联编辑:代影】