陳 新,翁秋華
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350108)
近年來,中國正處在網(wǎng)絡(luò)高速發(fā)展階段,尤其是中國進(jìn)入 3G時代以來推動各項(xiàng)無線業(yè)務(wù)快速發(fā)展,除了3G技術(shù)外,其中最為明顯的是Wi-Fi無線通信技術(shù)高速發(fā)展。Wi-Fi,英文全稱為 wireless fidelity,中文意思為“無線保真”。Wi-Fi技術(shù)是IEEE定義的無線局域網(wǎng)通信工業(yè)標(biāo)準(zhǔn)IEEE 802 11[1]。該標(biāo)準(zhǔn)包括IEEE 802 11a、802 11b和802 11g。相比傳統(tǒng)有線接入技術(shù),Wi-Fi技術(shù)具有更大靈活性;與其他的無線技術(shù)相比,Wi-Fi技術(shù)則具有傳輸速率快,傳輸距離遠(yuǎn),搭建方便等優(yōu)點(diǎn)。由于嵌入式技術(shù)已經(jīng)廣泛應(yīng)用于各種便捷式電子產(chǎn)品的開發(fā),其中以 ARM 架構(gòu)體系最為常見,在相應(yīng)設(shè)備上為訪問互聯(lián)網(wǎng)而增加 Wi-Fi功能成為一個必然的選擇。由于 Linux的開源性,可以應(yīng)用的資源較為豐富,以及對驅(qū)動支持日益完善。文中通過對 Linux下的ARM構(gòu)架體系的Wi-Fi無線通信功能的圖形化設(shè)計(jì)與實(shí)現(xiàn),概括了Linux下完整開發(fā)Wi-Fi功能一般步驟。
對于電子產(chǎn)品設(shè)計(jì)通常分為兩部分:硬件設(shè)計(jì)與軟件設(shè)計(jì)。硬件提供必要的資源構(gòu)成實(shí)體,而軟件則提供系統(tǒng)運(yùn)行和相應(yīng)各種功能實(shí)現(xiàn)。
[2]。整個系統(tǒng)由AR9271無線通信模塊、ARM920T(S3C2440A)處理器、LCD顯示屏(含觸摸)、NAND、FLASH、SDROM、電源管理等部分組成,結(jié)構(gòu)如圖1所示。其中設(shè)計(jì)依據(jù)是:由FLASH啟動系統(tǒng),并向AR9271無線通信模塊供電,由USB接口受ARM的Linux系統(tǒng)識別,由串口輸入請求激活A(yù)R9271,生成相應(yīng)的wlan0套接字接口,利用無線連接工具掃描周圍的無線網(wǎng)絡(luò),選擇其中的一個網(wǎng)絡(luò),請求連接,由系統(tǒng)識別的端口的自動獲取IP,從而接入互聯(lián)網(wǎng)。通信數(shù)據(jù)包通過系統(tǒng)的TCP/IP協(xié)議暫存在SDROM進(jìn)行數(shù)據(jù)交換,最后由LCD顯示。
圖1 系統(tǒng)框
AR9271是一款A(yù)theros公司為家庭網(wǎng)關(guān)、機(jī)頂盒、掌上游戲機(jī)、打印機(jī)以及各種其他嵌入式無線產(chǎn)品提供高性能的 Wi-Fi芯片。此外,它還可集成到筆記本電腦和桌面電腦的無線USB適配器中,能簡便地在現(xiàn)有PC上實(shí)現(xiàn)低價格的性能升級。
AR9271芯片采用全新的架構(gòu),集成了可運(yùn)行更多片上無線LAN功能的CPU與存儲器。這種集成式CPU可減輕主機(jī)設(shè)備的無線處理開銷。該項(xiàng)設(shè)計(jì)可使消費(fèi)類電子設(shè)備上原本不支持無線功能的主機(jī)處理器現(xiàn)在也能提供穩(wěn)健的Wi-Fi功能。AR9271具有創(chuàng)新的主機(jī)設(shè)備任務(wù)分擔(dān)特性,不僅可使WLAN自主運(yùn)行,而且還可實(shí)現(xiàn)與主機(jī)設(shè)備應(yīng)用的無縫配合。向用戶提供了USB接口,故采用USB接口。
該系統(tǒng)采用S3C2440A作為ARM920T的核心模塊,該處理器的主頻能夠輕松地運(yùn)行 Linux、Windows CE等操作系統(tǒng),具有強(qiáng)大的內(nèi)部中斷和TCP/IP的輪詢調(diào)用功能,S3C2440A有130個通用可編程多功能的I/O端口,其中包括USB接口,可以直接與 AR9271通信模塊相連,這對簡化外圍電路擴(kuò)展部分有很大幫助,降低了系統(tǒng)的復(fù)雜度和簡化了軟件設(shè)計(jì),所以選用S3C2440A作為本系統(tǒng)的CPU,其與AR9271的控制接口如圖2。
圖2 AR9271與CPU接口控制
為了實(shí)現(xiàn)Wi-Fi功能,使系統(tǒng)能夠正常識別到AR9271無線通信模塊并能夠正常被調(diào)用,除了必要的硬件連接,還要進(jìn)行軟件設(shè)計(jì),通過Linux操作系統(tǒng)驅(qū)動配置和加載,使 AR9271模塊接上網(wǎng)絡(luò)并和Linux系統(tǒng)的S3C2440A模塊通信,最后設(shè)計(jì)成圖形化連接界面方便前臺獨(dú)立操作。其設(shè)計(jì)流程如圖 3所示。
圖3 軟件處理流程
參考文獻(xiàn)[3-5]。由于設(shè)計(jì)所用的 AR9271是比較新的芯片,一般發(fā)行版的Linux(內(nèi)核版本2.6.35以下)系統(tǒng)沒有自帶驅(qū)動,所以應(yīng)另外編譯ARM版驅(qū)動,動態(tài)加載。下載碼源,進(jìn)入相應(yīng)的目錄,交叉編譯后得到 ath9k_htc.ko文件,拷貝到/lib/modules/driver/下通過NFS掛載文件系統(tǒng),加載命令為:modprobe ath9k_htc.ko。最后還應(yīng)激活網(wǎng)卡,相應(yīng)命令為:ifconfig wlan0 up。
根據(jù)無線網(wǎng)絡(luò)不同的加密類型,需要配置的命令也不同,其中wireless tools支持的驅(qū)動最為全面,但它不能連接 WPA/WPA2加密的網(wǎng)絡(luò),而 wpa_supplicant則可以連接WPA/WPA2加密的網(wǎng)絡(luò),但支持驅(qū)動有限。本設(shè)計(jì)所用 AR9271為 wpa_supplicant所支持驅(qū)動之一。因此,可以連接各種加密網(wǎng)絡(luò)。下載好相應(yīng)的碼源,對其交叉編譯,得到可執(zhí)行文件,分別為iwlist、iwconfig、wpa_cli、wpa_ passphrase、wpa_supplicant,放至/usr/sbin/目錄下。
(1)連接無加密網(wǎng)絡(luò)
對于無加密網(wǎng)絡(luò)的連接,先掃描周圍可以檢測到的無線網(wǎng)絡(luò),在終端輸入:iwlist wlan0 scannig;選擇其中一個特別為測試而搭建的無線網(wǎng)絡(luò)test,再次終端輸入:iwconfig wlan0 essid “test”;確認(rèn)為無加密網(wǎng)絡(luò),終端輸入:iwconfig wlan0 key off(可不輸入本條命令,因?yàn)槟J(rèn)是無加密);通過自動獲取IP方式連網(wǎng),最后終端輸入:udhcpc –iwlan0,則可以看到獲得IP:192.168.1.109,這時可以看到ping –c 4 www.baidu.com有返回值。
(2)連接wep加密網(wǎng)絡(luò)
對于加密類型為wep的無線網(wǎng)絡(luò),操作步驟與連接無加密網(wǎng)絡(luò)一樣,只要把其中的命令:iwconfig wlan0 key off修改為iwconfig wlan0 key xxxx(其中xxxx為10位16進(jìn)制數(shù)或是5位ASCII字符),其余操作不變,最后連上網(wǎng)絡(luò)。
(3)連接wpa/wpa2加密網(wǎng)絡(luò)
由于連接加密類型為wpa/wpa2的網(wǎng)絡(luò),需要先寫好配置文件,才能使用wpa_supplicant進(jìn)行連接。輸入命令:wpa_supplicant –B –iwlan0 –c/etc/wpa_supplicant.conf則表示已經(jīng)連上網(wǎng)絡(luò),通過自動獲取IP方式連網(wǎng),終端輸入:udhcpc –iwlan0,則可以看到獲得 IP:192.168.1.103,這時可以 ping –c 4 www.baidu.com有返回值。
其中配置文件/etc/wpa_supplicant.conf參考如下:
#指定接口路徑
#確保只有root用戶才能讀取配置文件
#配置文件可重寫
#掃描并選擇一個網(wǎng)絡(luò),當(dāng)沒找到時使用默認(rèn)網(wǎng)絡(luò)
鑒于上述整個操作過程都是在終端命令行下操作的,這給使用帶來諸多不便,不適合普通用戶的使用習(xí)慣,可以通過集成開發(fā)工具 Qt creator 編寫Wi-Fi圖形化連接界面[6-8]。根據(jù)實(shí)際需要可在主界面放置一個網(wǎng)絡(luò)列表:網(wǎng)絡(luò)名(SSID)、信號強(qiáng)度(Signal Level)、狀態(tài)(Status),還有掃描按鈕(Scan)、斷開按鈕(Disconnect)、最小化按鈕(Minimize)。當(dāng)掃描到網(wǎng)絡(luò)時,點(diǎn)擊該網(wǎng)絡(luò),則會彈出連接對話框,如果該網(wǎng)絡(luò)是加密網(wǎng)絡(luò)則需要輸入密碼才可連接,對話框中有連接按鈕與取消按鈕。如圖4所示。
圖4 Wi-Fi連接開發(fā)界面
其中間的列表框用于顯示所掃描到的網(wǎng)絡(luò),經(jīng)過簡單處理后只顯示網(wǎng)絡(luò)名稱、信號強(qiáng)度和狀態(tài);掃描按鈕用于掃描周圍存在的無線網(wǎng)絡(luò),可以編寫scan_network()函數(shù)作為掃描按鈕的槽動作;最小化按鈕則讓整個程序退出界面在后臺運(yùn)行,可以編寫minimize()函數(shù)做該按鈕的槽動作;斷開按鈕是讓所連接的網(wǎng)絡(luò)正常斷開,可以編寫disconnect()函數(shù)做該按鈕的槽動作。
當(dāng)完成上述硬件平臺搭建、驅(qū)動編譯和加載、連接應(yīng)用程序設(shè)計(jì),完成了整個 Wi-Fi網(wǎng)絡(luò)的開發(fā),當(dāng)打開應(yīng)用程序用于掃描網(wǎng)絡(luò)并連接其中一個網(wǎng)絡(luò),最小化后,打開網(wǎng)頁瀏覽器輸入 www.google. com.hk即可上網(wǎng)。結(jié)果如圖5所示,測試結(jié)果表明,所設(shè)計(jì)開發(fā)的Wi-Fi網(wǎng)絡(luò)完全可以正常通信,并且實(shí)現(xiàn)了圖形化的友好連接界面,達(dá)到預(yù)期目標(biāo)。
圖5 掃描結(jié)果
本文通過分析Linux下的ARM9體系Wi-Fi網(wǎng)絡(luò)通信原理,結(jié)合當(dāng)前對無線網(wǎng)絡(luò)需求更加突出的情況下,從而設(shè)計(jì)了Wi-Fi網(wǎng)絡(luò)開發(fā)流程,并實(shí)現(xiàn)了網(wǎng)絡(luò)通信,并在此基礎(chǔ)上進(jìn)行了圖形化的設(shè)計(jì),方便操作,可運(yùn)用于網(wǎng)絡(luò)系統(tǒng)開發(fā),對嵌入式的網(wǎng)絡(luò)設(shè)計(jì)具有一定的參考作用。
參考文獻(xiàn)
[1] 索煒.基于S3C2440+LINUX的無線射頻模塊的驅(qū)動程序設(shè)計(jì)[D].北京:北京郵電大學(xué),2008.
[2] 張玉杰,馬立云,張賀艷.基于ARM和FPGA的LED顯示屏控制系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2009,17(12):2429-2431.
[3] 楊峰.C語言完全手冊:基本概念、函數(shù)參考、編程實(shí)例與試題集錦[M].北京:科學(xué)出版社,2008:15-48.
[4] 宋寶華. Linux設(shè)備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2008:277-296.
[5] CORBET J,GREG Kroath-Hartman,RUBINI A.Linux Device Drivers[M].3rd edition, American:O’Reilly Media.Inc,2005:10-65.
[6] BLANCHETTE J,SUMMERFIELD M.C++ GUI Programming with Qt 4[M].USA:Prentice Hall,2008:80-92.
[7] 丁林松,黃麗琴.Qt4圖形設(shè)計(jì)與嵌入式開發(fā)[M].北京:人民郵電出版社,2009:116-124.
[8] 韋東山.嵌入式 Linux應(yīng)用開完全手冊[M].北京:人民郵電出版社,2008:335-360.