鄭 濤,張 雙,李曉東
(中航工業(yè)西安航空計算技術(shù)研究所,陜西 西安 710068)
CentOS下AFDX端系統(tǒng)驅(qū)動設(shè)計與實現(xiàn)*
鄭 濤,張 雙,李曉東
(中航工業(yè)西安航空計算技術(shù)研究所,陜西 西安710068)
分析了AFDX網(wǎng)絡(luò)和CentOS操作系統(tǒng)的工作機(jī)制,針對民用大飛機(jī)航空電子網(wǎng)絡(luò)測試設(shè)備的需求,提出了基于X86架構(gòu)的CentOS操作系統(tǒng)的AFDX端系統(tǒng)驅(qū)動設(shè)計方案和實現(xiàn)方法。依據(jù)設(shè)計方案和實現(xiàn)方法,編碼實現(xiàn)了CentOS下AFDX端系統(tǒng)驅(qū)動,并且在PC主機(jī)上完成了驅(qū)動的驗證工作。
CentOS;AFDX;端系統(tǒng);驅(qū)動;設(shè)計;實現(xiàn)
大型民用飛機(jī)的數(shù)據(jù)通信技術(shù)是飛機(jī)航空電子系統(tǒng)實現(xiàn)綜合化、模塊化和分布式的關(guān)鍵技術(shù)。航空電子全雙工交換式以太網(wǎng)(AFDX)是ARINC664P7[1]規(guī)范和定義的一種總線協(xié)議,被廣泛應(yīng)用于航空網(wǎng)絡(luò)的數(shù)據(jù)通信,能夠適應(yīng)航空電子設(shè)備與系統(tǒng)之間的互聯(lián)互通要求。民用大飛機(jī)采用了AFDX總線作為全機(jī)的網(wǎng)絡(luò)總線[2]。為了對大型民用飛機(jī)系統(tǒng)的航空網(wǎng)絡(luò)進(jìn)行測試,需要研制民用飛機(jī)機(jī)載測試設(shè)備。民用機(jī)載測試設(shè)備考慮到經(jīng)濟(jì)性,大多采用Linux操作系統(tǒng)作為測試設(shè)備的操作系統(tǒng)軟件,采用AFDX端系統(tǒng)作為大型民用飛機(jī)系統(tǒng)航空網(wǎng)絡(luò)測試的數(shù)據(jù)通道。CentOS作為一種常用的Linux操作系統(tǒng),開發(fā)基于CentOS的AFDX端系統(tǒng)驅(qū)動,可以節(jié)省民機(jī)機(jī)載航電網(wǎng)絡(luò)系統(tǒng)測試設(shè)備的研發(fā)和研制費用,進(jìn)而達(dá)到更高的實用性和市場占有率?;诖朔N考慮,本文在X86架構(gòu)PC上安裝了32位CentOS操作系統(tǒng),并且在主板上安裝了PCI槽口的AFDX端系統(tǒng),在此基礎(chǔ)上設(shè)計和開發(fā)了基于PC的CentOS下AFDX端系統(tǒng)的驅(qū)動。
AFDX協(xié)議是航空全雙工交換式以太網(wǎng)協(xié)議,是本著提高以太網(wǎng)的傳輸效率,盡可能地減少總線競爭的思想開發(fā)的專用以太網(wǎng)。任何AFDX端口之間都可以建立起一個傳輸信道,以標(biāo)稱傳輸速度來傳輸數(shù)據(jù),優(yōu)點是不存在總線競爭,能顯著提高系統(tǒng)的傳輸效率,缺點是不易控制最大傳輸時延。
AFDX協(xié)議是對TCP/IP協(xié)議的改進(jìn),通過對TCP/IP協(xié)議的裁剪,適用于航空領(lǐng)域。AFDX協(xié)議對TCP/IP協(xié)議的運輸層裁剪后只支持UDP協(xié)議、TCP協(xié)議和ICMP協(xié)議,從而精簡了協(xié)議架構(gòu),便于航空領(lǐng)域的應(yīng)用。AFDX協(xié)議層如圖1所示。
圖1 AFDX協(xié)議層
航空領(lǐng)域中專門用于處理AFDX協(xié)議的硬件和驅(qū)動軟件集合實體統(tǒng)稱為AFDX端系統(tǒng)。
AFDX端系統(tǒng)的硬件實現(xiàn)AFDX協(xié)議的MAC層、數(shù)據(jù)鏈路層、IP層和運輸層的協(xié)議,保證數(shù)據(jù)從PHY上接收后依據(jù)AFDX協(xié)議的層次結(jié)構(gòu)來安全可靠地處理。
AFDX端系統(tǒng)驅(qū)動軟件是對AFDX端系統(tǒng)硬件資源進(jìn)行統(tǒng)一管理和控制,實現(xiàn)PCI接口驅(qū)動、硬件狀態(tài)的轉(zhuǎn)換、寄存器資源的設(shè)置、健康監(jiān)控管理、通信接口、故障記錄上報和用戶驅(qū)動接口等功能。
社區(qū)企業(yè)操作系統(tǒng)(Community Enterprise Operating System,CentOS)是Linux發(fā)行版之一,由紅帽企業(yè)級操作系統(tǒng)源代碼編譯而成。CentOS操作系統(tǒng)具有高度的穩(wěn)定性和可靠性,因此在CentOS操作系統(tǒng)上開發(fā)的AFDX端系統(tǒng)驅(qū)動具有良好穩(wěn)定的運行環(huán)境。
CentOS操作系統(tǒng)運行分為內(nèi)核態(tài)和用戶態(tài)[3]。內(nèi)核態(tài)是操作系統(tǒng)所運行的模式,運行在該模式的代碼可以無限制對系統(tǒng)存儲、外部設(shè)備進(jìn)行訪問。用戶態(tài)是最低特權(quán)級,是普通的用戶進(jìn)程運行的特權(quán)級[4],大部分用戶直接面對的程序都是運行在用戶態(tài)。因此在CentOS下開發(fā)AFDX端系統(tǒng)驅(qū)動時應(yīng)該考慮CentOS的內(nèi)核態(tài)和用戶態(tài)程序執(zhí)行的特點,以使開發(fā)的驅(qū)動代碼具有良好的可靠性和穩(wěn)定性。
CentOS下AFDX端系統(tǒng)驅(qū)動開發(fā)是在PC主機(jī)上開發(fā)可用的驅(qū)動代碼,便于AFDX端系統(tǒng)能夠廣泛地應(yīng)用于日常的PC主機(jī),從而提高端系統(tǒng)的適用性和經(jīng)濟(jì)性。AFDX端系統(tǒng)硬件插入PC主板的PCI槽,主板與AFDX端系統(tǒng)之間通過PCI總線交換數(shù)據(jù)。
CentOS下AFDX端系統(tǒng)驅(qū)動開發(fā)時根據(jù)操作系統(tǒng)和AFDX端系統(tǒng)與宿主機(jī)硬件連接特點,設(shè)計出如圖2所示的AFDX端系統(tǒng)驅(qū)動總體架構(gòu)。
圖2 CentOS下AFDX端系統(tǒng)驅(qū)動總體架構(gòu)
CentOS下AFDX端系統(tǒng)驅(qū)動總體架構(gòu)根據(jù)驅(qū)動開發(fā)的模型和規(guī)范以及CentOS操作系統(tǒng)運行特點,將AFDX端系統(tǒng)驅(qū)動分別映射到CentOS操作系統(tǒng)的內(nèi)核態(tài)和用戶態(tài),這樣的映射有以下三個好處:
(1)因為AFDX端系統(tǒng)硬件與PC主板通過PCI總線插槽連接,因此內(nèi)核態(tài)主要完成PCI總線驅(qū)動和AFDX端系統(tǒng)硬件資源分配和釋放,而將大量與上層應(yīng)用需要交互的功能在用戶態(tài)實現(xiàn),有利于內(nèi)核驅(qū)動代碼的精簡。
(2)上層應(yīng)用調(diào)用用戶態(tài)驅(qū)動時,如果用戶態(tài)下AFDX端系統(tǒng)驅(qū)動自身錯誤出現(xiàn),不會因此而導(dǎo)致操作系統(tǒng)崩潰,從而不影響操作系統(tǒng)其他應(yīng)用的正常運行。
(3)CentOS下AFDX端系統(tǒng)驅(qū)動設(shè)計采用分層的思想,有利于驅(qū)動的開發(fā)和移植。如果AFDX端系統(tǒng)驅(qū)動需要移植到只有一個態(tài)的操作系統(tǒng),此時只需要修改用戶態(tài)下的AFDX端系統(tǒng)驅(qū)動代碼中與PCI接口相關(guān)的代碼。
根據(jù)CentOS下AFDX端系統(tǒng)驅(qū)動總體架構(gòu),內(nèi)核態(tài)下分布的AFDX端系統(tǒng)驅(qū)動主要完成PCI總線驅(qū)動和AFDX端系統(tǒng)硬件資源的分配、管理和釋放,因此分配的功能有:驅(qū)動注冊功能、設(shè)備探測功能、設(shè)備文件操作功能、PCI總線驅(qū)動初始化和PCI總線驅(qū)動移除。
用戶態(tài)下分布的AFDX端系統(tǒng)驅(qū)動主要完成向上層應(yīng)用提供AFDX端系統(tǒng)通信和管理功能,因此分配的功能有:用戶態(tài)PCI設(shè)備操作功能、初始化功能、配置操作功能、模式管理功能、監(jiān)控管理功能、通信功能、健康管理功能。
內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動與用戶態(tài)下AFDX端系統(tǒng)驅(qū)動之間通過I/O方式通信交換數(shù)據(jù)。
依據(jù)CentOS下AFDX端系統(tǒng)驅(qū)動總體架構(gòu),AFDX端系統(tǒng)驅(qū)動分為內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動功能和用戶態(tài)下AFDX端系統(tǒng)驅(qū)動功能。
內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動功能如下:
(1)驅(qū)動注冊功能:實現(xiàn)AFDX端系統(tǒng)PCI總線驅(qū)動向CentOS內(nèi)核驅(qū)動模塊的注冊,將AFDX端系統(tǒng)PCI總線驅(qū)動加入到內(nèi)核驅(qū)動的數(shù)據(jù)結(jié)構(gòu),作為內(nèi)核驅(qū)動的一個驅(qū)動節(jié)點,便于驅(qū)動的使用。
(2)設(shè)備探測功能:實現(xiàn)AFDX端系統(tǒng)設(shè)備的發(fā)現(xiàn),PCI總線地址空間、內(nèi)存空間、I/O端口、配置寄存器和設(shè)備資源分配以及I/O地址空間到處理器的地址空間的映射。
(3)設(shè)備文件操作功能:設(shè)備在CentOS操作系統(tǒng)下都是作為文件被處理,因此設(shè)備文件操作功能實現(xiàn)設(shè)備以文件方式的打開、讀寫和關(guān)閉等功能以及內(nèi)核態(tài)PCI總線讀寫操作的功能。
(4)PCI總線驅(qū)動初始化:實現(xiàn)端系統(tǒng)PCI總線的硬件資源的初始化和端系統(tǒng)驅(qū)動數(shù)據(jù)結(jié)構(gòu)的初始化。
(5)PCI總線驅(qū)動移除:實現(xiàn)AFDX端系統(tǒng)驅(qū)動在內(nèi)核下的卸載。
用戶態(tài)下AFDX端系統(tǒng)驅(qū)動在功能分解時考慮到功能間的松耦合特性,將驅(qū)動功能分解為如下功能:
(1)初始化功能:實現(xiàn)用戶態(tài)下AFDX端系統(tǒng)驅(qū)動數(shù)據(jù)結(jié)構(gòu)資源的分配和靜態(tài)數(shù)據(jù)結(jié)構(gòu)的建立。
(2)配置操作功能:實現(xiàn)AFDX端系統(tǒng)配置文件的解析、加載、刪除和清除等功能。
(3)模式管理功能:實現(xiàn)AFDX端系統(tǒng)的模式轉(zhuǎn)換和不同模式下的功能。AFDX端系統(tǒng)的模式分為初始模式、配置模式和運行模式。初始模式的功能是初始化驅(qū)動軟件的資源;配置模式的功能是加載AFDX端系統(tǒng)的配置文件;運行模式的功能是根據(jù)加載的配置文件,實現(xiàn)AFDX消息通信。
(4)監(jiān)控管理功能:實現(xiàn)對AFDX端系統(tǒng)收發(fā)寄存器的狀態(tài)、收發(fā)消息隊列和內(nèi)部寄存器的監(jiān)控和管理功能。
(5)通信功能:實現(xiàn)AFDX端系統(tǒng)的AFDX消息的收發(fā)API,主要實現(xiàn)了隊列端口消息、采樣端口消息、SAP端口消息和ICMP消息[5-6],以便于提供給上層應(yīng)用調(diào)用。
(6)健康管理功能:實現(xiàn)AFDX端系統(tǒng)中硬件和軟件的健康狀態(tài)監(jiān)控和記錄功能,并且將健康狀態(tài)信息存儲于MIB庫,以向外部傳送健康狀態(tài)信息;此外,健康管理功能也實現(xiàn)了SNMP協(xié)議功能,通過SNMP協(xié)議可以遠(yuǎn)程訪問AFDX端系統(tǒng)上的MIB庫。
(7)用戶態(tài)PCI設(shè)備操作功能:實現(xiàn)用戶態(tài)調(diào)用內(nèi)核態(tài)的PCI設(shè)備操作的API接口的封裝,用于用戶態(tài)和內(nèi)核態(tài)間數(shù)據(jù)的傳遞和拷貝,從而達(dá)到用戶態(tài)和內(nèi)核態(tài)的數(shù)據(jù)通信。
CentOS下AFDX端系統(tǒng)驅(qū)動的實現(xiàn)分為兩個部分:內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動實現(xiàn)和用戶態(tài)下AFDX端系統(tǒng)驅(qū)動實現(xiàn),從而達(dá)到AFDX端系統(tǒng)驅(qū)動可用。
內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動實現(xiàn)的主要目標(biāo)是內(nèi)核中能夠通過PCI總線[7]找到設(shè)備和分配PCI總線配置空間[8],并且提供以文件方式操作AFDX端系統(tǒng)設(shè)備的接口[9],從而形成內(nèi)核態(tài)中管理和操作AFDX端系統(tǒng)的設(shè)備結(jié)構(gòu)[10]。內(nèi)核態(tài)下AFDX端系統(tǒng)驅(qū)動工作流程如圖3所示。
通過圖3的工作流程,AFDX端系統(tǒng)在內(nèi)核態(tài)下完成注冊和初始化,在CentOS下通過命令即可查看到AFDX端系統(tǒng)硬件對應(yīng)的設(shè)備句柄。
用戶態(tài)下AFDX端系統(tǒng)驅(qū)動實現(xiàn)的主要目標(biāo)是實現(xiàn)AFDX端系統(tǒng)從初始模式到加載模式直到運行模式的工作流程,在AFDX端系統(tǒng)硬件處于正常工作模式后,上層應(yīng)用調(diào)用通信功能中相應(yīng)的通信接口開始AFDX消息的通信。
用戶態(tài)下AFDX端系統(tǒng)驅(qū)動工作流程如圖4所示。
圖3 內(nèi)核態(tài)AFDX端系統(tǒng)驅(qū)動工作主流程
圖4 用戶態(tài)AFDX端系統(tǒng)驅(qū)動工作主流程
在X86的PC上安裝CentOS,并且在PC主板的PCI插槽上安裝了PCI接口的AFDX端系統(tǒng),最后根據(jù)前述的方法實現(xiàn)了AFDX端系統(tǒng)驅(qū)動。
對于實現(xiàn)的內(nèi)核態(tài)下的AFDX端系統(tǒng)驅(qū)動編譯生成了pci_es_dev_drv.ko文件,將pci_es_dev_drv.ko文件放置到CentOS文件系統(tǒng)的如下路徑:/lib/modules/3.0.89-rt117.el5.eads.ts.5/kernel/drivers/pci/ESDriver/pci_es_dev_driver.ko,此外在CentOS的文件系統(tǒng)的/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。增加這樣的修改后,當(dāng)PC上電后會自動在PCI插槽上識別與此驅(qū)動相關(guān)的端系統(tǒng)設(shè)備,自動掛載AFDX端系統(tǒng)設(shè)備。
PC上電,CentOS操作系統(tǒng)正常啟動后,在終端界面上進(jìn)入Linux的命令行輸入lsmod,可以查看到名稱是pci_es_dev_driver的驅(qū)動。
對于實現(xiàn)的用戶態(tài)下AFDX端系統(tǒng)驅(qū)動編譯生成libA664ESDriver.a,作為靜態(tài)庫提供給上層應(yīng)用使用。為了驗證CentOS下的AFDX端系統(tǒng)驅(qū)動的功能,采用了端系統(tǒng)上A口發(fā)B口接收的外環(huán)策略,在端系統(tǒng)上配置了50052端口發(fā)送數(shù)據(jù)、32端口接收數(shù)據(jù)的方法。最終驗證的結(jié)果如圖5所示。
圖5 AFDX 端系統(tǒng)驅(qū)動驗證
本文完成了CentOS下AFDX端系統(tǒng)驅(qū)動從總體架構(gòu)設(shè)計、功能分解以及功能實現(xiàn)的過程,最后對所開發(fā)的AFDX端系統(tǒng)在安裝CentOS的X86 PC上進(jìn)行了功能的驗證。通過驗證說明本文所提出的CentOS下AFDX端系統(tǒng)驅(qū)動設(shè)計方案可行,并且CentOS操作系統(tǒng)是Linux操作系統(tǒng)的一種,可以快速方便地移植到相同內(nèi)核的其他Linux操作系統(tǒng)平臺上,說明具有很好的可移植性和適用性。CentOS下AFDX端系統(tǒng)驅(qū)動已經(jīng)應(yīng)用于為國內(nèi)民用大飛機(jī)所開發(fā)的驗證測試設(shè)備上,完成了設(shè)備的功能集成,達(dá)到了相應(yīng)的功能和性能要求。
[1] AR Inc. Aircraft data network part 7: avionics full-duplex switched ethernet network[S]. 2005.
[2] 武華,馬捷中,翟正軍. AFDX端系統(tǒng)通信端口的設(shè)計與實現(xiàn)[J]. 測控技術(shù),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網(wǎng)絡(luò)端系統(tǒng)數(shù)據(jù)接收方法研究與實現(xiàn)[J]. 微型機(jī)與應(yīng)用,2013,32(21): 48-50.
[6] 趙永庫,李貞,唐來勝. AFDX網(wǎng)絡(luò)協(xié)議研究[J]. 計算機(jī)測量與控制,2011,19(12): 3137-3142.
[7] 陳昕,周擁軍,萬劍雄. AFDX端系統(tǒng)關(guān)鍵技術(shù)的研究與實現(xiàn)[J]. 計算機(jī)工程,2009,35(5): 1-3.
[8] 牛仕奇,嚴(yán)勝剛,任向隆.AFDX終端系統(tǒng)實現(xiàn)方案研究[J].計算機(jī)測量與控制,2009,17(12): 2507-2520.
[9] 田澤,王綺卉,侯銳. AFDX網(wǎng)絡(luò)協(xié)議棧分析和設(shè)計[J]. 軟件導(dǎo)刊,2010,9(4): 138-140.
[10] 應(yīng)三叢,汪明寅,張行. 高性能PCI驅(qū)動程序的關(guān)鍵技術(shù)[J]. 計算機(jī)工程與設(shè)計,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
航空科學(xué)基金(20141931001)
V243
A
10.19358/j.issn.1674-7720.2017.24.030
鄭濤,張雙,李曉東.CentOS下AFDX端系統(tǒng)驅(qū)動設(shè)計與實現(xiàn)J.微型機(jī)與應(yīng)用,2017,36(24):105-108.
2017-06-16)
鄭濤(1988-),男,碩士,工程師,主要研究方向:航空電子設(shè)備和航空網(wǎng)絡(luò)。