史東冬 楊 清
(桂林電子科技大學信息與通信學院,廣西 桂林 541004)
基于無線Mesh網絡的嵌入式網關研究與應用
史東冬 楊 清
(桂林電子科技大學信息與通信學院,廣西 桂林 541004)
分析了無線Mesh網絡的概念及其特性,介紹了一種在無線Mesh網絡上基于Linux操作系統的嵌入式網關實現方案。具體講述了基于ARM9的軟硬件平臺的構建,同時詳細闡述了Linux下的網絡編程的實現方法,用Socket編程來實現此平臺與計算機的網絡通信。并對系統AODV路由協議的實現進行了詳細分析。最后結合實例,通過視頻監控系統對無線網關進行驗證,證明了該方案的可行性和有效性。
socket;無線Mesh網絡;嵌入式Linux;AODV
隨著無線通信和網絡技術的飛速發展,使得無線Mesh網絡(Wireless Mesh Network,WMN)應用于數字化、智能化及微型化的嵌入式系統成為可能。由于它具備組網迅速、結構靈活、傳輸速率大、可靠性強、成本低等突出的優點,適應了市場對網絡視頻監控的新需求,勢必拓寬視頻監控的應用范圍。 本文介紹一個在嵌入式Linux系統和無線Mesh網上的網絡應用,建立一個基于Linux和S3C2440的嵌入式網關平臺,通過Socket編程使這個平臺與計算機建立網絡通信,并給出服務器端和客戶端的詳細解釋。并提出一種由多個監控節點、網關和遠程監控中心構建的基于無線Mesh技術的視頻監控系統。
為了將無線監控終端設備接入網絡實現遠程監控,根據條件構建了基于S3C2440和嵌入式Linux的無線網關平臺。考慮到業務功能的靈活性,我們實現一種簡單通用的視頻監控網絡平臺,其網絡結構如圖1所示。基于無線Mesh網絡的嵌入式視頻監控網絡結構由多個無線視頻監控終端節點、一個無線網關節點以及客戶監控主機組成。視頻監控終端節點和無線網關節點都是采用基于Linux的ARM9平臺,將臺式電腦作為遠程監控主機。

圖1 無線Mesh 網絡的嵌入式視頻監控網絡結構圖
結合業務需求,WMN選擇Ad Hoc典型按需距離矢量(AODV)路由協議來實現多跳功能。AODV路由協議是一種比較成熟且應用廣泛的路由協議,具有較低的內存和處理開銷,而且源碼開放、實現簡單。
無線網關具有管理維護整個Mesh網絡正常運行以及數據轉發到其他網絡的功能。視頻監控終端完成現場視頻流采集壓縮、無線路由以及數據收發的功能,將采集的視頻流壓縮后經最佳無線路由發送到無線網關,無線網關通過以太網將壓縮的視頻流轉發到遠程監控主機,遠程監控主機對接收到的視頻流進行數據處理,從而完成系統實時監控功能。
1.嵌入式網關硬件方案設計
嵌入式網關硬件結構如圖2所示。
本系統采用的嵌入式微處理器是三星公司S3C2440芯片,S3C2440芯片基于ARM920T內核(16-/32-bit RISC CPU),采用五級流水線和哈佛結構,提供 1.1MIPS/MHz的性能,是高性能和低功耗的硬宏單元,基于ARM920T內核的S3C2440微處理器是一個多用途的通用芯片,它內部集成了微處理器和常用外圍組件,可用于各種領域,特別適用于手持設備。它是應于手持設備的低成本實現,提供了更高性價比。
根據業務的需要我們還需要在 S3C2440為主控芯片的基礎上對資源進行擴展,擴展的主要模塊包括電源模塊、數據采集模塊和網絡傳輸模塊。外接電源模塊采用了太陽能電池和備用蓄電池雙重供電方案。在太陽能電池能量充足的情況下,使用太陽能電池供電,否則使用備用蓄電池。數據采集模塊用來收集視頻監控系統中采集到的音頻數據和視頻數據,它對視頻進行 H.264格式的壓縮編碼,將數據流經 USB控制器擴展的USB2.0接口輸出到RT73模塊。再經由DM9000A以太網控制器模塊通過連接互聯網轉發到遠程監控主機。其中RT73模塊包含一個集成了MAC和基帶處理器的芯片和一個集成了功率放大器和天線的芯片,支持 IEEE 802.11b/g無線傳輸。
嵌入式網關如圖1所示:

