安卓系統(tǒng)中的wifi研究
出處:鄭小雄 發(fā)布于:2011-09-01 10:22:38
1 Android系統(tǒng)概述
Android是Google公司開發(fā)的基于Linux平臺開源的手機操作系統(tǒng),該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,具體框架結(jié)構(gòu)由5部分組成,其為Linux2.6內(nèi)核,向上搭配Libraries(函數(shù)庫)及AndroidRuntime(運行環(huán)境),再配合Application Framework(應(yīng)用程序框架),來開發(fā)各種不同的Application(應(yīng)用程序),是為移動終端打造的開放和完整的移動軟件。
Android系統(tǒng)基于Linux 2.6內(nèi)核來提供系統(tǒng)的服務(wù),例如安全機制,內(nèi)存管理,進程管理,網(wǎng)絡(luò)堆棧和驅(qū)動模塊。其包含一組庫,提供了Java語言庫內(nèi)的大部分功能。Android應(yīng)用程序運行于Dalvik虛擬機上,Dalvik虛擬機是基于寄存器的。編譯器將Java源文件轉(zhuǎn)為class文件,內(nèi)置的dx工具又將class文件轉(zhuǎn)化為Dex文件,Dex文件是在Dalvik虛擬機上運行程序的標(biāo)準(zhǔn)格式。在wi—Fi網(wǎng)絡(luò)方面,雖然Android建立在Linux內(nèi)核之上,但是Wi—Fi網(wǎng)絡(luò)的實現(xiàn)與一般Linux操作系統(tǒng)不一樣,下面結(jié)合Andmid2.1的源碼,對Wi.Fi模塊的工作原理進行了分析。
2 WiFi模塊的工作原理
2.1 WiFi模塊的組成
在Android系統(tǒng)中,應(yīng)用程序可以使用Wifimanager提供的API接口管理Wi—Fi的連接及使用情況,比如:
啟動或者禁止Wi—Fi網(wǎng)絡(luò)、請求掃描接入點(AccessPoint,AP)、返回網(wǎng)絡(luò)配置參數(shù)列表等等。當(dāng)WiFi網(wǎng)絡(luò)被啟動或者禁止時,Wifiservice將能過廣播方式發(fā)出WIFI-STATE-CHANGED-ACTION事件通知上層應(yīng)用程序,Wifimrvice主要負(fù)責(zé)對WifiMonitor和wpa-supplicant的進程進行初始化及禁止,并且發(fā)出命令給wpa-supplicant。WifiMonitor是負(fù)責(zé)接收wpa-suppli-cant發(fā)出的各種事件通知。然后WifiStateTracker廣播各種行為。WiFi模塊的組成如圖1所示。

