當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 《物聯(lián)網(wǎng)技術(shù)》雜志
[導(dǎo)讀]摘 要:討論了在嵌入式Linux下實(shí)現(xiàn)Wi-Fi接入的方法。在分析嵌入式Linux下無線網(wǎng)絡(luò)驅(qū)動程序架構(gòu)和無線網(wǎng)絡(luò)的配 置工具 Linux Wireless Tools和wpa_supplicant的基礎(chǔ)上,結(jié)合Tiny210開發(fā)板平臺,通過實(shí)例介紹了在嵌入式Linux平臺 上連接基于WPA/WPA2加密技術(shù)的Wi-F i連接點(diǎn)的原理和方法。

引言

Wi-Fi 也稱為 WLAN (wireless local-area network,無線 局域網(wǎng)),是有線LAN的補(bǔ)充。Wi-Fi實(shí)際上是一個(gè)無線網(wǎng)絡(luò) 通信技術(shù)的品牌,由Wi-Fi聯(lián)盟持有,目的是改進(jìn)基于IEEE 802.11標(biāo)準(zhǔn)的無線網(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的速率。作為一種比較成熟的無線通信技術(shù),Wi-Fi在嵌入 式設(shè)備中得到了廣泛的應(yīng)用,尤其是在嵌入式Linux環(huán)境中。 本文探討了在嵌入式Linux環(huán)境下Wi-Fi技術(shù)的應(yīng)用,首先 介紹了 Wi-Fi設(shè)備驅(qū)動程序的相關(guān)內(nèi)容,然后介紹了一些嵌 入式Linux下無線網(wǎng)絡(luò)配置工具及其特點(diǎn),最后分析了嵌入式 Linux環(huán)境下通過Wi-Fi接入網(wǎng)絡(luò)的方法。

1 Linux下Wi-Fi設(shè)備驅(qū)動程序

目前,Linux無線網(wǎng)絡(luò)驅(qū)動程序的架構(gòu)如圖1所示:

嵌入式Linux下Wi-Fi接入技術(shù)研究

由圖1可知,Linux無線驅(qū)動程序主要包括以下4個(gè)部分: 用戶空間、cfg80211無線網(wǎng)絡(luò)配置API、mac80211驅(qū)動程序 和非mac80211驅(qū)動程序,這幾個(gè)部分組成了一種層次結(jié)構(gòu), 共同完成無線網(wǎng)絡(luò)的接入和配置。

最底層是設(shè)備驅(qū)動程序?qū)?,包括mac80211和非mac80211兩種驅(qū)動程序。mac80211是一種標(biāo)準(zhǔn)的驅(qū)動程 序框架,推薦未來的無線設(shè)備驅(qū)動程序采用此框架來編寫。 mac80211驅(qū)動程序?yàn)樯蠈犹峁┝藘煞N不同的接口 :Wext接口 (Wireless Extensions接口,Linux內(nèi)核中為無線網(wǎng)絡(luò)提供支 持的接口,是一種比較老的接口)和cfg80211 ops接口。其中 Wext接口為基于Wext接口的應(yīng)用程序提供支持,而cfg80211 ops接口為上層cfg80211提供支持。而非mac80211驅(qū)動程序 是比較老的驅(qū)動程序,僅對Wext接口提供支持。

cfg80211下層使用mac80211驅(qū)動程序的接口,為上層 的應(yīng)用程序提供標(biāo)準(zhǔn)的無線設(shè)備配置接口。nl80211是采用 cfg80211接口的應(yīng)用程序庫,有多種基于該應(yīng)用程序庫的無線 網(wǎng)絡(luò)配置程序,例如 iw、crda、hostapd 和 wpa_supplicant (當(dāng) 使用-Dnl80211選項(xiàng)時(shí))。

個(gè) WNIC (Wireless Network Interface Controller,無 線網(wǎng)絡(luò)接口控制器)可以工作在以下幾種模式下:

