在嵌入式Linux中實現802.11b無線網關 |
發布時間: 2012/8/26 18:06:30 |
構成有線網絡的傳輸媒介主要依賴銅纜或光纜;但有線網絡在某些場合要受到布線的限制,特別是當要把相隔較遠的節點連接起來時,敷設專用通信線路的布線施工難度大、費用高、耗時長,對正在迅速擴大的連網需求形成了瓶頸。無線局域網的出現克服了上述缺點,因此無線局域網發展比較迅速。基于802.11b的產品已成為應用主流。這些產品使用的是2.4 GHz頻段,能夠在短距離內實現11 Mb/s的接入速率,每個接入點可以同時支持多個用戶的接入。而無線網關作為連接無線終端與有線網絡之間的橋梁,是構成無限局域網的重要組成部分。作者重點要探討的就是如何在嵌入式Linux系統上實現無線網關的功能。
1、嵌入式Linux的基本原理 ![]() 配置Linux的內核模塊,用PCMCIA CardService的方式驅動PCMCIA,運行“make modeules”以及“make modeules_install"來產生和安裝核心模組。由于標準發行的“Linux內核源碼中,橋接功能和封包過濾功能(NetFiIi—ter)不能一起正常工作,因此為了要在同一臺計算機上同時運行橋接功能和IPtables,需要對核心源碼進行修補。相關補丁可以從http://bridge.sourceforge.net/上下載。另外,要獲取PCMCIA-CS 3.2.1和PRISM2 HlostAP的驅動程序包,移植PCMCIA-CS和PRISM2 HostAP的驅動程序。完成這一步工作需要具有Linux下編譯程序源碼的簡單知識,主要是交叉編譯器(GCC)的使用。編譯好的模塊*.o文件放在/lib/modules/2.4.4/misc:下,然后用depmod-a使此模塊成為可加載模塊。模塊用insmod命令加載,用rmmod命令卸載,并可以用lsmod命令查看所有已加載的模塊的狀態。最后,橋接有線網卡和無線網卡,需要Linux下硬件(主要是網卡)配置和網絡配置的一些基本知識。 模塊搭建完畢后進行橋接功能的構建。解開橋接補丁bridge-utils.tar.gz,編譯全部通過并且移植成功后,可以用“ifconfig-a”命令查看所有的網絡接口:lo——本地loopback設備;ethO——第一個以太網卡;ethl——第二個以太網卡;wlan0——無線網卡。用“ifconfig<設備>0.O.0.O”命令改變除了lo設備以外所有網絡接口的工作方式,以迫使系統進入雜亂模式,可以接收所有數據包。然后,執行“brctl addbr br0”命令來添加一個名字為br0的橋接設備,再用“bretl addif br0 ethO”和“brctl addif br0wlan0"把無線端和有線端的接口綁定。接著,用“ifeonfigbr0 192.168.2.18 up'’使橋接設備生效。 內核配置時選定GeneraI setup--->[*]Sysctlsupport,這樣才會在板子的文件系統中/proc/sys/net/ipv4/出現ip_forward文件,然后在應用程序中提供ena程序(加到etc/init.d/rcS中一句/bin/ena-e),將ip_for-ward文件中默認的0改為1,這樣就打通了數據轉發的通道。下面就是要加上iptables,以支持NAT(NetWork Ad—dress Translation)。從網上下載iptables-1.2.5軟件,在iptables-1.2.5目錄下執行make,編譯通過后,將生成的可執行文件iptables加到ramdisk里面,然后燒寫到板子上進行配置即可。 iptables對NAT的支持既需要Linux內核的支持,還需要iptables命令的設置: ①內核編譯選項。在內核配置選單中的“Networkingoptions--->"選項下,選中“NetWork packet filtering(replaces ipchains)”項,并且在下面的“IP:Netfilter Con—figuration--->”選項中選擇全部選項。 ②iptables命令支持 #!/bin/bash # 打開端口轉發 echo 1>/proc/sys/net/ipv4/ip_forward加入轉發規則:iptables - t nat - A POS—TROUTING - 0 ethl - j MASOUERADE。 至此,構建無線網關的工作全部完成。 3、測試結果 搭建無線網關的測試系統如圖2所示。 ![]() 將上位機的網關設置為172.17.248.169,用VB 6.0在上位機上開發一個負責監聽網絡的應用程序;在無線終端一方編寫一個客戶端程序,負責客戶端數據的發送和接收顯示,并在無線終端一方添加從網關到上位機的路由。然后,上位機運行ping命令,測試結果如下: # ping 192.168.6.100 PING 192.168.6.100 (192.168.6.100):56 data bytes 64 bytes from 192.168.6.100:icmp_seq=0 ttl=255 time=1.8 ms 64 bytes from 192.168.6.100:icmp_seq=1 ttl=255 time=1.4 ms 64 bytes from 192.168.6.100:icmp_seq=2 ttl=255 time=1.4 ms 64 bytes from 192.168.6.100:icmp_seq=3 ttl=255 time=1.4 ms ---192.168.6.100 ping statistics---4 packets transmitted,4 packets received,0% packet loss round—trip min/avg/max=1.4/1.5/1.8 ms上位機與無線終端通信的測試結果如圖3所示。 ![]()
本文出自:億恩科技【www.laynepeng.cn】 本文出自:億恩科技【www.enidc.com】 --> |