圖1 WiFi模塊的系統(tǒng)組成
在wiFi模塊的系統(tǒng)組成中Wifimanager主要提供一些API接口,Wifimanager處理及工作的內(nèi)容大致如下幾個方面:
(1)返回網(wǎng)絡(luò)配置的參數(shù)列表,參數(shù)列表可以查看及更新,并且個別的配置參數(shù)可以被修改。
?。?)建立連接網(wǎng)絡(luò)及禁止,以及查詢有關(guān)網(wǎng)絡(luò)狀態(tài)的動態(tài)信息。
(3)掃描無線網(wǎng)絡(luò)AP,并且根據(jù)AP的信息進行連接。
?。?)定義各種Intent組件的行為名稱,組件行為是廣播來更新wifi狀態(tài)。
WiFi模塊中的Wifiservice可以通過WifiManager接口處理遠程無線WiFi操作請求,也可以創(chuàng)建一個WifiMonitor來偵聽無線上網(wǎng)相關(guān)的事件。WifiStateTracker可以跟蹤Wi.Fi連接狀態(tài)。有關(guān)的無線網(wǎng)絡(luò)事件的處理及狀態(tài)更新都可以通過WifiStateTracker完成。WifiMonitor偵聽從wpa—supplicant服務(wù)器發(fā)出的事件請求,并且處理事件請求然后發(fā)送到WifiStateTracker,WifiMonitor獨立運行于自己的線程中。WifiNative要求發(fā)送請求守護進程。WifiStateTracker所處理的事件如下:
?。?)WIFI—STATE—CHANGED—ACTION:表示wi—Fi網(wǎng)絡(luò)已經(jīng)被啟動、禁止、正在啟動中。正在禁止中和未知狀態(tài)中。
?。?)SUPPLICANT—STATE—CHANGED—ACTION:表示連接一個AP的狀態(tài)信息已經(jīng)改變了,并且系統(tǒng)提供一個新狀態(tài)信息。
?。?)SUPPLICANT—CONNECTION—CHANGE—ACTION:表示與請求者的連接已經(jīng)建立或者已經(jīng)斷開。
?。?)SCAN—RESULTS—AVAILABLE—ACTION:表示AP掃描已經(jīng)完成,并且返回掃描信息。
(5)RSSI—CHANGED—ACTION:表示W(wǎng)i—Fi的信號強度已經(jīng)改變。
?。?)NETWORK—STATE—CHANGED一ACTION:表示W(wǎng)i—Fi網(wǎng)絡(luò)的連接狀態(tài)已經(jīng)改變。
(7)NETWORK—IDS—CHANGED—ACTION:表示配置網(wǎng)絡(luò)的網(wǎng)絡(luò)ID號已經(jīng)改變。
Android實現(xiàn)Wi—Fi網(wǎng)絡(luò)大致經(jīng)過4個步驟:Wi—Fi模塊的初始化;Wi—Fi模塊的啟動;AP掃描及配置AP參數(shù);Wi—Fi連接及配置IP地址。下面是Android2.1中實現(xiàn)Wi—Fi上網(wǎng)的4個步驟的源碼分析。
2.2 WiFi模塊的初始化
當(dāng)Android系統(tǒng)啟動Wi—Fi模塊時,先對wi—Fi模塊進行初始化,Android系統(tǒng)通過startservice(Intent ser—vice)可以啟動一個Service,通過Context.bindService()可以綁定一個Serivce。在系統(tǒng)啟動Systemserver的時候,。通過ServiceManager調(diào)用addservice()函數(shù)生成一個ConnectivityService實例。在ConnectivityService的構(gòu)造函數(shù)里面創(chuàng)建WifiServiee和WifiStateTracker,而wifiStateTracker卻可以創(chuàng)建WifiMonitor接收來自底層的事件,WifiService和WifiMonitor是整個Wi.Fi模塊的。WifiService負(fù)責(zé)啟動關(guān)閉wpa—supplicant、啟動關(guān)閉Wifi.
Monitor監(jiān)視線程和把命令下發(fā)給wpa—supplicant,而WifiMonitor則負(fù)責(zé)從wpa—supplicant接收事件通知。WiFi模塊初始化過程如圖2所示。

圖2 Wi-Fi模塊初始化流程圖
2.3 WiFi模塊的啟動
AndrcIid系統(tǒng)中WirelessSettings應(yīng)用程序是負(fù)責(zé)啟動Wi—Fi模塊的,會調(diào)用WifiEnabler函數(shù)處理wiFi按鈕。當(dāng)用戶按下WiFi按鈕后,WirelessSettings應(yīng)用程序會調(diào)用WifiEnabler的onPreferenceChange,再由WifiEnabler函數(shù)凋用WifiManager的setWifiEnabLED接121函數(shù)。WifiService接著向自身發(fā)送一條MESSAGE—ENABLE—WIFI消息,在處理該消息的代碼中做真正的使能工作:首先裝載wi.Fi內(nèi)核模塊(該模塊的位置硬編碼為“/system/lib/modules/wlan.ko”),然后啟動wpa—supplicant(配置文件硬編碼為“/data/misc/wifi/wpa—supplicant.conf”),再通過WifiStateTracker啟動WifiMonitor中的監(jiān)視線程。當(dāng)使能成功后,會廣播發(fā)送WIFI—STATE—CHANGED—ACTION消息通知外界wiFi已經(jīng)成功啟動。WifiEnabler創(chuàng)建的時候就會向Android系統(tǒng)注冊接收WIFI—STATE—CHANGED—ACTION,因此當(dāng)接收到該Intent,系統(tǒng)就開始掃描AP。Wi—Fi模塊啟動過程如圖3所示。