基站模式(STA)。任何無線設(shè)備驅(qū)動程序都可以在該模 式下工作,這種模式可以認(rèn)為是默認(rèn)模式。在該模式下工作 的網(wǎng)卡需要連接到一個(gè)在AP模式下工作的網(wǎng)卡。這種模式在 Wireless Extensions 配置工具下被成為 managed。

接入點(diǎn)模式(AP)。在接入點(diǎn)模式下工作的網(wǎng)卡又被稱為 主設(shè)備。它通過管理和維護(hù)接入它的STA的列表來管理整個(gè) 無線網(wǎng)絡(luò)。一個(gè)無線網(wǎng)絡(luò)以AP的BSSID (Basic Service Set ID)命名。

監(jiān)聽模式(MON)。這是一個(gè)被動模式,工作在該模式下 的無線網(wǎng)卡只接收數(shù)據(jù)包,不會發(fā)送數(shù)據(jù)包。使用mac80211, 一個(gè)無線網(wǎng)卡在正常工作時(shí)也可以以監(jiān)聽模式工作,并且可以 發(fā)送數(shù)據(jù)包。

點(diǎn)對點(diǎn)模式(Ad-Hoc)。也被成為IBSS (Independent Basic Service Set)模式,用來在沒有AP的情況下創(chuàng)建無線網(wǎng)

絡(luò)。在該模式下,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)獨(dú)立維護(hù)網(wǎng)絡(luò)。

無線分布式系統(tǒng)模式(WDS)。該模式用來實(shí)現(xiàn)多個(gè)AP 之間的連接。

Mesh模式。該模式允許多個(gè)設(shè)備之間通過建立動態(tài)路由 來通信。

以上模式中,最為常用的是前兩種模式。我們通常使用 的無線路由器其實(shí)就工作在AP模式下,我們可以通過使用手 機(jī)或者筆記本電腦連接到路由器,手機(jī)和筆記本電腦的無線 路由器就工作在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 (PreShared Key)和企業(yè)用的WPA-Enterprise版本。WPA實(shí)現(xiàn) 了 IEEE 02.811i標(biāo)準(zhǔn)的大部分。WPA超越WEP的主要改進(jìn) 就是在使用中可以動態(tài)改變密鑰的“臨時(shí)密鑰完整性協(xié)定” (Temporal Key Integrity Protocol,TKIP),加上更長的初向量, 這可以擊敗知名的針對WEP的密鑰擷取攻擊。WPA2與 WPA的差別在于,它使用更安全的加密技術(shù)AES (Advanced Encryption Standard),因此比WPA更難被破解、更安全。

2 Wi-Fi配置工具

Linux下比較常用的無線網(wǎng)絡(luò)配置工具主要有Linux Wireless Tools 和 wpa_supplicant。Linux Wireless Tools 是一 種比較老的無線網(wǎng)絡(luò)配置工具。wpa_supplicant主要用來支持 WPA和 WPA2,而Linux Wireless Tools不提供支持。與運(yùn) 行于內(nèi)核空間的驅(qū)動程序不同,這兩個(gè)工具都是運(yùn)行在用戶空 間的軟件。

Linux 無線工具(Linux Wireless Tools)

無線擴(kuò)展(Wireless Extension)定義了一組驅(qū)動程序提 供給應(yīng)用程序的通用的API,使用基于該API的工具集可以 實(shí)現(xiàn)對任意無線網(wǎng)卡的配置,并且可以在不重啟驅(qū)動程序的 情況下修改配置參數(shù)。無線工具集主要包括iwconfig、iwlist、 iwspy、iwpriv和ifrename。iwconfig可以修改最基本的網(wǎng)絡(luò) 參數(shù)。iwlist可以掃描并列舉頻率、位速率和加密方式。iwspy 可以獲取一個(gè)節(jié)點(diǎn)的連接質(zhì)量。iwpriv可以針對特定的無線網(wǎng) 卡驅(qū)動程序進(jìn)行操作。ifrename可以基于各種動態(tài)標(biāo)準(zhǔn)對接 口命名。

