摘 要:Ad hoc網(wǎng)絡(luò)具有自組能力、良好的抗毀性、機動性、魯棒性和易于構(gòu)建,能很好滿足在軍事和應(yīng)急通信等復(fù)雜環(huán)境中對無線通信系統(tǒng)的需求?;赑owerPC+FPGA的無線系統(tǒng)實現(xiàn)Ad hoc網(wǎng)絡(luò)能很好的滿足軍事和應(yīng)急通信對無線通信的要求。本文為無線系統(tǒng)設(shè)計并實現(xiàn)了一種FPGA驅(qū)動程序,包括定義設(shè)備私有數(shù)據(jù)結(jié)構(gòu)、設(shè)備訪問方法、模塊注冊與注銷以及中斷處理方法,同時介紹了設(shè)備樹文件中FPGA子節(jié)點的設(shè)計。實驗結(jié)果顯示,F(xiàn)PGA驅(qū)動程序設(shè)計合理高效,實現(xiàn)了無線系統(tǒng)之間點對點的無線通信,多臺無線系統(tǒng)實現(xiàn)了Ad hoc自組網(wǎng),滿足設(shè)計要求。
關(guān)鍵詞:PowerPC;FPGA;設(shè)備樹文件;U-Boot;Linux內(nèi)核;FPGA驅(qū)動程序
中圖分類號:TP368.1
基于TCP/IP體系結(jié)構(gòu)采用Ad hoc技術(shù)的無中心節(jié)點的自組無線網(wǎng)絡(luò)結(jié)構(gòu),具有自組能力、良好的抗毀性、機動性、魯棒性和易于構(gòu)建,能很好滿足在軍事、搶險、應(yīng)急通信等復(fù)雜環(huán)境中對無線通信系統(tǒng)的需求[1]。
國外針對采用Ad hoc技術(shù)的無線傳感網(wǎng)絡(luò)通常使用IEEE 802.15.4(Zigbee)技術(shù)、IEEE 802.15.1(藍牙)技術(shù)、IEEE802.11a/b/g/n(WiFi)技術(shù)、IEEE 802.16(WiMax)技術(shù)等[2]。而針對采用Ad hoc技術(shù)的應(yīng)急無線通信網(wǎng)絡(luò)通常使用Zigbee技術(shù)、WiFi技術(shù)和非公開的無線技術(shù)?;赯igbee技術(shù)和WiFi技術(shù)的自組網(wǎng)絡(luò)的終端傳輸距離受限,無法實現(xiàn)長距離、在高速運動中的數(shù)據(jù)傳輸?;赑owerPC+FPGA的無線系統(tǒng)實現(xiàn)長距離、在高速運動中的數(shù)據(jù)傳輸,能很好的滿足軍事和應(yīng)急通信對無線通信系統(tǒng)的要求。
本文基于PowerPC+FPGA平臺設(shè)計一種FPGA驅(qū)動程序來實現(xiàn)一路無線信號的發(fā)射和一路無線信號的接收,使用設(shè)備樹文件來配置FPGA網(wǎng)絡(luò)MAC地址、FPGA訪問地址、中斷信息等硬件配置信息,MAC地址保存在U-Boot環(huán)境變量中,U-Boot在引導Linux內(nèi)核啟動之前把MAC地址添加到設(shè)備樹文件中。
1 FPGA驅(qū)動設(shè)計與實現(xiàn)
1.1 PowerPC平臺硬件架構(gòu)
基于PowerPC+FPGA的無線系統(tǒng)由網(wǎng)絡(luò)基帶板、射頻板和背板組成,網(wǎng)絡(luò)基帶板和射頻板通過背板連接。網(wǎng)絡(luò)基帶板實現(xiàn)操作系統(tǒng)的支持,F(xiàn)PGA實現(xiàn)無線通信的鏈路層和物理層以及無線信號的收發(fā)控制。射頻板實現(xiàn)一路無線信號的發(fā)射和接收。網(wǎng)絡(luò)基帶板使用Freescale公司的MPC8536E處理器,提供256MB的Nor Flash存儲空間,512MB的DDR2 SDRAM內(nèi)存空間,兩個RS232接口,兩個千兆以太網(wǎng)接口,一個PCI總線接口,一個miniPCIe接口,三個USB host接口。FPGA使用Xilinx公司的XC5VLX110T,提供32Mb配置文件存儲空間,使用LVDS信號接口和RS232接口與射頻板進行通信。MPC8536E通過eLBC局部總線與FPGA通信,預(yù)留PCIe總線和eSPI接口。見圖1系統(tǒng)硬件架構(gòu)圖。
1.2 PowerPC平臺的統(tǒng)軟件架構(gòu)
操作系統(tǒng)選擇開源的嵌入式操作系統(tǒng)Linux,引導程序選用開源的引導程序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)核代碼合并,使用一個OpenFirmware式的固件接口設(shè)備樹來支持所有的PowerPC平臺,在這之前大多數(shù)PowerPC的嵌入式系統(tǒng)使用板卡特定數(shù)據(jù)結(jié)構(gòu)在引導程序和Linux內(nèi)核之間進行數(shù)據(jù)傳遞,引入設(shè)備樹簡化了Linux/PowerPC內(nèi)核啟動順序[1]。U-Boot使用設(shè)備樹文件把硬件配置信息傳遞給Linux內(nèi)核。Linux/PowerPC內(nèi)核對每個硬件平臺都定義一個machdep_calls數(shù)據(jù)結(jié)構(gòu),內(nèi)核在啟動時調(diào)用probe_machine()遍歷“.machine.desc”代碼段,并調(diào)用machdep_calls數(shù)據(jù)結(jié)構(gòu)相應(yīng)的.probe()函數(shù),每個.probe()檢查設(shè)備樹并返回真,確定設(shè)備樹支持該硬件平臺[1]。使用設(shè)備樹的大多數(shù)嵌入式PowerPC平臺使用of_platform平臺總線,of_platform平臺總線是一個軟件注冊的虛擬總線。Linux內(nèi)核平臺代碼使用of_platform_bus_probe()遍歷設(shè)備樹的一部分,為其中的每個設(shè)備分配和注冊一個數(shù)據(jù)結(jié)構(gòu)of_device。反過來設(shè)備驅(qū)動程序使用數(shù)據(jù)結(jié)構(gòu)of_platform_driver來注冊,of_platform平臺總線負責匹配設(shè)備和驅(qū)動程序。
1.3 FPGA網(wǎng)絡(luò)驅(qū)動設(shè)計與實現(xiàn)
1.3.1 FPGA網(wǎng)絡(luò)驅(qū)動的設(shè)計
Linux系統(tǒng)將設(shè)備分為三種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備,字符設(shè)備和塊設(shè)備都是面向數(shù)據(jù)流的,通過/dev目錄下的設(shè)備文件來訪問,Linux系統(tǒng)中字符設(shè)備和塊設(shè)備的區(qū)別在于驅(qū)動程序和內(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ū)動,負責數(shù)據(jù)包的發(fā)送和接收,因此網(wǎng)絡(luò)驅(qū)動程序是圍繞數(shù)據(jù)包的傳輸和接收而設(shè)計的[2]。內(nèi)核主要調(diào)用數(shù)據(jù)結(jié)構(gòu)net_device_ops的成員函數(shù)來實現(xiàn)內(nèi)核和網(wǎng)絡(luò)驅(qū)動之間的數(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來注冊,在與外界進行數(shù)據(jù)包的交換時調(diào)用,網(wǎng)絡(luò)設(shè)備既響應(yīng)來自內(nèi)核的發(fā)送數(shù)據(jù)的請求,也要異步地接收來外部的數(shù)據(jù)包,并向內(nèi)核請求把從外部接收到的數(shù)據(jù)包傳送給內(nèi)核,網(wǎng)絡(luò)驅(qū)動程序還支持管理任務(wù)比如設(shè)置MAC地址、修改傳輸參數(shù)以及維護流量和錯誤統(tǒng)計等[2]。
FPGA驅(qū)動程序需要實現(xiàn)一路無線信號的收發(fā)控制,為了實現(xiàn)有線網(wǎng)絡(luò)和無線網(wǎng)絡(luò)之間的路由轉(zhuǎn)發(fā),因此按照網(wǎng)絡(luò)驅(qū)動來設(shè)計。FPGA網(wǎng)絡(luò)驅(qū)動程序主要包括定義網(wǎng)絡(luò)設(shè)備私有數(shù)據(jù)結(jié)構(gòu),網(wǎng)絡(luò)設(shè)備訪問方法和FPGA寄存器訪問方法,驅(qū)動模塊注冊和注銷函數(shù),中斷處理函數(shù)。其中網(wǎng)絡(luò)設(shè)備訪問方法的實現(xiàn)主要通過數(shù)據(jù)結(jié)構(gòu)net_device的成員數(shù)據(jù)結(jié)構(gòu)指針netdev_ops的成員函數(shù)來實現(xiàn)。
(1)定義網(wǎng)絡(luò)設(shè)備私有數(shù)據(jù)結(jié)構(gòu)。FPGA通過eLBC局部總線與MPC8536E通信,F(xiàn)PGA既是一個網(wǎng)絡(luò)設(shè)備,也是一個局部總線上的設(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指針,同時也要包含mii_if_info數(shù)據(jù)結(jié)構(gòu)、自旋鎖、信號量、sk_buff_head數(shù)據(jù)結(jié)構(gòu)、work_struct數(shù)據(jù)結(jié)構(gòu)等變量,定義如下:
2 實驗測試
2.1 點對點測試
兩臺無線系統(tǒng)平臺通過網(wǎng)絡(luò)和串口分別連接兩臺Linux系統(tǒng)的計算機,兩個無線系統(tǒng)平臺之間通過空口連接,使用iperf命令進行數(shù)據(jù)接收和發(fā)送測試:測試結(jié)果顯示:流量運行平穩(wěn),都在10Mbps以上,滿足設(shè)計要求。
2.2 自組網(wǎng)測試
四臺無線系統(tǒng)平臺實現(xiàn)Ad hoc自組網(wǎng),其中2臺無線系統(tǒng)經(jīng)過2跳進行流量測試:測試結(jié)果顯示:流量運行平穩(wěn),都在1Mbps以上,滿足設(shè)計要求。
3 結(jié)束語
本文設(shè)計的FPGA驅(qū)動程序合理高效,支持一路無線信號的發(fā)射和一路無線信號的接收,實現(xiàn)了無線系統(tǒng)之間點對點進行通信,四臺無線系統(tǒng)實現(xiàn)了Ad hoc自組網(wǎng)絡(luò)。在后續(xù)的研究中,優(yōu)化FPGA網(wǎng)絡(luò)驅(qū)動程序,支持四路無線信號的發(fā)射與接收。
參考文獻:
[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ū)動程序[M].第3版.北京:中國電力出版社,2006.
[3]常關(guān)羽,許晴.Ad Hoc環(huán)境下基于穩(wěn)定鏈路的語音通信系統(tǒng)設(shè)計與實現(xiàn)[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.宋寶華,何韶然,史海濱,吳國成,譯.精通Linux設(shè)備驅(qū)動程序開發(fā)[M].北京:人民郵電出版社,2010.
[11]王齊,Linux PowerPC詳解[M].北京:機械工業(yè)出版社,2007.
[12]CHRISTIAAN BENVENUTI.夏宏,閻江毓,黃景昌,譯.深入理解Linux網(wǎng)絡(luò)技術(shù)內(nèi)幕[M].北京:中國電力出版社,2009.
[13]DANIEL P.BOVET MARCO CESATI.陳莉君,張瓊聲,張宏偉,譯.深入理解Linux內(nèi)核[M].北京:中國電力出版社,2007.
作者簡介:楊柏松(1973-),男,天津人,本科,廣電事業(yè)部嵌入式技術(shù)總監(jiān),助理工程師,研究方向:嵌入式系統(tǒng)。
作者單位:東華軟件股份公司,北京 100190