圖3 wifi模塊啟動流程圖
2.4 AP掃描及配置AP參數(shù)
當(dāng)Android掃描AP時,Wi—Fi模塊執(zhí)行AP掃描的函數(shù)startScan(),實質(zhì)是給wpa—supplicant發(fā)送SCAN命令。當(dāng)wpa—supplicant接收處理SCAN命令后,wpa—supplicant會向控制通道發(fā)送事件通知掃描結(jié)束。當(dāng)wifi—wait—for—event函數(shù)接收到該事件后,WifiMonitor中的相應(yīng)函數(shù)被調(diào)用處理該事件。
同時WifiStateTraeker接著廣播發(fā)送SCAN_RE_SULTS—AVAILABLE一ACTION,在WifiLayer注冊了接收SCAN—RESULTS—AVAILABLE—ACTION,所以相關(guān)處理函數(shù)handleScanResultsAvailable會被調(diào)用,在該函數(shù)中,先得到AP掃描的結(jié)果(終是往wpa—supplicant發(fā)送SCAN—RESULT命令并讀取返回值來實現(xiàn)的),對每一個掃描返回的AP,WifiLayer會調(diào)用WifiSettings的onAeeessPointSetChanged函數(shù),從而終把該AP加到GUI顯示列表中。AP掃描過程如圖4所示。

圖4 AP掃描流程圖
在Android系統(tǒng)的WifiSettings界面上選擇了一個AP后,會顯示配置AP參數(shù)的一個對話框,用戶要在AcessPointDialog對話框中正確地選擇AP參數(shù)。AP參數(shù)配置過程如圖5所示。

圖5 AP參數(shù)配置流程圖
2.5 WiFi連接及配置IP地址
在Android系統(tǒng)的AcessPointDialog對話框中選擇好加密方式和連接密鑰之后,點擊連接按鈕,然后Android系統(tǒng)就會自動連接AP。
WifiLayer會通過向wap—supplicant發(fā)送LIST—NETWORK命令實現(xiàn)檢測AP是否之前被配置過。如果wpa—supplicant沒有AP的配置信息。就會向wpa—supplicant發(fā)送命令添加該AP.WifiLayer得到返回的net—work再利用networkld參數(shù)向wpa—supplieantv發(fā)送連接該AP命令。并且保存該AP配置信息為以后使用。
Wi—Fi模塊連接過程如圖6所示。