wpa_supplicant

wpa_supplicant在使用時(shí)作為一個(gè)后臺進(jìn)程運(yùn)行,用來 控制無線連接,可以認(rèn)為是一個(gè)服務(wù)進(jìn)程。wpa_supplicant 的設(shè)計(jì)目標(biāo)是對所有的WPA功能使用與硬件、驅(qū)動程序 和操作系統(tǒng)無關(guān)的C代碼。其他的程序作為客戶端進(jìn)程與 wpa_supplicant 通 信,向 wpa_supplicant 發(fā)送 命令。wpa_ supplicant源代碼中提供了 wpa_cli( 一個(gè)文本界面的命令程序) 和wpa_gui (一個(gè)圖形界面的程序)作為客戶端程序與wpa_ supplicant通信。當(dāng)wpa_supplicant作為后臺進(jìn)程運(yùn)行時(shí),就 可以使用這兩個(gè)工具來控制無線連接。

3嵌入式Linux下Wi-Fi連接的實(shí)現(xiàn)

嵌入式Linux下實(shí)現(xiàn)Wi-Fi連接,主要包括以下幾個(gè)步驟:

移植相應(yīng)無線網(wǎng)卡的驅(qū)動程序;

移植 Linux Wireless Tools 和 wpa_supplicant工具;

使用 Linux Wireless Tools 和 wpa_supplicant工具配 置Wi-Fi連接。

本文使用的開發(fā)平臺是有善之臂的Tiny210,使用的無線 網(wǎng)絡(luò)芯片是具有SDIO接口的Marvell8686,采用busybox構(gòu) 建了基本的根文件系統(tǒng)。

加載無線網(wǎng)卡設(shè)備驅(qū)動程序

友善之臂提供了已經(jīng)編譯好的Marvell8686驅(qū)動程 序模塊,在其提供的跟文件系統(tǒng)的/lib/modules/3.0.8- FriendlyARM/目錄下有已經(jīng)編譯好的Linux驅(qū)動程序模塊, 將該目錄拷貝到自己構(gòu)建的跟文件系統(tǒng)目錄下。在此之前,確 保開發(fā)板燒寫的Linux內(nèi)核版本為3.0.8,以保證驅(qū)動程序模 塊版本與內(nèi)核版本一致。在/etc/init.d/rcS啟動腳本中添加如 下命令:

modprobe libertas_sdio 2>/dev/null

以上命令的作用是在系統(tǒng)啟動時(shí),加載l ibertas_sdio模塊。 使用該命令在加載內(nèi)核模塊時(shí)不需要指明模塊的路徑,它會自 動從/lib/modules目錄下尋找合適的驅(qū)動加載。

對于其他的無線網(wǎng)卡驅(qū)動程序,加載的方法是類似的, 也可以先編譯出內(nèi)核模塊,用insmod命令加載。

移植 Linux Wireless Tools工具

下載Linux Wireless Tools并解壓,修改Makefile文件,將 gcc、ar、ranlib 分 別U 修改為 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目錄下。

移植 wpa_supplicant

wpa_supplicant 需使用 OpenSSL 庫。OpenSSL 是—個(gè) 強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的 密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程 序供測試或其它目的使用。

首先下載 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庫。

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/sslo 執(zhí)行make, make install命令,可以在/usr/local/ssl目錄下生 成openssl庫文件,這些庫文件是靜態(tài)庫文件。

