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