圖6 WiFI模塊連接流程圖
當(dāng)wpa—supplicant成功連接上AP之后,wpa—supplicant會向控制通道發(fā)送事件通知已經(jīng)連接上AP,然后執(zhí)行WifiMonitor中的MonitorThread處理該事件。
Wi—Fi模塊連接到AP后,Android系統(tǒng)就要配置IP地址,此時系統(tǒng)中的WifiMonitor再調(diào)用WifiStateTracker的noti—fyStateChange函數(shù),接著WifiStateTracker會往自身發(fā)送EVENT—NETWORK一STATE—CHANGED)消息啟動DHCP去獲取IP地址,當(dāng)DHCP獲取IP地址后,會發(fā)送EVENT—INTERFACE—CONFIGURATION—SUCCEEDED消息,當(dāng)WifiLayer收到EVENT—INTERFACE—CONFIGURATION—SUCCEEDED消息后,會廣播發(fā)送EVENT—NETWORK—STATE—CHANGED,并且附帶獲取IP地址的完整信息,WifiLayer中注冊此Intent的接受者,并調(diào)用handleNetworkStateChanged函數(shù)處理消息。調(diào)用函數(shù)成功后An—droid OS的IP地址配置結(jié)束,Android系統(tǒng)具有Wi—Fi上網(wǎng)功能。
3 WiFi網(wǎng)絡(luò)的實現(xiàn)
3.1 WiFi驅(qū)動的移植
Android系統(tǒng)可以通過wifi模塊無線上網(wǎng),在S3C6410開發(fā)板中wifi模塊與S3C6410處理器的借口的是SDIO,要讓wifi模塊正常工作,必須保證SDIO的驅(qū)動是配置正常的,因此Wi—Fi模塊的驅(qū)動移植需要配置兩個地方,分別是配置firmware和marvel8686SDIO驅(qū)動。在內(nèi)核配置界面中選擇firmware的相關(guān)配置:GenericDriver Options->Prevent firmware from being built和Generic Driver Options->Userspace firmware loading support(NEW)一>Include in.kemel firmware blobs in kemeI binary,配置時要用到2個marvel8686的firmware文件。內(nèi)核配置時選擇marvel8686SDIo的相關(guān)配置:Network device support->Wireless LAN->Wireless LAN(IEEE 802.11)一>MarvelI Libertas WLAN driver support->Marvell Libertas 8385 and 8686 SDlO 802.1lb/g cards、Networkdevice support.>Wireless I AN.>Wireless LAN(IEEE 802.11)。>Marvell Libertas WLAN driver support->Enable full debugging output in the Libertas module和Network device support一>Wireless LAN一>Wireless LAN(IEEE802.11)一>Marvell 8xxx Libertas WLAN driver support with thin firmware……退出內(nèi)核配置界面后運行命令make來編譯Android的內(nèi)核。
3.2 WiFi模塊的測試
通過USB將內(nèi)核鏡像文件到三星S3C6410開發(fā)板的內(nèi)存中,結(jié)束后復(fù)位板子或者斷電重啟。在內(nèi)核啟動過程中,從超級終端顯示W(wǎng)i.Fi模塊的信息:
mmc0:new SDIO card at address 0001
libertas—sdio mmcO:0001:l:firmware:using built.in firmware sd8686一helper.bin
libertas—sdio mmc0:0001:l:firmware:using built—in firmware sd8686.bin
libertas:00:22:43:73:26:bf,fw 9.70.31024,cap 0x000003a3
libertas:PREP—CMD:command 0x00a3 failed:2
libertas:PREP—CMD:command 0x00a3 failed:2
libertas:ethl:Marveli WLAN 802.1 1 adapter
以上顯示的信息表明內(nèi)核已經(jīng)找到WIFI模塊。
當(dāng)S3C6410開發(fā)板成功運行Android系統(tǒng)后,選擇settings->wireless&network.>WIFI,然后在超級終端中輸入logeat命令可以顯示W(wǎng)i—Fi使用信息,并且開發(fā)板上Wi—Fi模塊的指示燈LEDl會閃爍。
點擊Android系統(tǒng)下的Wifi Settings對話框,Android系統(tǒng)開始搜索AP,搜索AP成功后界面顯示出AP的情況,選擇需要連接的AP進行連接。連接成功后S3C6410開發(fā)板具有了wiFi網(wǎng)絡(luò)功能,Android系統(tǒng)中顯示搜索的AP信息如圖7所示。

圖7 Android搜索的AP結(jié)果
4 結(jié)語
對Android智能手機操作系統(tǒng)來說,WiFi網(wǎng)絡(luò)系統(tǒng)是其中一個主要組成部分,了解Android系統(tǒng)中的wiFi網(wǎng)絡(luò)的工作原理可以對應(yīng)用程序性能上的提供有所幫助。在Android系統(tǒng)移植到其他嵌入式設(shè)備中,Android系統(tǒng)中Wi—Fi的底層驅(qū)動移植是其中一個關(guān)鍵部分,通過對底層Wi—Fi接口以及對WiFi驅(qū)動移植的研究,將更有效地實現(xiàn)Android系統(tǒng)在其他嵌入式設(shè)備上的移植及開發(fā)相應(yīng)WiFi網(wǎng)絡(luò)的應(yīng)用程序。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計、天線匹配與鏈路預(yù)算計算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點與實現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









