范延濱 李小康
摘 要:討論了在嵌入式Linux下實(shí)現(xiàn)Wi-Fi接入的方法。在分析嵌入式Linux下無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序架構(gòu)和無(wú)線網(wǎng)絡(luò)的配置工具——Linux Wireless Tools和wpa_supplicant的基礎(chǔ)上,結(jié)合Tiny210開(kāi)發(fā)板平臺(tái),通過(guò)實(shí)例介紹了在嵌入式Linux平臺(tái)上連接基于WPA/WPA2加密技術(shù)的Wi-Fi連接點(diǎn)的原理和方法。
關(guān)鍵詞:嵌入式Linux;Wi-Fi;wap_supplicant;無(wú)線網(wǎng)絡(luò)
中圖分類(lèi)號(hào):TP316.2 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-1302(2014)10-00-03
0 引 言
Wi-Fi也稱(chēng)為WLAN(wireless local-area network,無(wú)線局域網(wǎng)),是有線LAN的補(bǔ)充。Wi-Fi實(shí)際上是一個(gè)無(wú)線網(wǎng)絡(luò)通信技術(shù)的品牌,由Wi-Fi聯(lián)盟持有,目的是改進(jìn)基于IEEE 802.11標(biāo)準(zhǔn)的無(wú)線網(wǎng)路產(chǎn)品之間的互通性。隨著Wi-Fi技術(shù)的發(fā)展,產(chǎn)生了許多協(xié)議標(biāo)準(zhǔn):IEEE 802.11.a WLAN標(biāo)準(zhǔn)使用5 GHz ISM頻段,支持最高54 Mb/s的速率;802.11b和802.11g標(biāo)準(zhǔn)使用2.4 GHz頻段,分別支持11 Mb/s和54 Mb/s的速率。作為一種比較成熟的無(wú)線通信技術(shù),Wi-Fi在嵌入式設(shè)備中得到了廣泛的應(yīng)用,尤其是在嵌入式Linux環(huán)境中。本文探討了在嵌入式Linux環(huán)境下Wi-Fi技術(shù)的應(yīng)用,首先介紹了Wi-Fi設(shè)備驅(qū)動(dòng)程序的相關(guān)內(nèi)容,然后介紹了一些嵌入式Linux下無(wú)線網(wǎng)絡(luò)配置工具及其特點(diǎn),最后分析了嵌入式Linux環(huán)境下通過(guò)Wi-Fi接入網(wǎng)絡(luò)的方法。
1 Linux下Wi-Fi設(shè)備驅(qū)動(dòng)程序
目前,Linux無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序的架構(gòu)如圖1所示:
圖 1 Linux無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序架構(gòu)
由圖1可知,Linux無(wú)線驅(qū)動(dòng)程序主要包括以下4個(gè)部分:用戶(hù)空間、cfg80211無(wú)線網(wǎng)絡(luò)配置API、mac80211驅(qū)動(dòng)程序和非mac80211驅(qū)動(dòng)程序,這幾個(gè)部分組成了一種層次結(jié)構(gòu),共同完成無(wú)線網(wǎng)絡(luò)的接入和配置。
最底層是設(shè)備驅(qū)動(dòng)程序?qū)樱╩ac80211和非mac80211兩種驅(qū)動(dòng)程序。mac80211是一種標(biāo)準(zhǔn)的驅(qū)動(dòng)程序框架,推薦未來(lái)的無(wú)線設(shè)備驅(qū)動(dòng)程序采用此框架來(lái)編寫(xiě)。mac80211驅(qū)動(dòng)程序?yàn)樯蠈犹峁┝藘煞N不同的接口:Wext接口(Wireless Extensions接口,Linux內(nèi)核中為無(wú)線網(wǎng)絡(luò)提供支持的接口,是一種比較老的接口)和cfg80211 ops接口。其中Wext接口為基于Wext接口的應(yīng)用程序提供支持,而cfg80211 ops接口為上層cfg80211提供支持。而非mac80211驅(qū)動(dòng)程序是比較老的驅(qū)動(dòng)程序,僅對(duì)Wext接口提供支持。
cfg80211下層使用mac80211驅(qū)動(dòng)程序的接口,為上層的應(yīng)用程序提供標(biāo)準(zhǔn)的無(wú)線設(shè)備配置接口。nl80211是采用cfg80211接口的應(yīng)用程序庫(kù),有多種基于該應(yīng)用程序庫(kù)的無(wú)線網(wǎng)絡(luò)配置程序,例如iw、crda、hostapd和wpa_supplicant(當(dāng)使用-Dnl80211選項(xiàng)時(shí)) 。
一個(gè)WNIC(Wireless Network Interface Controller,無(wú)線網(wǎng)絡(luò)接口控制器)可以工作在以下幾種模式下:
基站模式(STA)。任何無(wú)線設(shè)備驅(qū)動(dòng)程序都可以在該模式下工作,這種模式可以認(rèn)為是默認(rèn)模式。在該模式下工作的網(wǎng)卡需要連接到一個(gè)在AP模式下工作的網(wǎng)卡。這種模式在Wireless Extensions配置工具下被成為managed。
接入點(diǎn)模式(AP)。在接入點(diǎn)模式下工作的網(wǎng)卡又被稱(chēng)為主設(shè)備。它通過(guò)管理和維護(hù)接入它的STA的列表來(lái)管理整個(gè)無(wú)線網(wǎng)絡(luò)。一個(gè)無(wú)線網(wǎng)絡(luò)以AP的BSSID(Basic Service Set ID)命名。
監(jiān)聽(tīng)模式(MON)。這是一個(gè)被動(dòng)模式,工作在該模式下的無(wú)線網(wǎng)卡只接收數(shù)據(jù)包,不會(huì)發(fā)送數(shù)據(jù)包。使用mac80211,一個(gè)無(wú)線網(wǎng)卡在正常工作時(shí)也可以以監(jiān)聽(tīng)模式工作,并且可以發(fā)送數(shù)據(jù)包。
點(diǎn)對(duì)點(diǎn)模式(Ad-Hoc)。也被成為IBSS(Independent Basic Service Set)模式,用來(lái)在沒(méi)有AP的情況下創(chuàng)建無(wú)線網(wǎng)絡(luò)。在該模式下,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)獨(dú)立維護(hù)網(wǎng)絡(luò)。
無(wú)線分布式系統(tǒng)模式(WDS)。該模式用來(lái)實(shí)現(xiàn)多個(gè)AP之間的連接。
Mesh模式。該模式允許多個(gè)設(shè)備之間通過(guò)建立動(dòng)態(tài)路由來(lái)通信。
以上模式中,最為常用的是前兩種模式。我們通常使用的無(wú)線路由器其實(shí)就工作在AP模式下,我們可以通過(guò)使用手機(jī)或者筆記本電腦連接到路由器,手機(jī)和筆記本電腦的無(wú)線路由器就工作在STA模式下。
Wi-Fi網(wǎng)絡(luò)的加密方式主要有WEP(Wired Equivalent Privacy)、WPA(Wi-Fi Protected Access)和WPA2(即WPA的加強(qiáng)版)。WEP加密方式在同一個(gè)網(wǎng)絡(luò)中的所有設(shè)備使用相同的64 b或者128 b的密鑰,安全性很低。因此現(xiàn)在一般采用WPA加密方式。WPA又分為家用的WPA-PSK(Pre-Shared Key)和企業(yè)用的WPA-Enterprise版本。WPA實(shí)現(xiàn)了IEEE 02.811i標(biāo)準(zhǔn)的大部分。WPA 超越 WEP 的主要改進(jìn)就是在使用中可以動(dòng)態(tài)改變密鑰的“臨時(shí)密鑰完整性協(xié)定”(Temporal Key Integrity Protocol,TKIP),加上更長(zhǎng)的初向量,這可以擊敗知名的針對(duì) WEP 的密鑰擷取攻擊 。WPA2與WPA的差別在于,它使用更安全的加密技術(shù)AES (Advanced Encryption Standard),因此比WPA更難被破解、更安全。
2 Wi-Fi配置工具
Linux下比較常用的無(wú)線網(wǎng)絡(luò)配置工具主要有Linux Wireless Tools和wpa_supplicant。Linux Wireless Tools是一種比較老的無(wú)線網(wǎng)絡(luò)配置工具。wpa_supplicant主要用來(lái)支持WPA和WPA2,而Linux Wireless Tools不提供支持。與運(yùn)行于內(nèi)核空間的驅(qū)動(dòng)程序不同,這兩個(gè)工具都是運(yùn)行在用戶(hù)空間的軟件。
2.1 Linux無(wú)線工具(Linux Wireless Tools)
無(wú)線擴(kuò)展(Wireless Extension)定義了一組驅(qū)動(dòng)程序提供給應(yīng)用程序的通用的API,使用基于該API的工具集可以實(shí)現(xiàn)對(duì)任意無(wú)線網(wǎng)卡的配置,并且可以在不重啟驅(qū)動(dòng)程序的情況下修改配置參數(shù)。無(wú)線工具集主要包括iwconfig、iwlist、iwspy、iwpriv和ifrename。iwconfig可以修改最基本的網(wǎng)絡(luò)參數(shù)。iwlist可以?huà)呙璨⒘信e頻率、位速率和加密方式。iwspy可以獲取一個(gè)節(jié)點(diǎn)的連接質(zhì)量。iwpriv可以針對(duì)特定的無(wú)線網(wǎng)卡驅(qū)動(dòng)程序進(jìn)行操作。ifrename可以基于各種動(dòng)態(tài)標(biāo)準(zhǔn)對(duì)接口命名。
2.2 wpa_supplicant
wpa_supplicant在使用時(shí)作為一個(gè)后臺(tái)進(jìn)程運(yùn)行,用來(lái)控制無(wú)線連接,可以認(rèn)為是一個(gè)服務(wù)進(jìn)程。wpa_supplicant的設(shè)計(jì)目標(biāo)是對(duì)所有的WPA功能使用與硬件、驅(qū)動(dòng)程序和操作系統(tǒng)無(wú)關(guān)的C代碼。其他的程序作為客戶(hù)端進(jìn)程與wpa_supplicant通信,向wpa_supplicant發(fā)送命令。wpa_supplicant源代碼中提供了wpa_cli(一個(gè)文本界面的命令程序)和wpa_gui(一個(gè)圖形界面的程序)作為客戶(hù)端程序與wpa_supplicant通信。當(dāng)wpa_supplicant作為后臺(tái)進(jìn)程運(yùn)行時(shí),就可以使用這兩個(gè)工具來(lái)控制無(wú)線連接。
3 嵌入式Linux下Wi-Fi連接的實(shí)現(xiàn)
嵌入式Linux下實(shí)現(xiàn)Wi-Fi連接,主要包括以下幾個(gè)步驟:
(1)移植相應(yīng)無(wú)線網(wǎng)卡的驅(qū)動(dòng)程序;
(2)移植Linux Wireless Tools和wpa_supplicant工具;
(3)使用Linux Wireless Tools和wpa_supplicant工具配置Wi-Fi連接。
本文使用的開(kāi)發(fā)平臺(tái)是有善之臂的Tiny210,使用的無(wú)線網(wǎng)絡(luò)芯片是具有SDIO接口的Marvell8686,采用busybox構(gòu)建了基本的根文件系統(tǒng)。
(1)加載無(wú)線網(wǎng)卡設(shè)備驅(qū)動(dòng)程序
友善之臂提供了已經(jīng)編譯好的Marvell8686驅(qū)動(dòng)程序模塊,在其提供的跟文件系統(tǒng)的/lib/modules/3.0.8-FriendlyARM/目錄下有已經(jīng)編譯好的Linux驅(qū)動(dòng)程序模塊,將該目錄拷貝到自己構(gòu)建的跟文件系統(tǒng)目錄下。在此之前,確保開(kāi)發(fā)板燒寫(xiě)的Linux內(nèi)核版本為3.0.8,以保證驅(qū)動(dòng)程序模塊版本與內(nèi)核版本一致。在/etc/init.d/rcS啟動(dòng)腳本中添加如下命令:
modprobe libertas_sdio 2>/dev/null
以上命令的作用是在系統(tǒng)啟動(dòng)時(shí),加載libertas_sdio模塊。使用該命令在加載內(nèi)核模塊時(shí)不需要指明模塊的路徑,它會(huì)自動(dòng)從/lib/modules目錄下尋找合適的驅(qū)動(dòng)加載。
對(duì)于其他的無(wú)線網(wǎng)卡驅(qū)動(dòng)程序,加載的方法是類(lèi)似的,也可以先編譯出內(nèi)核模塊,用insmod命令加載。
(2)移植Linux Wireless Tools工具
下載Linux Wireless Tools并解壓,修改Makefile文件,將gcc、ar、ranlib分別修改為arm-linux-gcc、arm-linux-ar、arm-linux-ranlib。使用make命令編譯,編譯完成后,將libiw.so.29拷貝到根文件系統(tǒng) lib目錄下,將編譯生成的iwevent、ifrename、iwconfig、iwlist、iwpriv、iwspy拷貝到根文件系統(tǒng)的/bin目錄下。
(3)移植wpa_supplicant
wpa_supplicant需使用OpenSSL庫(kù)。OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書(shū)封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
首先下載wpa_supplicant-0.7.3和openssl-0.9.8e,解壓源碼包,將wpa_supplicant中的openssl補(bǔ)丁拷貝到openssl源碼目錄下。
cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
建立目錄/usr/local/ssl,以保存編譯好的openssl庫(kù)。
cd openssl-0.9.8e,進(jìn)入源碼目錄,修改Makefile文件,修改如下變量:CC= arm-linux-gnu-gcc ;AR= arm-linux-gnu-ar $(ARFLAGS) r;RANLIB= arm-linux-gnu-ranlib;INSTALLTOP=/usr/local/ssl;OPENSSLDIR=/usr/local/ssl。執(zhí)行make,make install命令,可以在/usr/local/ssl目錄下生成openssl庫(kù)文件,這些庫(kù)文件是靜態(tài)庫(kù)文件。
編譯wpa_supplicant方法如下:將源碼目錄下的defconfig文件重命名為.config文件。修改.config文件:CC= arm-linux-gnu-gcc -L/usr/local/ssl/lib/(連接靜態(tài)庫(kù));CFLAGS += -I/usr/local/ssl/include/;LIBS += -L/usr/local/ssl/lib/。執(zhí)行make命令編譯,即可在源碼目錄下生成可以在開(kāi)發(fā)板上運(yùn)行的wpa_supplicant程序,包括wpa_cli、wpa_passphrase、bin/wpa_supplicant等,將這些程序拷貝到開(kāi)發(fā)板的/bin目錄下。
(4)搜索和連接無(wú)線網(wǎng)絡(luò)
要搜索無(wú)線網(wǎng)絡(luò),最簡(jiǎn)單的是使用Linux Wireless Tools工具。使用Linux無(wú)線工具配置Wi-Fi網(wǎng)絡(luò)的主要步驟如下:
查看可用的無(wú)線網(wǎng)卡:iwconfig;
啟用無(wú)線網(wǎng)卡:ifconfig wlan0 up;
列舉無(wú)線網(wǎng)絡(luò):iwlist wlan0 scan,可以?huà)呙璧街車(chē)腁P。
使用Linux Wireless Tools工具只能連接WEP加密的網(wǎng)絡(luò),無(wú)法連接WPA/WPA2加密的網(wǎng)絡(luò)。通常使用該工具對(duì)無(wú)線網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單的配置,如掃描和啟動(dòng)無(wú)線網(wǎng)卡等。
wpa_supplicant是作為一個(gè)服務(wù)程序運(yùn)行的。在啟動(dòng)wpa_supplicant時(shí),需要一個(gè)wpa_supplicant.conf配置文件,該文件指明了要連接的AP的ESSID和連接密鑰等信息。采用如下命令可以根據(jù)明文密碼創(chuàng)建暗文密碼:
wpa_passphrase FAST_555B30 417417417
以上命令的含義是要連接的ESSID為FAST_555B30,這個(gè)是通過(guò)掃描得到的。417417417是要連接的明文密碼。生成的psk顯示如下:
psk=b461ee0209a9b5a6f114317e9ae72f52829b5f743e47a600b7a08911cc3bd30f
對(duì)于不同的加密方式,wpa_supplicant.conf的內(nèi)容也不一樣。FAST_555B30使用的是WPA2加密方式,wpa_supplicant.conf文件如下:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid=”FAST_555B30”
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
psk=1512bf80a15b8b595522e18cf3a51db47d5084da9565ad38ffec9ab1da37a108
}
其中,ctrl_interface指明了控制接口路徑,wpa_cli等程序可能使用該路徑來(lái)與wpa_supplicant通信。ssid和psk指明了要連接的AP及其暗文密碼。key_mgmt指明了密鑰管理方式。如果是WPA2方式加密的,proto=WPA2,pairwise=CCMP。
采用如下命令可以啟動(dòng)wpa_supplicant服務(wù)進(jìn)程:
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
-D選項(xiàng)指明了采用的驅(qū)動(dòng)程序接口,這里是Wext接口。-i選項(xiàng)指明了無(wú)線網(wǎng)絡(luò)接口名稱(chēng)。-c選項(xiàng)指示使用的配置文件。啟動(dòng)了wpa_supplicant命令,就可以連接到WPA2加密的無(wú)線網(wǎng)絡(luò),如果要使用DHCP動(dòng)態(tài)獲取IP地址,可以采用如下命令:
udhcpc -i wlan0
udhcpc是busybox中包含的DHCP客戶(hù)端工具。也可以直接使用ifconfig命令配置靜態(tài)IP地址,例如:ifconfig wlan0 192.168.0.10。
4 結(jié) 語(yǔ)
本文在分析現(xiàn)有的Linux下的無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序框架和常用無(wú)線網(wǎng)絡(luò)配置應(yīng)用程序的基礎(chǔ)之上,通過(guò)實(shí)例介紹了Linux下Wi-Fi連接的方法。實(shí)際測(cè)試表明,該方法可以有效實(shí)現(xiàn)嵌入式Linux下的Wi-Fi網(wǎng)絡(luò)接入,對(duì)于嵌入式Linux下的Wi-Fi應(yīng)用開(kāi)發(fā)有一定的參考意義。
參考文獻(xiàn)
[1]劉芳華,周鳳星. Linux下Wi-Fi驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化儀表, 2011,32(3):1-3
[2] Jouni Malinen . Linux WPA/WPA2/IEEE 802.1X Supplicant [EB/OL].[2013-1-12].http://hostap.epitest.fi/wpa_supplicant/.
[3]裴超. 基于Android平臺(tái)Wi-Fi模塊的設(shè)計(jì)與實(shí)現(xiàn)[D]. 武漢:華中科技大學(xué),2011
(4)搜索和連接無(wú)線網(wǎng)絡(luò)
要搜索無(wú)線網(wǎng)絡(luò),最簡(jiǎn)單的是使用Linux Wireless Tools工具。使用Linux無(wú)線工具配置Wi-Fi網(wǎng)絡(luò)的主要步驟如下:
查看可用的無(wú)線網(wǎng)卡:iwconfig;
啟用無(wú)線網(wǎng)卡:ifconfig wlan0 up;
列舉無(wú)線網(wǎng)絡(luò):iwlist wlan0 scan,可以?huà)呙璧街車(chē)腁P。
使用Linux Wireless Tools工具只能連接WEP加密的網(wǎng)絡(luò),無(wú)法連接WPA/WPA2加密的網(wǎng)絡(luò)。通常使用該工具對(duì)無(wú)線網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單的配置,如掃描和啟動(dòng)無(wú)線網(wǎng)卡等。
wpa_supplicant是作為一個(gè)服務(wù)程序運(yùn)行的。在啟動(dòng)wpa_supplicant時(shí),需要一個(gè)wpa_supplicant.conf配置文件,該文件指明了要連接的AP的ESSID和連接密鑰等信息。采用如下命令可以根據(jù)明文密碼創(chuàng)建暗文密碼:
wpa_passphrase FAST_555B30 417417417
以上命令的含義是要連接的ESSID為FAST_555B30,這個(gè)是通過(guò)掃描得到的。417417417是要連接的明文密碼。生成的psk顯示如下:
psk=b461ee0209a9b5a6f114317e9ae72f52829b5f743e47a600b7a08911cc3bd30f
對(duì)于不同的加密方式,wpa_supplicant.conf的內(nèi)容也不一樣。FAST_555B30使用的是WPA2加密方式,wpa_supplicant.conf文件如下:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid=”FAST_555B30”
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
psk=1512bf80a15b8b595522e18cf3a51db47d5084da9565ad38ffec9ab1da37a108
}
其中,ctrl_interface指明了控制接口路徑,wpa_cli等程序可能使用該路徑來(lái)與wpa_supplicant通信。ssid和psk指明了要連接的AP及其暗文密碼。key_mgmt指明了密鑰管理方式。如果是WPA2方式加密的,proto=WPA2,pairwise=CCMP。
采用如下命令可以啟動(dòng)wpa_supplicant服務(wù)進(jìn)程:
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
-D選項(xiàng)指明了采用的驅(qū)動(dòng)程序接口,這里是Wext接口。-i選項(xiàng)指明了無(wú)線網(wǎng)絡(luò)接口名稱(chēng)。-c選項(xiàng)指示使用的配置文件。啟動(dòng)了wpa_supplicant命令,就可以連接到WPA2加密的無(wú)線網(wǎng)絡(luò),如果要使用DHCP動(dòng)態(tài)獲取IP地址,可以采用如下命令:
udhcpc -i wlan0
udhcpc是busybox中包含的DHCP客戶(hù)端工具。也可以直接使用ifconfig命令配置靜態(tài)IP地址,例如:ifconfig wlan0 192.168.0.10。
4 結(jié) 語(yǔ)
本文在分析現(xiàn)有的Linux下的無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序框架和常用無(wú)線網(wǎng)絡(luò)配置應(yīng)用程序的基礎(chǔ)之上,通過(guò)實(shí)例介紹了Linux下Wi-Fi連接的方法。實(shí)際測(cè)試表明,該方法可以有效實(shí)現(xiàn)嵌入式Linux下的Wi-Fi網(wǎng)絡(luò)接入,對(duì)于嵌入式Linux下的Wi-Fi應(yīng)用開(kāi)發(fā)有一定的參考意義。
參考文獻(xiàn)
[1]劉芳華,周鳳星. Linux下Wi-Fi驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化儀表, 2011,32(3):1-3
[2] Jouni Malinen . Linux WPA/WPA2/IEEE 802.1X Supplicant [EB/OL].[2013-1-12].http://hostap.epitest.fi/wpa_supplicant/.
[3]裴超. 基于Android平臺(tái)Wi-Fi模塊的設(shè)計(jì)與實(shí)現(xiàn)[D]. 武漢:華中科技大學(xué),2011
(4)搜索和連接無(wú)線網(wǎng)絡(luò)
要搜索無(wú)線網(wǎng)絡(luò),最簡(jiǎn)單的是使用Linux Wireless Tools工具。使用Linux無(wú)線工具配置Wi-Fi網(wǎng)絡(luò)的主要步驟如下:
查看可用的無(wú)線網(wǎng)卡:iwconfig;
啟用無(wú)線網(wǎng)卡:ifconfig wlan0 up;
列舉無(wú)線網(wǎng)絡(luò):iwlist wlan0 scan,可以?huà)呙璧街車(chē)腁P。
使用Linux Wireless Tools工具只能連接WEP加密的網(wǎng)絡(luò),無(wú)法連接WPA/WPA2加密的網(wǎng)絡(luò)。通常使用該工具對(duì)無(wú)線網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單的配置,如掃描和啟動(dòng)無(wú)線網(wǎng)卡等。
wpa_supplicant是作為一個(gè)服務(wù)程序運(yùn)行的。在啟動(dòng)wpa_supplicant時(shí),需要一個(gè)wpa_supplicant.conf配置文件,該文件指明了要連接的AP的ESSID和連接密鑰等信息。采用如下命令可以根據(jù)明文密碼創(chuàng)建暗文密碼:
wpa_passphrase FAST_555B30 417417417
以上命令的含義是要連接的ESSID為FAST_555B30,這個(gè)是通過(guò)掃描得到的。417417417是要連接的明文密碼。生成的psk顯示如下:
psk=b461ee0209a9b5a6f114317e9ae72f52829b5f743e47a600b7a08911cc3bd30f
對(duì)于不同的加密方式,wpa_supplicant.conf的內(nèi)容也不一樣。FAST_555B30使用的是WPA2加密方式,wpa_supplicant.conf文件如下:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid=”FAST_555B30”
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
psk=1512bf80a15b8b595522e18cf3a51db47d5084da9565ad38ffec9ab1da37a108
}
其中,ctrl_interface指明了控制接口路徑,wpa_cli等程序可能使用該路徑來(lái)與wpa_supplicant通信。ssid和psk指明了要連接的AP及其暗文密碼。key_mgmt指明了密鑰管理方式。如果是WPA2方式加密的,proto=WPA2,pairwise=CCMP。
采用如下命令可以啟動(dòng)wpa_supplicant服務(wù)進(jìn)程:
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
-D選項(xiàng)指明了采用的驅(qū)動(dòng)程序接口,這里是Wext接口。-i選項(xiàng)指明了無(wú)線網(wǎng)絡(luò)接口名稱(chēng)。-c選項(xiàng)指示使用的配置文件。啟動(dòng)了wpa_supplicant命令,就可以連接到WPA2加密的無(wú)線網(wǎng)絡(luò),如果要使用DHCP動(dòng)態(tài)獲取IP地址,可以采用如下命令:
udhcpc -i wlan0
udhcpc是busybox中包含的DHCP客戶(hù)端工具。也可以直接使用ifconfig命令配置靜態(tài)IP地址,例如:ifconfig wlan0 192.168.0.10。
4 結(jié) 語(yǔ)
本文在分析現(xiàn)有的Linux下的無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng)程序框架和常用無(wú)線網(wǎng)絡(luò)配置應(yīng)用程序的基礎(chǔ)之上,通過(guò)實(shí)例介紹了Linux下Wi-Fi連接的方法。實(shí)際測(cè)試表明,該方法可以有效實(shí)現(xiàn)嵌入式Linux下的Wi-Fi網(wǎng)絡(luò)接入,對(duì)于嵌入式Linux下的Wi-Fi應(yīng)用開(kāi)發(fā)有一定的參考意義。
參考文獻(xiàn)
[1]劉芳華,周鳳星. Linux下Wi-Fi驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化儀表, 2011,32(3):1-3
[2] Jouni Malinen . Linux WPA/WPA2/IEEE 802.1X Supplicant [EB/OL].[2013-1-12].http://hostap.epitest.fi/wpa_supplicant/.
[3]裴超. 基于Android平臺(tái)Wi-Fi模塊的設(shè)計(jì)與實(shí)現(xiàn)[D]. 武漢:華中科技大學(xué),2011
物聯(lián)網(wǎng)技術(shù)2014年10期