圖2 嵌入式網關硬件結構圖
2.嵌入式網關軟件設計
(1)嵌入式網關軟件結構
嵌入式網關軟件框圖如圖3所示。
Linux的網絡功能是與其內核緊密相連的,并且在網絡支持方面Linux要優于其他操作系統,同時其多用戶、多任務、低成本、可用于多種硬件平臺的特性也使得它在網絡開發方

圖3 嵌入式網關軟件框圖
(2)主要軟件實體
1)Linux操作系統
Linux操作系統采用成熟穩定的2.6.28內核。配置時根據硬件資源選擇Flash和SDRAM的大小,在網絡子項中選擇對TCP/IP和IEEE 802.1lb/g協議的支持,除去不需要的選項以縮減內核體積,執行編譯后得到Linux的內核映像文件,再根據自己的需要定制yaffs文件系統鏡像。
2)驅動程序
Linux操作系統通過調用驅動程序的接口函數實現硬件訪問請求。RT73和DM9000的驅動程序分別控制相應芯片完成數據接收和轉發,USB接口控制和網絡傳輸控制功能,采用中斷觸發/響應機制協調工作。
3)系統初始化程序
系統初始化即引導加載程序,初始化硬件設備、建立內存空間的映射圖,將系統的軟硬件帶到一個合適的狀態,以便為我們最終調用操作系統內核準備好正確的環境。
4)AODV路由協議棧
無線路由是系統的重要組成部分,移植AODV路由協議是實現系統無線路由的基礎。編譯 AODV路由協議源程序,對Linux內核進行配置,編譯出支持ARM體系結構的可執行文件并將其燒錄到無線網關。
5)無線傳輸及網關軟件
網絡傳輸部分采用了Linux下的Socket網絡編程對接收到的視頻數據進行傳輸。網絡傳輸程序完成視頻流數據包的封裝,經以太網傳送到客戶監控主機。為保證視頻流的實時性,使用 IEEE802.11b/g標準完成壓縮視頻流的無線接收和轉發。
(3)嵌入式Linux下的AODV協議開發
結合Ad hoc網絡的路由協議和無線Mesh網絡自身的特點,本網關決定采用AODV(Ad-hoc On-Demand Distance-Vector)協議作為系統路由協議,AODV路由協議是針對移動 Ad hoc網設計的,它是按需式和表驅動式兩者的結合,同時具備了兩種思想的優點。AODV路由算法屬于按需路由算法,即當有源節點需要向某目的節點通信時,才在節點間建立路由,路由信息不會一直被保存,具有一定的生命期(TTL),若這條路由已不需要,則會被刪除。
下面簡單描述路由建立的過程,如圖4所示。

圖4 AODV路由建立過程
當源節點S要給目的節點D發送數據包,但路由表中沒有到達D的路由時,S會發起一個路由發現過程。在路由發現過程中,將緩沖數據包。AODV路由發現過程如圖所示。
源節點 S在整個網絡中廣播路由請求信息(Route Request,RREQ)。除了幾個標志位之外,RREQ包還包括跳數、RREQ標識符、目的地址和目的序列號、發端地址和發端序列號。跳數區域包括到發起RREQ消息的源節點的距離、源節點S。這時RREQ到當前位置所經過的跳數。RREQ ID是與發端地址相結合,唯一標識一個路由請求。這用來保證即使節點從它的鄰節點多次接收到了RREQ消息,它都只需要重新廣播一次該路由請求消息,以避免廣播引起的擁塞。
當節點接收到RREQ包時,它執行以下過程。
1)產生或更新到上一跳節點的路由,RREQ包是從上一跳節點接收的。
2)核實RREQ ID和源地址,以確定是否已經接收該RREQ。如果是,則丟棄該包。
3)跳數增加1。
4)產生或更新到源節點S的方向路由。
5)如果該節點就是請求的目的節點,則產生一個路由應答(Route Reply,RREP),并將該RREP包沿著產生的到源節點S的方向路徑發送給發起者。
6)如果該節點不是目的節點,但有到目的節點的確定路徑,它將依賴目的節點的唯一標識給源節點發起一個RREP包。
如果中間節點應答RREQ,可能是這種情況:目的節點不能聽到任何RREQ消息,因此它沒有到源節點的反向路由。如果RREQ設置了無條件的RREP標識,應答的中間節點將給目的節點發送一個無條件的RREP。這樣就在目的節點設置了到RREQ發起者的路徑。
7)如果節點沒有產生RREP且TTL≥1,則更新RREQ并重新廣播。
節點接收到RREP消息后,將產生或更新其到目的節點D的路由。跳數逐跳加 1,最新的 RREP將轉發給相應的 RREQ源發端。最終,如果存在一條到達目的節點的路徑,源節點S將接收一個RREP消息。這時,緩沖的數據包就可以通過新發現的路徑發送到目的節點D了。
(4)無線網絡傳輸及網關程序設計
為了網關系統與其他監控節點的建立網絡數據連接,需要用到 Linux上的套接口編程,我們可以啟動一個程序來監聽客戶端的要求,客戶端就可以通過套接字來進行數據通信。Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。如圖5所示為基于TCP協議的客戶端/服務器進程圖。
網關服務器端先初始化Socket,然后與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果網絡內有個客戶端初始化一個Socket,然后連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求并處理請求,然后把回應數據發送給客戶端,客戶端讀取數據,最后關閉連接,一次交互結束。

