摘 要:Ad hoc網(wǎng)絡(luò)具有自組能力、良好的抗毀性、機(jī)動(dòng)性、魯棒性和易于構(gòu)建,能很好滿足在軍事和應(yīng)急通信等復(fù)雜環(huán)境中對(duì)無(wú)線通信系統(tǒng)的需求。基于PowerPC+FPGA的無(wú)線系統(tǒng)實(shí)現(xiàn)Ad hoc網(wǎng)絡(luò)能很好的滿足軍事和應(yīng)急通信對(duì)無(wú)線通信的要求。本文為無(wú)線系統(tǒng)設(shè)計(jì)并實(shí)現(xiàn)了一種FPGA驅(qū)動(dòng)程序,包括定義設(shè)備私有數(shù)據(jù)結(jié)構(gòu)、設(shè)備訪問(wèn)方法、模塊注冊(cè)與注銷以及中斷處理方法,同時(shí)介紹了設(shè)備樹文件中FPGA子節(jié)點(diǎn)的設(shè)計(jì)。實(shí)驗(yàn)結(jié)果顯示,F(xiàn)PGA驅(qū)動(dòng)程序設(shè)計(jì)合理高效,實(shí)現(xiàn)了無(wú)線系統(tǒng)之間點(diǎn)對(duì)點(diǎn)的無(wú)線通信,多臺(tái)無(wú)線系統(tǒng)實(shí)現(xiàn)了Ad hoc自組網(wǎng),滿足設(shè)計(jì)要求。
關(guān)鍵詞:PowerPC;FPGA;設(shè)備樹文件;U-Boot;Linux內(nèi)核;FPGA驅(qū)動(dòng)程序
中圖分類號(hào):TP368.1
基于TCP/IP體系結(jié)構(gòu)采用Ad hoc技術(shù)的無(wú)中心節(jié)點(diǎn)的自組無(wú)線網(wǎng)絡(luò)結(jié)構(gòu),具有自組能力、良好的抗毀性、機(jī)動(dòng)性、魯棒性和易于構(gòu)建,能很好滿足在軍事、搶險(xiǎn)、應(yīng)急通信等復(fù)雜環(huán)境中對(duì)無(wú)線通信系統(tǒng)的需求[1]。
國(guó)外針對(duì)采用Ad hoc技術(shù)的無(wú)線傳感網(wǎng)絡(luò)通常使用IEEE 802.15.4(Zigbee)技術(shù)、IEEE 802.15.1(藍(lán)牙)技術(shù)、IEEE802.11a/b/g/n(WiFi)技術(shù)、IEEE 802.16(WiMax)技術(shù)等[2]。而針對(duì)采用Ad hoc技術(shù)的應(yīng)急無(wú)線通信網(wǎng)絡(luò)通常使用Zigbee技術(shù)、WiFi技術(shù)和非公開的無(wú)線技術(shù)。基于Zigbee技術(shù)和WiFi技術(shù)的自組網(wǎng)絡(luò)的終端傳輸距離受限,無(wú)法實(shí)現(xiàn)長(zhǎng)距離、在高速運(yùn)動(dòng)中的數(shù)據(jù)傳輸?;赑owerPC+FPGA的無(wú)線系統(tǒng)實(shí)現(xiàn)長(zhǎng)距離、在高速運(yùn)動(dòng)中的數(shù)據(jù)傳輸,能很好的滿足軍事和應(yīng)急通信對(duì)無(wú)線通信系統(tǒng)的要求。
本文基于PowerPC+FPGA平臺(tái)設(shè)計(jì)一種FPGA驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)一路無(wú)線信號(hào)的發(fā)射和一路無(wú)線信號(hào)的接收,使用設(shè)備樹文件來(lái)配置FPGA網(wǎng)絡(luò)MAC地址、FPGA訪問(wèn)地址、中斷信息等硬件配置信息,MAC地址保存在U-Boot環(huán)境變量中,U-Boot在引導(dǎo)Linux內(nèi)核啟動(dòng)之前把MAC地址添加到設(shè)備樹文件中。
1 FPGA驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)
1.1 PowerPC平臺(tái)硬件架構(gòu)
基于PowerPC+FPGA的無(wú)線系統(tǒng)由網(wǎng)絡(luò)基帶板、射頻板和背板組成,網(wǎng)絡(luò)基帶板和射頻板通過(guò)背板連接。網(wǎng)絡(luò)基帶板實(shí)現(xiàn)操作系統(tǒng)的支持,F(xiàn)PGA實(shí)現(xiàn)無(wú)線通信的鏈路層和物理層以及無(wú)線信號(hào)的收發(fā)控制。射頻板實(shí)現(xiàn)一路無(wú)線信號(hào)的發(fā)射和接收。網(wǎng)絡(luò)基帶板使用Freescale公司的MPC8536E處理器,提供256MB的Nor Flash存儲(chǔ)空間,512MB的DDR2 SDRAM內(nèi)存空間,兩個(gè)RS232接口,兩個(gè)千兆以太網(wǎng)接口,一個(gè)PCI總線接口,一個(gè)miniPCIe接口,三個(gè)USB host接口。FPGA使用Xilinx公司的XC5VLX110T,提供32Mb配置文件存儲(chǔ)空間,使用LVDS信號(hào)接口和RS232接口與射頻板進(jìn)行通信。MPC8536E通過(guò)eLBC局部總線與FPGA通信,預(yù)留PCIe總線和eSPI接口。見圖1系統(tǒng)硬件架構(gòu)圖。
1.2 PowerPC平臺(tái)的統(tǒng)軟件架構(gòu)
操作系統(tǒng)選擇開源的嵌入式操作系統(tǒng)Linux,引導(dǎo)程序選用開源的引導(dǎo)程序U-Boot。根文件系統(tǒng)選擇Ramdisk文件系統(tǒng)。U-Boot選擇u-boot-200908的版本,Linux選用2.6.32-rc5的版本。
隨著Linux/PowerPC內(nèi)核的發(fā)展,把32位和64位PowerPC內(nèi)核代碼合并,使用一個(gè)OpenFirmware式的固件接口設(shè)備樹來(lái)支持所有的PowerPC平臺(tái),在這之前大多數(shù)PowerPC的嵌入式系統(tǒng)使用板卡特定數(shù)據(jù)結(jié)構(gòu)在引導(dǎo)程序和Linux內(nèi)核之間進(jìn)行數(shù)據(jù)傳遞,引入設(shè)備樹簡(jiǎn)化了Linux/PowerPC內(nèi)核啟動(dòng)順序[1]。U-Boot使用設(shè)備樹文件把硬件配置信息傳遞給Linux內(nèi)核。Linux/PowerPC內(nèi)核對(duì)每個(gè)硬件平臺(tái)都定義一個(gè)machdep_calls數(shù)據(jù)結(jié)構(gòu),內(nèi)核在啟動(dòng)時(shí)調(diào)用probe_machine()遍歷“.machine.desc”代碼段,并調(diào)用machdep_calls數(shù)據(jù)結(jié)構(gòu)相應(yīng)的.probe()函數(shù),每個(gè).probe()檢查設(shè)備樹并返回真,確定設(shè)備樹支持該硬件平臺(tái)[1]。使用設(shè)備樹的大多數(shù)嵌入式PowerPC平臺(tái)使用of_platform平臺(tái)總線,of_platform平臺(tái)總線是一個(gè)軟件注冊(cè)的虛擬總線。Linux內(nèi)核平臺(tái)代碼使用of_platform_bus_probe()遍歷設(shè)備樹的一部分,為其中的每個(gè)設(shè)備分配和注冊(cè)一個(gè)數(shù)據(jù)結(jié)構(gòu)of_device。反過(guò)來(lái)設(shè)備驅(qū)動(dòng)程序使用數(shù)據(jù)結(jié)構(gòu)of_platform_driver來(lái)注冊(cè),of_platform平臺(tái)總線負(fù)責(zé)匹配設(shè)備和驅(qū)動(dòng)程序。
1.3 FPGA網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)
1.3.1 FPGA網(wǎng)絡(luò)驅(qū)動(dòng)的設(shè)計(jì)
Linux系統(tǒng)將設(shè)備分為三種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備,字符設(shè)備和塊設(shè)備都是面向數(shù)據(jù)流的,通過(guò)/dev目錄下的設(shè)備文件來(lái)訪問(wèn),Linux系統(tǒng)中字符設(shè)備和塊設(shè)備的區(qū)別在于驅(qū)動(dòng)程序和內(nèi)核之間的接口,字符設(shè)備使用數(shù)據(jù)結(jié)構(gòu)file_operations的成員函數(shù)與Linux內(nèi)核通信,而塊設(shè)備使用數(shù)據(jù)結(jié)構(gòu)block_device_operations的成員函數(shù)。網(wǎng)絡(luò)接口是由內(nèi)核中的網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng),負(fù)責(zé)數(shù)據(jù)包的發(fā)送和接收,因此網(wǎng)絡(luò)驅(qū)動(dòng)程序是圍繞數(shù)據(jù)包的傳輸和接收而設(shè)計(jì)的[2]。內(nèi)核主要調(diào)用數(shù)據(jù)結(jié)構(gòu)net_device_ops的成員函數(shù)來(lái)實(shí)現(xiàn)內(nèi)核和網(wǎng)絡(luò)驅(qū)動(dòng)之間的數(shù)據(jù)傳輸。而在數(shù)據(jù)結(jié)構(gòu)net_device_ops中的成員函數(shù)中調(diào)用內(nèi)核提供:netif_start_queue、netif_stop_queue、netif_wake_queue、netif_rx等函數(shù)。網(wǎng)絡(luò)接口必須使用數(shù)據(jù)結(jié)構(gòu)net_device來(lái)注冊(cè),在與外界進(jìn)行數(shù)據(jù)包的交換時(shí)調(diào)用,網(wǎng)絡(luò)設(shè)備既響應(yīng)來(lái)自內(nèi)核的發(fā)送數(shù)據(jù)的請(qǐng)求,也要異步地接收來(lái)外部的數(shù)據(jù)包,并向內(nèi)核請(qǐng)求把從外部接收到的數(shù)據(jù)包傳送給內(nèi)核,網(wǎng)絡(luò)驅(qū)動(dòng)程序還支持管理任務(wù)比如設(shè)置MAC地址、修改傳輸參數(shù)以及維護(hù)流量和錯(cuò)誤統(tǒng)計(jì)等[2]。
FPGA驅(qū)動(dòng)程序需要實(shí)現(xiàn)一路無(wú)線信號(hào)的收發(fā)控制,為了實(shí)現(xiàn)有線網(wǎng)絡(luò)和無(wú)線網(wǎng)絡(luò)之間的路由轉(zhuǎn)發(fā),因此按照網(wǎng)絡(luò)驅(qū)動(dòng)來(lái)設(shè)計(jì)。FPGA網(wǎng)絡(luò)驅(qū)動(dòng)程序主要包括定義網(wǎng)絡(luò)設(shè)備私有數(shù)據(jù)結(jié)構(gòu),網(wǎng)絡(luò)設(shè)備訪問(wèn)方法和FPGA寄存器訪問(wèn)方法,驅(qū)動(dòng)模塊注冊(cè)和注銷函數(shù),中斷處理函數(shù)。其中網(wǎng)絡(luò)設(shè)備訪問(wèn)方法的實(shí)現(xiàn)主要通過(guò)數(shù)據(jù)結(jié)構(gòu)net_device的成員數(shù)據(jù)結(jié)構(gòu)指針netdev_ops的成員函數(shù)來(lái)實(shí)現(xiàn)。
(1)定義網(wǎng)絡(luò)設(shè)備私有數(shù)據(jù)結(jié)構(gòu)。FPGA通過(guò)eLBC局部總線與MPC8536E通信,F(xiàn)PGA既是一個(gè)網(wǎng)絡(luò)設(shè)備,也是一個(gè)局部總線上的設(shè)備。FPGA網(wǎng)絡(luò)設(shè)備私有數(shù)據(jù)結(jié)構(gòu)既包含網(wǎng)絡(luò)設(shè)備數(shù)據(jù)結(jié)構(gòu)net_device指針,也包含設(shè)備數(shù)據(jù)結(jié)構(gòu)of_device指針,同時(shí)也要包含mii_if_info數(shù)據(jù)結(jié)構(gòu)、自旋鎖、信號(hào)量、sk_buff_head數(shù)據(jù)結(jié)構(gòu)、work_struct數(shù)據(jù)結(jié)構(gòu)等變量,定義如下:
2 實(shí)驗(yàn)測(cè)試
2.1 點(diǎn)對(duì)點(diǎn)測(cè)試
兩臺(tái)無(wú)線系統(tǒng)平臺(tái)通過(guò)網(wǎng)絡(luò)和串口分別連接兩臺(tái)Linux系統(tǒng)的計(jì)算機(jī),兩個(gè)無(wú)線系統(tǒng)平臺(tái)之間通過(guò)空口連接,使用iperf命令進(jìn)行數(shù)據(jù)接收和發(fā)送測(cè)試:測(cè)試結(jié)果顯示:流量運(yùn)行平穩(wěn),都在10Mbps以上,滿足設(shè)計(jì)要求。
2.2 自組網(wǎng)測(cè)試
四臺(tái)無(wú)線系統(tǒng)平臺(tái)實(shí)現(xiàn)Ad hoc自組網(wǎng),其中2臺(tái)無(wú)線系統(tǒng)經(jīng)過(guò)2跳進(jìn)行流量測(cè)試:測(cè)試結(jié)果顯示:流量運(yùn)行平穩(wěn),都在1Mbps以上,滿足設(shè)計(jì)要求。
3 結(jié)束語(yǔ)
本文設(shè)計(jì)的FPGA驅(qū)動(dòng)程序合理高效,支持一路無(wú)線信號(hào)的發(fā)射和一路無(wú)線信號(hào)的接收,實(shí)現(xiàn)了無(wú)線系統(tǒng)之間點(diǎn)對(duì)點(diǎn)進(jìn)行通信,四臺(tái)無(wú)線系統(tǒng)實(shí)現(xiàn)了Ad hoc自組網(wǎng)絡(luò)。在后續(xù)的研究中,優(yōu)化FPGA網(wǎng)絡(luò)驅(qū)動(dòng)程序,支持四路無(wú)線信號(hào)的發(fā)射與接收。
參考文獻(xiàn):
[1]Grant Likely,Josh Boyer.A Symphony of Flavours:Using the device tree to describe embedded hardware[R].Ottawa,Canada:Linux Symposium,2008.
[2]Corbet J,Rubini A.魏永明,耿岳,譯.Linux設(shè)備驅(qū)動(dòng)程序[M].第3版.北京:中國(guó)電力出版社,2006.
[3]常關(guān)羽,許晴.Ad Hoc環(huán)境下基于穩(wěn)定鏈路的語(yǔ)音通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2011(01):107-111.
[4]JeroenHoebeke,IngridMoerman,BartDhoedt and Piet Demeester,An Overview of Mobile Ad Hoc Networks:Applications and Challenges[J].Journal of the Communications Network,2004(07):60-66.
[5]Bernard Sklar.徐平平,宋鐵生,葉芝慧,譯.數(shù)字通信——基礎(chǔ)與應(yīng)用[M].北京:電子工業(yè)出版社,2010.
[6]MPC8536E PowerQUICC III Integrated Processor Hardware Specifications[M].Rev.5 05/2011 Freescale.
[7]MPC8536E PowerQUICC III? Integrated Processor Reference Manual[M].Rev.1 05/2009 Freescale.
[8] PowerPC? e500 Core Family Reference Manual[M].Rev.1,2005,F(xiàn)reescale.
[9]EREF 2.0:A Programmer’s Reference Manual for Freescale Power Architecture? Processors[M].Rev.0,2011,F(xiàn)reescale.
[10]SreekrishnanVenkateswaran.宋寶華,何韶然,史海濱,吳國(guó)成,譯.精通Linux設(shè)備驅(qū)動(dòng)程序開發(fā)[M].北京:人民郵電出版社,2010.
[11]王齊,Linux PowerPC詳解[M].北京:機(jī)械工業(yè)出版社,2007.
[12]CHRISTIAAN BENVENUTI.夏宏,閻江毓,黃景昌,譯.深入理解Linux網(wǎng)絡(luò)技術(shù)內(nèi)幕[M].北京:中國(guó)電力出版社,2009.
[13]DANIEL P.BOVET MARCO CESATI.陳莉君,張瓊聲,張宏偉,譯.深入理解Linux內(nèi)核[M].北京:中國(guó)電力出版社,2007.
作者簡(jiǎn)介:楊柏松(1973-),男,天津人,本科,廣電事業(yè)部嵌入式技術(shù)總監(jiān),助理工程師,研究方向:嵌入式系統(tǒng)。
作者單位:東華軟件股份公司,北京 100190