郑 涛,张 双,李晓东
(中航工业西安航空计算技术研究所,陕西 西安 710068)
CentOS下AFDX端系统驱动设计与实现*
郑 涛,张 双,李晓东
(中航工业西安航空计算技术研究所,陕西 西安710068)
分析了AFDX网络和CentOS操作系统的工作机制,针对民用大飞机航空电子网络测试设备的需求,提出了基于X86架构的CentOS操作系统的AFDX端系统驱动设计方案和实现方法。依据设计方案和实现方法,编码实现了CentOS下AFDX端系统驱动,并且在PC主机上完成了驱动的验证工作。
CentOS;AFDX;端系统;驱动;设计;实现
大型民用飞机的数据通信技术是飞机航空电子系统实现综合化、模块化和分布式的关键技术。航空电子全双工交换式以太网(AFDX)是ARINC664P7[1]规范和定义的一种总线协议,被广泛应用于航空网络的数据通信,能够适应航空电子设备与系统之间的互联互通要求。民用大飞机采用了AFDX总线作为全机的网络总线[2]。为了对大型民用飞机系统的航空网络进行测试,需要研制民用飞机机载测试设备。民用机载测试设备考虑到经济性,大多采用Linux操作系统作为测试设备的操作系统软件,采用AFDX端系统作为大型民用飞机系统航空网络测试的数据通道。CentOS作为一种常用的Linux操作系统,开发基于CentOS的AFDX端系统驱动,可以节省民机机载航电网络系统测试设备的研发和研制费用,进而达到更高的实用性和市场占有率。基于此种考虑,本文在X86架构PC上安装了32位CentOS操作系统,并且在主板上安装了PCI槽口的AFDX端系统,在此基础上设计和开发了基于PC的CentOS下AFDX端系统的驱动。
AFDX协议是航空全双工交换式以太网协议,是本着提高以太网的传输效率,尽可能地减少总线竞争的思想开发的专用以太网。任何AFDX端口之间都可以建立起一个传输信道,以标称传输速度来传输数据,优点是不存在总线竞争,能显著提高系统的传输效率,缺点是不易控制最大传输时延。
AFDX协议是对TCP/IP协议的改进,通过对TCP/IP协议的裁剪,适用于航空领域。AFDX协议对TCP/IP协议的运输层裁剪后只支持UDP协议、TCP协议和ICMP协议,从而精简了协议架构,便于航空领域的应用。AFDX协议层如图1所示。
图1 AFDX协议层
航空领域中专门用于处理AFDX协议的硬件和驱动软件集合实体统称为AFDX端系统。
AFDX端系统的硬件实现AFDX协议的MAC层、数据链路层、IP层和运输层的协议,保证数据从PHY上接收后依据AFDX协议的层次结构来安全可靠地处理。
AFDX端系统驱动软件是对AFDX端系统硬件资源进行统一管理和控制,实现PCI接口驱动、硬件状态的转换、寄存器资源的设置、健康监控管理、通信接口、故障记录上报和用户驱动接口等功能。
社区企业操作系统(Community Enterprise Operating System,CentOS)是Linux发行版之一,由红帽企业级操作系统源代码编译而成。CentOS操作系统具有高度的稳定性和可靠性,因此在CentOS操作系统上开发的AFDX端系统驱动具有良好稳定的运行环境。
CentOS操作系统运行分为内核态和用户态[3]。内核态是操作系统所运行的模式,运行在该模式的代码可以无限制对系统存储、外部设备进行访问。用户态是最低特权级,是普通的用户进程运行的特权级[4],大部分用户直接面对的程序都是运行在用户态。因此在CentOS下开发AFDX端系统驱动时应该考虑CentOS的内核态和用户态程序执行的特点,以使开发的驱动代码具有良好的可靠性和稳定性。
CentOS下AFDX端系统驱动开发是在PC主机上开发可用的驱动代码,便于AFDX端系统能够广泛地应用于日常的PC主机,从而提高端系统的适用性和经济性。AFDX端系统硬件插入PC主板的PCI槽,主板与AFDX端系统之间通过PCI总线交换数据。
CentOS下AFDX端系统驱动开发时根据操作系统和AFDX端系统与宿主机硬件连接特点,设计出如图2所示的AFDX端系统驱动总体架构。
图2 CentOS下AFDX端系统驱动总体架构
CentOS下AFDX端系统驱动总体架构根据驱动开发的模型和规范以及CentOS操作系统运行特点,将AFDX端系统驱动分别映射到CentOS操作系统的内核态和用户态,这样的映射有以下三个好处:
(1)因为AFDX端系统硬件与PC主板通过PCI总线插槽连接,因此内核态主要完成PCI总线驱动和AFDX端系统硬件资源分配和释放,而将大量与上层应用需要交互的功能在用户态实现,有利于内核驱动代码的精简。
(2)上层应用调用用户态驱动时,如果用户态下AFDX端系统驱动自身错误出现,不会因此而导致操作系统崩溃,从而不影响操作系统其他应用的正常运行。
(3)CentOS下AFDX端系统驱动设计采用分层的思想,有利于驱动的开发和移植。如果AFDX端系统驱动需要移植到只有一个态的操作系统,此时只需要修改用户态下的AFDX端系统驱动代码中与PCI接口相关的代码。
根据CentOS下AFDX端系统驱动总体架构,内核态下分布的AFDX端系统驱动主要完成PCI总线驱动和AFDX端系统硬件资源的分配、管理和释放,因此分配的功能有:驱动注册功能、设备探测功能、设备文件操作功能、PCI总线驱动初始化和PCI总线驱动移除。
用户态下分布的AFDX端系统驱动主要完成向上层应用提供AFDX端系统通信和管理功能,因此分配的功能有:用户态PCI设备操作功能、初始化功能、配置操作功能、模式管理功能、监控管理功能、通信功能、健康管理功能。
内核态下AFDX端系统驱动与用户态下AFDX端系统驱动之间通过I/O方式通信交换数据。
依据CentOS下AFDX端系统驱动总体架构,AFDX端系统驱动分为内核态下AFDX端系统驱动功能和用户态下AFDX端系统驱动功能。
内核态下AFDX端系统驱动功能如下:
(1)驱动注册功能:实现AFDX端系统PCI总线驱动向CentOS内核驱动模块的注册,将AFDX端系统PCI总线驱动加入到内核驱动的数据结构,作为内核驱动的一个驱动节点,便于驱动的使用。
(2)设备探测功能:实现AFDX端系统设备的发现,PCI总线地址空间、内存空间、I/O端口、配置寄存器和设备资源分配以及I/O地址空间到处理器的地址空间的映射。
(3)设备文件操作功能:设备在CentOS操作系统下都是作为文件被处理,因此设备文件操作功能实现设备以文件方式的打开、读写和关闭等功能以及内核态PCI总线读写操作的功能。
(4)PCI总线驱动初始化:实现端系统PCI总线的硬件资源的初始化和端系统驱动数据结构的初始化。
(5)PCI总线驱动移除:实现AFDX端系统驱动在内核下的卸载。
用户态下AFDX端系统驱动在功能分解时考虑到功能间的松耦合特性,将驱动功能分解为如下功能:
(1)初始化功能:实现用户态下AFDX端系统驱动数据结构资源的分配和静态数据结构的建立。
(2)配置操作功能:实现AFDX端系统配置文件的解析、加载、删除和清除等功能。
(3)模式管理功能:实现AFDX端系统的模式转换和不同模式下的功能。AFDX端系统的模式分为初始模式、配置模式和运行模式。初始模式的功能是初始化驱动软件的资源;配置模式的功能是加载AFDX端系统的配置文件;运行模式的功能是根据加载的配置文件,实现AFDX消息通信。
(4)监控管理功能:实现对AFDX端系统收发寄存器的状态、收发消息队列和内部寄存器的监控和管理功能。
(5)通信功能:实现AFDX端系统的AFDX消息的收发API,主要实现了队列端口消息、采样端口消息、SAP端口消息和ICMP消息[5-6],以便于提供给上层应用调用。
(6)健康管理功能:实现AFDX端系统中硬件和软件的健康状态监控和记录功能,并且将健康状态信息存储于MIB库,以向外部传送健康状态信息;此外,健康管理功能也实现了SNMP协议功能,通过SNMP协议可以远程访问AFDX端系统上的MIB库。
(7)用户态PCI设备操作功能:实现用户态调用内核态的PCI设备操作的API接口的封装,用于用户态和内核态间数据的传递和拷贝,从而达到用户态和内核态的数据通信。
CentOS下AFDX端系统驱动的实现分为两个部分:内核态下AFDX端系统驱动实现和用户态下AFDX端系统驱动实现,从而达到AFDX端系统驱动可用。
内核态下AFDX端系统驱动实现的主要目标是内核中能够通过PCI总线[7]找到设备和分配PCI总线配置空间[8],并且提供以文件方式操作AFDX端系统设备的接口[9],从而形成内核态中管理和操作AFDX端系统的设备结构[10]。内核态下AFDX端系统驱动工作流程如图3所示。
通过图3的工作流程,AFDX端系统在内核态下完成注册和初始化,在CentOS下通过命令即可查看到AFDX端系统硬件对应的设备句柄。
用户态下AFDX端系统驱动实现的主要目标是实现AFDX端系统从初始模式到加载模式直到运行模式的工作流程,在AFDX端系统硬件处于正常工作模式后,上层应用调用通信功能中相应的通信接口开始AFDX消息的通信。
用户态下AFDX端系统驱动工作流程如图4所示。
图3 内核态AFDX端系统驱动工作主流程
图4 用户态AFDX端系统驱动工作主流程
在X86的PC上安装CentOS,并且在PC主板的PCI插槽上安装了PCI接口的AFDX端系统,最后根据前述的方法实现了AFDX端系统驱动。
对于实现的内核态下的AFDX端系统驱动编译生成了pci_es_dev_drv.ko文件,将pci_es_dev_drv.ko文件放置到CentOS文件系统的如下路径:/lib/modules/3.0.89-rt117.el5.eads.ts.5/kernel/drivers/pci/ESDriver/pci_es_dev_driver.ko,此外在CentOS的文件系统的/etc/rc.d/rc.local的shell脚本中增加如下的语句:insmod /lib/modules/3.0.89-rt117.el5.eads.ts.5/kernel/drivers/pci/ESDriver/pci_es_dev_driver.ko。增加这样的修改后,当PC上电后会自动在PCI插槽上识别与此驱动相关的端系统设备,自动挂载AFDX端系统设备。
PC上电,CentOS操作系统正常启动后,在终端界面上进入Linux的命令行输入lsmod,可以查看到名称是pci_es_dev_driver的驱动。
对于实现的用户态下AFDX端系统驱动编译生成libA664ESDriver.a,作为静态库提供给上层应用使用。为了验证CentOS下的AFDX端系统驱动的功能,采用了端系统上A口发B口接收的外环策略,在端系统上配置了50052端口发送数据、32端口接收数据的方法。最终验证的结果如图5所示。
图5 AFDX 端系统驱动验证
本文完成了CentOS下AFDX端系统驱动从总体架构设计、功能分解以及功能实现的过程,最后对所开发的AFDX端系统在安装CentOS的X86 PC上进行了功能的验证。通过验证说明本文所提出的CentOS下AFDX端系统驱动设计方案可行,并且CentOS操作系统是Linux操作系统的一种,可以快速方便地移植到相同内核的其他Linux操作系统平台上,说明具有很好的可移植性和适用性。CentOS下AFDX端系统驱动已经应用于为国内民用大飞机所开发的验证测试设备上,完成了设备的功能集成,达到了相应的功能和性能要求。
[1] AR Inc. Aircraft data network part 7: avionics full-duplex switched ethernet network[S]. 2005.
[2] 武华,马捷中,翟正军. AFDX端系统通信端口的设计与实现[J]. 测控技术,2009,28(3):56-59.
[3] JONATHAN C,ALESSANDRO R,GREG K H. Linux device driver[M]. Sebastopol O’Reilly Media Inc,2005.
[4] BOVET D P,CESATE M. Understanding the Linux Kernel (Second Edition)[M]. Sebastopol O’Reilly Media Inc,2003.
[5] 刘智武,白杨,何向栋. AFDX网络端系统数据接收方法研究与实现[J]. 微型机与应用,2013,32(21): 48-50.
[6] 赵永库,李贞,唐来胜. AFDX网络协议研究[J]. 计算机测量与控制,2011,19(12): 3137-3142.
[7] 陈昕,周拥军,万剑雄. AFDX端系统关键技术的研究与实现[J]. 计算机工程,2009,35(5): 1-3.
[8] 牛仕奇,严胜刚,任向隆.AFDX终端系统实现方案研究[J].计算机测量与控制,2009,17(12): 2507-2520.
[9] 田泽,王绮卉,侯锐. AFDX网络协议栈分析和设计[J]. 软件导刊,2010,9(4): 138-140.
[10] 应三丛,汪明寅,张行. 高性能PCI驱动程序的关键技术[J]. 计算机工程与设计,2012,33(6): 2208-2212.
Design and implementation of AFDX end system driver based on CentOS
Zheng Tao,Zhang Shuang,Li Xiaodong
(Aeronautical Computing Technique Research Institute,Xi’an 710068,China)
Based on the analysis of work process of AFDX network and CentOS operation system,and considering the requirements to test device of avionics network of a civil aircraft,we provide the design and implements of AFDX end system driver in CentOS based on X86 architecture. Relying on the design and implements ,we implement the driver by code and validate the driver in PC.
CentOS; AFDX; end system; driver; design; implementation
航空科学基金(20141931001)
V243
A
10.19358/j.issn.1674-7720.2017.24.030
郑涛,张双,李晓东.CentOS下AFDX端系统驱动设计与实现J.微型机与应用,2017,36(24):105-108.
2017-06-16)
郑涛(1988-),男,硕士,工程师,主要研究方向:航空电子设备和航空网络。