日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

安卓系統(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所示。

WiFi模塊的系統(tǒng)組成

圖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所示。

Wi-Fi模塊初始化流程圖

圖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所示。

wifi模塊啟動流程圖

圖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所示。

 AP掃描流程圖

圖4 AP掃描流程圖

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

AP參數(shù)配置流程圖

圖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所示。

WiFI模塊連接流程圖

圖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所示。

 

Android搜索的AP結(jié)果

圖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)用程序。

關(guān)鍵詞:安卓系統(tǒng)中的wifi研究安卓wifi

版權(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)利。

開啟物聯(lián)網(wǎng)的世界—WiFi模塊開發(fā)板工控網(wǎng)關(guān)展示!
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!