圖5 基于TCP協議的客戶端/服務器進程圖
服務器端主要代碼如下:
pid_t fd;
struct sockaddr_in serveraddr;//定義網絡套接字地址結構//
/*創建一個套接字,用于監聽*/
listensock = socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(struct sockaddr)); //地址結構清零
serveraddr.sin_family = AF_INET; //指定使用的通訊協議族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何連接
serveraddr.sin_port = htons(5000); //指定監聽的端口
bind(listensock,(struct sockaddr*)&serveraddr,sizeof(structsockaddr_in));
//給套接口綁定地址
listen(listensock,1024);//開始監聽
connsock = accept(listensock,(struct sockaddr *)NULL,NULL);
//建立通訊的套接字,accept 函數,等待客戶端程序使用connect 函數的連接
……
close(sockfd);
exit(0);
把本系統應用于某景區進行測試,將3臺視頻監控終端安置于監控點,各監控點之間的距離約為200m。與無線網關平臺無線連接并組成無線多跳網絡。在啟動系統后,各個視頻監控終端將采集到的視頻流經MPEG-4軟件壓縮后通過無線網卡經最佳路由發送到無線網關。無線網關對接收到的視頻流經以太網轉發到遠程監控主機。無線網關還具有識別和管理各個視頻監控終端的功能。遠程監控主機對接收到的視頻流進行數據實時處理。實驗測試表明,系統視頻流暢、圖像清晰、實時性強,無線網關可以完成連接各無線視頻監控終端并且將其監控到的視頻轉發給遠程監控主機的功能。
無線Mesh網絡具有組網的快速靈活性和節點的分布性等優點,可以提供高速的接入速率,優于其他的接入方式。此外,其以少量的基礎設施構成覆蓋范圍廣的高速無線網絡,投資較小,網絡建設時間短,便于升級。隨著科學家和工程師對無線Mesh網絡的重視程度日益提高和研究的不斷深入,更加成熟的無線Mesh網絡系統將很快得到推廣和應用。
國內在這方面雖然還處于起步研發階段,但已經有了一些成熟的產品。筆者根據無線Mesh網絡的路由協議特點,在嵌入式平臺下實現了一個簡單實用的無線網狀網絡下的無線網關系統。實驗證明,該無線網關系統可以和外網連接,實現真正意義上的無縫連接。
[1] KEITH R.Mesh wireless networking[J].IEEE Communications Engineering,2003(10/11):44-47.
[2] 鄒思軼.嵌入式 Linux設計與應用[M].北京:清華大學出版社,2002,(2).
[3] 任智,郭偉.多跳無線網路由協議研究進展[J].電信科學,2003,19(8):10-16.
[4] 楊樹清,王歡.Linux環境下 C 編程指南(第二版)[M].北京:清華大學出版社,2010,(2).
TN911
A
1008-1151(2011)05-0024-03
2011-02-23
史東冬(1985-),男,吉林四平人,桂林電子科技大學信息與通信學院碩士,研究方向為無線通信;楊清(1986-),女,江西臨川人,桂林電子科技大學信息與通信學院碩士,研究方向為光通信技術。面優勢明顯。本系統設計選擇采用成熟穩定的 Linux2.6.28內核。系統軟件設計主要工作包括底層驅動程序開發和上層應用程序開發。