史東冬 楊 清
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西 桂林 541004)
基于無線Mesh網(wǎng)絡(luò)的嵌入式網(wǎng)關(guān)研究與應(yīng)用
史東冬 楊 清
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西 桂林 541004)
分析了無線Mesh網(wǎng)絡(luò)的概念及其特性,介紹了一種在無線Mesh網(wǎng)絡(luò)上基于Linux操作系統(tǒng)的嵌入式網(wǎng)關(guān)實(shí)現(xiàn)方案。具體講述了基于ARM9的軟硬件平臺的構(gòu)建,同時詳細(xì)闡述了Linux下的網(wǎng)絡(luò)編程的實(shí)現(xiàn)方法,用Socket編程來實(shí)現(xiàn)此平臺與計算機(jī)的網(wǎng)絡(luò)通信。并對系統(tǒng)AODV路由協(xié)議的實(shí)現(xiàn)進(jìn)行了詳細(xì)分析。最后結(jié)合實(shí)例,通過視頻監(jiān)控系統(tǒng)對無線網(wǎng)關(guān)進(jìn)行驗(yàn)證,證明了該方案的可行性和有效性。
socket;無線Mesh網(wǎng)絡(luò);嵌入式Linux;AODV
隨著無線通信和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,使得無線Mesh網(wǎng)絡(luò)(Wireless Mesh Network,WMN)應(yīng)用于數(shù)字化、智能化及微型化的嵌入式系統(tǒng)成為可能。由于它具備組網(wǎng)迅速、結(jié)構(gòu)靈活、傳輸速率大、可靠性強(qiáng)、成本低等突出的優(yōu)點(diǎn),適應(yīng)了市場對網(wǎng)絡(luò)視頻監(jiān)控的新需求,勢必拓寬視頻監(jiān)控的應(yīng)用范圍。 本文介紹一個在嵌入式Linux系統(tǒng)和無線Mesh網(wǎng)上的網(wǎng)絡(luò)應(yīng)用,建立一個基于Linux和S3C2440的嵌入式網(wǎng)關(guān)平臺,通過Socket編程使這個平臺與計算機(jī)建立網(wǎng)絡(luò)通信,并給出服務(wù)器端和客戶端的詳細(xì)解釋。并提出一種由多個監(jiān)控節(jié)點(diǎn)、網(wǎng)關(guān)和遠(yuǎn)程監(jiān)控中心構(gòu)建的基于無線Mesh技術(shù)的視頻監(jiān)控系統(tǒng)。
為了將無線監(jiān)控終端設(shè)備接入網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,根據(jù)條件構(gòu)建了基于S3C2440和嵌入式Linux的無線網(wǎng)關(guān)平臺??紤]到業(yè)務(wù)功能的靈活性,我們實(shí)現(xiàn)一種簡單通用的視頻監(jiān)控網(wǎng)絡(luò)平臺,其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示?;跓o線Mesh網(wǎng)絡(luò)的嵌入式視頻監(jiān)控網(wǎng)絡(luò)結(jié)構(gòu)由多個無線視頻監(jiān)控終端節(jié)點(diǎn)、一個無線網(wǎng)關(guān)節(jié)點(diǎn)以及客戶監(jiān)控主機(jī)組成。視頻監(jiān)控終端節(jié)點(diǎn)和無線網(wǎng)關(guān)節(jié)點(diǎn)都是采用基于Linux的ARM9平臺,將臺式電腦作為遠(yuǎn)程監(jiān)控主機(jī)。
圖1 無線Mesh 網(wǎng)絡(luò)的嵌入式視頻監(jiān)控網(wǎng)絡(luò)結(jié)構(gòu)圖
結(jié)合業(yè)務(wù)需求,WMN選擇Ad Hoc典型按需距離矢量(AODV)路由協(xié)議來實(shí)現(xiàn)多跳功能。AODV路由協(xié)議是一種比較成熟且應(yīng)用廣泛的路由協(xié)議,具有較低的內(nèi)存和處理開銷,而且源碼開放、實(shí)現(xiàn)簡單。
無線網(wǎng)關(guān)具有管理維護(hù)整個Mesh網(wǎng)絡(luò)正常運(yùn)行以及數(shù)據(jù)轉(zhuǎn)發(fā)到其他網(wǎng)絡(luò)的功能。視頻監(jiān)控終端完成現(xiàn)場視頻流采集壓縮、無線路由以及數(shù)據(jù)收發(fā)的功能,將采集的視頻流壓縮后經(jīng)最佳無線路由發(fā)送到無線網(wǎng)關(guān),無線網(wǎng)關(guān)通過以太網(wǎng)將壓縮的視頻流轉(zhuǎn)發(fā)到遠(yuǎn)程監(jiān)控主機(jī),遠(yuǎn)程監(jiān)控主機(jī)對接收到的視頻流進(jìn)行數(shù)據(jù)處理,從而完成系統(tǒng)實(shí)時監(jiān)控功能。
1.嵌入式網(wǎng)關(guān)硬件方案設(shè)計
嵌入式網(wǎng)關(guān)硬件結(jié)構(gòu)如圖2所示。
本系統(tǒng)采用的嵌入式微處理器是三星公司S3C2440芯片,S3C2440芯片基于ARM920T內(nèi)核(16-/32-bit RISC CPU),采用五級流水線和哈佛結(jié)構(gòu),提供 1.1MIPS/MHz的性能,是高性能和低功耗的硬宏單元,基于ARM920T內(nèi)核的S3C2440微處理器是一個多用途的通用芯片,它內(nèi)部集成了微處理器和常用外圍組件,可用于各種領(lǐng)域,特別適用于手持設(shè)備。它是應(yīng)于手持設(shè)備的低成本實(shí)現(xiàn),提供了更高性價比。
根據(jù)業(yè)務(wù)的需要我們還需要在 S3C2440為主控芯片的基礎(chǔ)上對資源進(jìn)行擴(kuò)展,擴(kuò)展的主要模塊包括電源模塊、數(shù)據(jù)采集模塊和網(wǎng)絡(luò)傳輸模塊。外接電源模塊采用了太陽能電池和備用蓄電池雙重供電方案。在太陽能電池能量充足的情況下,使用太陽能電池供電,否則使用備用蓄電池。數(shù)據(jù)采集模塊用來收集視頻監(jiān)控系統(tǒng)中采集到的音頻數(shù)據(jù)和視頻數(shù)據(jù),它對視頻進(jìn)行 H.264格式的壓縮編碼,將數(shù)據(jù)流經(jīng) USB控制器擴(kuò)展的USB2.0接口輸出到RT73模塊。再經(jīng)由DM9000A以太網(wǎng)控制器模塊通過連接互聯(lián)網(wǎng)轉(zhuǎn)發(fā)到遠(yuǎn)程監(jiān)控主機(jī)。其中RT73模塊包含一個集成了MAC和基帶處理器的芯片和一個集成了功率放大器和天線的芯片,支持 IEEE 802.11b/g無線傳輸。
嵌入式網(wǎng)關(guān)如圖1所示:
圖2 嵌入式網(wǎng)關(guān)硬件結(jié)構(gòu)圖
2.嵌入式網(wǎng)關(guān)軟件設(shè)計
(1)嵌入式網(wǎng)關(guān)軟件結(jié)構(gòu)
嵌入式網(wǎng)關(guān)軟件框圖如圖3所示。
Linux的網(wǎng)絡(luò)功能是與其內(nèi)核緊密相連的,并且在網(wǎng)絡(luò)支持方面Linux要優(yōu)于其他操作系統(tǒng),同時其多用戶、多任務(wù)、低成本、可用于多種硬件平臺的特性也使得它在網(wǎng)絡(luò)開發(fā)方
圖3 嵌入式網(wǎng)關(guān)軟件框圖
(2)主要軟件實(shí)體
1)Linux操作系統(tǒng)
Linux操作系統(tǒng)采用成熟穩(wěn)定的2.6.28內(nèi)核。配置時根據(jù)硬件資源選擇Flash和SDRAM的大小,在網(wǎng)絡(luò)子項(xiàng)中選擇對TCP/IP和IEEE 802.1lb/g協(xié)議的支持,除去不需要的選項(xiàng)以縮減內(nèi)核體積,執(zhí)行編譯后得到Linux的內(nèi)核映像文件,再根據(jù)自己的需要定制yaffs文件系統(tǒng)鏡像。
2)驅(qū)動程序
Linux操作系統(tǒng)通過調(diào)用驅(qū)動程序的接口函數(shù)實(shí)現(xiàn)硬件訪問請求。RT73和DM9000的驅(qū)動程序分別控制相應(yīng)芯片完成數(shù)據(jù)接收和轉(zhuǎn)發(fā),USB接口控制和網(wǎng)絡(luò)傳輸控制功能,采用中斷觸發(fā)/響應(yīng)機(jī)制協(xié)調(diào)工作。
3)系統(tǒng)初始化程序
系統(tǒng)初始化即引導(dǎo)加載程序,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,將系統(tǒng)的軟硬件帶到一個合適的狀態(tài),以便為我們最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
4)AODV路由協(xié)議棧
無線路由是系統(tǒng)的重要組成部分,移植AODV路由協(xié)議是實(shí)現(xiàn)系統(tǒng)無線路由的基礎(chǔ)。編譯 AODV路由協(xié)議源程序,對Linux內(nèi)核進(jìn)行配置,編譯出支持ARM體系結(jié)構(gòu)的可執(zhí)行文件并將其燒錄到無線網(wǎng)關(guān)。
5)無線傳輸及網(wǎng)關(guān)軟件
網(wǎng)絡(luò)傳輸部分采用了Linux下的Socket網(wǎng)絡(luò)編程對接收到的視頻數(shù)據(jù)進(jìn)行傳輸。網(wǎng)絡(luò)傳輸程序完成視頻流數(shù)據(jù)包的封裝,經(jīng)以太網(wǎng)傳送到客戶監(jiān)控主機(jī)。為保證視頻流的實(shí)時性,使用 IEEE802.11b/g標(biāo)準(zhǔn)完成壓縮視頻流的無線接收和轉(zhuǎn)發(fā)。
(3)嵌入式Linux下的AODV協(xié)議開發(fā)
結(jié)合Ad hoc網(wǎng)絡(luò)的路由協(xié)議和無線Mesh網(wǎng)絡(luò)自身的特點(diǎn),本網(wǎng)關(guān)決定采用AODV(Ad-hoc On-Demand Distance-Vector)協(xié)議作為系統(tǒng)路由協(xié)議,AODV路由協(xié)議是針對移動 Ad hoc網(wǎng)設(shè)計的,它是按需式和表驅(qū)動式兩者的結(jié)合,同時具備了兩種思想的優(yōu)點(diǎn)。AODV路由算法屬于按需路由算法,即當(dāng)有源節(jié)點(diǎn)需要向某目的節(jié)點(diǎn)通信時,才在節(jié)點(diǎn)間建立路由,路由信息不會一直被保存,具有一定的生命期(TTL),若這條路由已不需要,則會被刪除。
下面簡單描述路由建立的過程,如圖4所示。
圖4 AODV路由建立過程
當(dāng)源節(jié)點(diǎn)S要給目的節(jié)點(diǎn)D發(fā)送數(shù)據(jù)包,但路由表中沒有到達(dá)D的路由時,S會發(fā)起一個路由發(fā)現(xiàn)過程。在路由發(fā)現(xiàn)過程中,將緩沖數(shù)據(jù)包。AODV路由發(fā)現(xiàn)過程如圖所示。
源節(jié)點(diǎn) S在整個網(wǎng)絡(luò)中廣播路由請求信息(Route Request,RREQ)。除了幾個標(biāo)志位之外,RREQ包還包括跳數(shù)、RREQ標(biāo)識符、目的地址和目的序列號、發(fā)端地址和發(fā)端序列號。跳數(shù)區(qū)域包括到發(fā)起RREQ消息的源節(jié)點(diǎn)的距離、源節(jié)點(diǎn)S。這時RREQ到當(dāng)前位置所經(jīng)過的跳數(shù)。RREQ ID是與發(fā)端地址相結(jié)合,唯一標(biāo)識一個路由請求。這用來保證即使節(jié)點(diǎn)從它的鄰節(jié)點(diǎn)多次接收到了RREQ消息,它都只需要重新廣播一次該路由請求消息,以避免廣播引起的擁塞。
當(dāng)節(jié)點(diǎn)接收到RREQ包時,它執(zhí)行以下過程。
1)產(chǎn)生或更新到上一跳節(jié)點(diǎn)的路由,RREQ包是從上一跳節(jié)點(diǎn)接收的。
2)核實(shí)RREQ ID和源地址,以確定是否已經(jīng)接收該RREQ。如果是,則丟棄該包。
3)跳數(shù)增加1。
4)產(chǎn)生或更新到源節(jié)點(diǎn)S的方向路由。
5)如果該節(jié)點(diǎn)就是請求的目的節(jié)點(diǎn),則產(chǎn)生一個路由應(yīng)答(Route Reply,RREP),并將該RREP包沿著產(chǎn)生的到源節(jié)點(diǎn)S的方向路徑發(fā)送給發(fā)起者。
6)如果該節(jié)點(diǎn)不是目的節(jié)點(diǎn),但有到目的節(jié)點(diǎn)的確定路徑,它將依賴目的節(jié)點(diǎn)的唯一標(biāo)識給源節(jié)點(diǎn)發(fā)起一個RREP包。
如果中間節(jié)點(diǎn)應(yīng)答RREQ,可能是這種情況:目的節(jié)點(diǎn)不能聽到任何RREQ消息,因此它沒有到源節(jié)點(diǎn)的反向路由。如果RREQ設(shè)置了無條件的RREP標(biāo)識,應(yīng)答的中間節(jié)點(diǎn)將給目的節(jié)點(diǎn)發(fā)送一個無條件的RREP。這樣就在目的節(jié)點(diǎn)設(shè)置了到RREQ發(fā)起者的路徑。
7)如果節(jié)點(diǎn)沒有產(chǎn)生RREP且TTL≥1,則更新RREQ并重新廣播。
節(jié)點(diǎn)接收到RREP消息后,將產(chǎn)生或更新其到目的節(jié)點(diǎn)D的路由。跳數(shù)逐跳加 1,最新的 RREP將轉(zhuǎn)發(fā)給相應(yīng)的 RREQ源發(fā)端。最終,如果存在一條到達(dá)目的節(jié)點(diǎn)的路徑,源節(jié)點(diǎn)S將接收一個RREP消息。這時,緩沖的數(shù)據(jù)包就可以通過新發(fā)現(xiàn)的路徑發(fā)送到目的節(jié)點(diǎn)D了。
(4)無線網(wǎng)絡(luò)傳輸及網(wǎng)關(guān)程序設(shè)計
為了網(wǎng)關(guān)系統(tǒng)與其他監(jiān)控節(jié)點(diǎn)的建立網(wǎng)絡(luò)數(shù)據(jù)連接,需要用到 Linux上的套接口編程,我們可以啟動一個程序來監(jiān)聽客戶端的要求,客戶端就可以通過套接字來進(jìn)行數(shù)據(jù)通信。Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計模式中,Socket其實(shí)就是一個門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。如圖5所示為基于TCP協(xié)議的客戶端/服務(wù)器進(jìn)程圖。
網(wǎng)關(guān)服務(wù)器端先初始化Socket,然后與端口綁定(bind),對端口進(jìn)行監(jiān)聽(listen),調(diào)用accept阻塞,等待客戶端連接。在這時如果網(wǎng)絡(luò)內(nèi)有個客戶端初始化一個Socket,然后連接服務(wù)器(connect),如果連接成功,這時客戶端與服務(wù)器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請求,服務(wù)器端接收請求并處理請求,然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),最后關(guān)閉連接,一次交互結(jié)束。
圖5 基于TCP協(xié)議的客戶端/服務(wù)器進(jìn)程圖
服務(wù)器端主要代碼如下:
pid_t fd;
struct sockaddr_in serveraddr;//定義網(wǎng)絡(luò)套接字地址結(jié)構(gòu)//
/*創(chuàng)建一個套接字,用于監(jiān)聽*/
listensock = socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(struct sockaddr)); //地址結(jié)構(gòu)清零
serveraddr.sin_family = AF_INET; //指定使用的通訊協(xié)議族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何連接
serveraddr.sin_port = htons(5000); //指定監(jiān)聽的端口
bind(listensock,(struct sockaddr*)&serveraddr,sizeof(structsockaddr_in));
//給套接口綁定地址
listen(listensock,1024);//開始監(jiān)聽
connsock = accept(listensock,(struct sockaddr *)NULL,NULL);
//建立通訊的套接字,accept 函數(shù),等待客戶端程序使用connect 函數(shù)的連接
……
close(sockfd);
exit(0);
把本系統(tǒng)應(yīng)用于某景區(qū)進(jìn)行測試,將3臺視頻監(jiān)控終端安置于監(jiān)控點(diǎn),各監(jiān)控點(diǎn)之間的距離約為200m。與無線網(wǎng)關(guān)平臺無線連接并組成無線多跳網(wǎng)絡(luò)。在啟動系統(tǒng)后,各個視頻監(jiān)控終端將采集到的視頻流經(jīng)MPEG-4軟件壓縮后通過無線網(wǎng)卡經(jīng)最佳路由發(fā)送到無線網(wǎng)關(guān)。無線網(wǎng)關(guān)對接收到的視頻流經(jīng)以太網(wǎng)轉(zhuǎn)發(fā)到遠(yuǎn)程監(jiān)控主機(jī)。無線網(wǎng)關(guān)還具有識別和管理各個視頻監(jiān)控終端的功能。遠(yuǎn)程監(jiān)控主機(jī)對接收到的視頻流進(jìn)行數(shù)據(jù)實(shí)時處理。實(shí)驗(yàn)測試表明,系統(tǒng)視頻流暢、圖像清晰、實(shí)時性強(qiáng),無線網(wǎng)關(guān)可以完成連接各無線視頻監(jiān)控終端并且將其監(jiān)控到的視頻轉(zhuǎn)發(fā)給遠(yuǎn)程監(jiān)控主機(jī)的功能。
無線Mesh網(wǎng)絡(luò)具有組網(wǎng)的快速靈活性和節(jié)點(diǎn)的分布性等優(yōu)點(diǎn),可以提供高速的接入速率,優(yōu)于其他的接入方式。此外,其以少量的基礎(chǔ)設(shè)施構(gòu)成覆蓋范圍廣的高速無線網(wǎng)絡(luò),投資較小,網(wǎng)絡(luò)建設(shè)時間短,便于升級。隨著科學(xué)家和工程師對無線Mesh網(wǎng)絡(luò)的重視程度日益提高和研究的不斷深入,更加成熟的無線Mesh網(wǎng)絡(luò)系統(tǒng)將很快得到推廣和應(yīng)用。
國內(nèi)在這方面雖然還處于起步研發(fā)階段,但已經(jīng)有了一些成熟的產(chǎn)品。筆者根據(jù)無線Mesh網(wǎng)絡(luò)的路由協(xié)議特點(diǎn),在嵌入式平臺下實(shí)現(xiàn)了一個簡單實(shí)用的無線網(wǎng)狀網(wǎng)絡(luò)下的無線網(wǎng)關(guān)系統(tǒng)。實(shí)驗(yàn)證明,該無線網(wǎng)關(guān)系統(tǒng)可以和外網(wǎng)連接,實(shí)現(xiàn)真正意義上的無縫連接。
[1] KEITH R.Mesh wireless networking[J].IEEE Communications Engineering,2003(10/11):44-47.
[2] 鄒思軼.嵌入式 Linux設(shè)計與應(yīng)用[M].北京:清華大學(xué)出版社,2002,(2).
[3] 任智,郭偉.多跳無線網(wǎng)路由協(xié)議研究進(jìn)展[J].電信科學(xué),2003,19(8):10-16.
[4] 楊樹清,王歡.Linux環(huán)境下 C 編程指南(第二版)[M].北京:清華大學(xué)出版社,2010,(2).
TN911
A
1008-1151(2011)05-0024-03
2011-02-23
史東冬(1985-),男,吉林四平人,桂林電子科技大學(xué)信息與通信學(xué)院碩士,研究方向?yàn)闊o線通信;楊清(1986-),女,江西臨川人,桂林電子科技大學(xué)信息與通信學(xué)院碩士,研究方向?yàn)楣馔ㄐ偶夹g(shù)。面優(yōu)勢明顯。本系統(tǒng)設(shè)計選擇采用成熟穩(wěn)定的 Linux2.6.28內(nèi)核。系統(tǒng)軟件設(shè)計主要工作包括底層驅(qū)動程序開發(fā)和上層應(yīng)用程序開發(fā)。