編譯wpa_supplicant方法如下:將源碼目錄下的 defconfig文件重命名為.config文件。修改.config文件: CC= arm-linux-gnu-gcc -L/usr/local/ssl/lib/ (連接靜態(tài)庫); CFLAGS += -I/usr/local/ssl/include/ ; LIBS += -L/usr/local/ ssl/lib/。執(zhí)行make命令編譯,即可在源碼目錄下生成可以在 開發(fā)板上運(yùn)行的wpa_supplicant程序,包括 wpa_cli、wpa_ passphrase> bin/wpa_supplicant等,將這些程序拷貝到開發(fā) 板的/bin目錄下。

(4)搜索和連接無線網(wǎng)絡(luò)

要搜索無線網(wǎng)絡(luò),最簡單的是使用Linux Wireless Tools 工具。使用Linux無線工具配置Wi-Fi網(wǎng)絡(luò)的主要步驟如下:

查看可用的無線網(wǎng)卡:iwconfig ;

啟用無線網(wǎng)卡:ifconfig wlan0 up ;

列舉無線網(wǎng)絡(luò):iwlist wlan0 scan,可以掃描到周圍的 AP。

使用Linux Wireless Tools工具只能連接WEP加密的網(wǎng) 絡(luò),無法連接WPA/WPA2加密的網(wǎng)絡(luò)。通常使用該工具對無 線網(wǎng)絡(luò)進(jìn)行簡單的配置,如掃描和啟動無線網(wǎng)卡等。

wpa_supplicant是作為一個(gè)服務(wù)程序運(yùn)行的。在啟動 wpa_supplicant 時(shí),需要一個(gè) wpa_supplicant.conf 配置文件, 該文件指明了要連接的AP的ESSID和連接密鑰等信息。釆 用如下命令可以根據(jù)明文密碼創(chuàng)建暗文密碼:

wpa_passphrase FAST_555B30 417417417

以上命令的含義是要連接的ESSID為FAST_555B30,這 個(gè)是通過掃描得到的。417417417是要連接的明文密碼。生成 的psk顯示如下:

Psk=b461ee0209a9b5a6f114317e9ae72f52829b5f743e47a60 0b7a08911cc3bd30f

對于不同的加密方式,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=W PA- PSK

proto=WPA2 pairwise=CCMP

Psk=1512bf80a15b8b595522e18cf3a51db47d5084da9565ad3

8ffec9ab1da37a108

}

其中,ctrl_interface指明了控制接口路徑,wpa_cli等 程序可能使用該路徑來與wpa_supplicant通信。ssid和 psk指明了要連接的AP及其暗文密碼。key_mgmt指明了 密鑰管理方式。如果是WPA2方式加密的,proto=WPA2, pairwise=CCMPo

釆用如下命令可以啟動wpa_supplicant服務(wù)進(jìn)程:

wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant. conf &

-D選項(xiàng)指明了釆用的驅(qū)動程序接口,這里是Wext接口。-i 選項(xiàng)指明了無線網(wǎng)絡(luò)接口名稱。-c選項(xiàng)指示使用的配置文件。 啟動了 wpa_supplicant命令,就可以連接到WPA2加密的無 線網(wǎng)絡(luò),如果要使用DHCP動態(tài)獲取IP地址,可以釆用如下 命令:

udhcpc -i wlan0

udhcpc是busybox中包含的DHCP客戶端 工具。也可 以直接使用ifconfig命令配置靜態(tài)IP地址,例如:ifconfig wlan0 192.168.0.10。

4結(jié)語

本文在分析現(xiàn)有的Linux下的無線網(wǎng)絡(luò)驅(qū)動程序框架 和常用無線網(wǎng)絡(luò)配置應(yīng)用程序的基礎(chǔ)之上,通過實(shí)例介紹了 Linux下Wi-Fi連接的方法。實(shí)際測試表明,該方法可以有效 實(shí)現(xiàn)嵌入式Linux下的Wi-Fi網(wǎng)絡(luò)接入,對于嵌入式Linux下 的Wi-Fi應(yīng)用開發(fā)有一定的參考意義。

20211223_61c34d57732c5__嵌入式LinuxKWi

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