




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 AndroidWi-Fi 工作原理 劉洋 第一局部 Android 概述 在介紹 Wi-Fi 之前,先簡要介紹一下 Android 系統(tǒng),主要分析一下 Android 的 按層實(shí)現(xiàn)的原理。 Android 層次結(jié)構(gòu)是整個(gè) Android 體系中所有應(yīng)用實(shí)現(xiàn)的根底 框架,而 Android 源代碼結(jié)構(gòu)那么與 Wi-Fi 的實(shí)現(xiàn)細(xì)節(jié)有關(guān)。 1.1 根底知識(shí) Android 是一款當(dāng)前最為流行的 操作系統(tǒng),它本身的開放性加上 Google 公司的大力推廣, 使其獲得了大量 生產(chǎn)廠商、 科研院校、 軟件公司以及個(gè)人 開發(fā)者的青睞, 它屬于一個(gè)全開放的平臺(tái), 因此開發(fā)者可以得到整個(gè)系統(tǒng)的源代 碼,并能
2、對(duì)其進(jìn)行修改,修改的結(jié)果可以通過互聯(lián)網(wǎng)上傳到 Android 官方網(wǎng)站, 倘假設(shè)被審核通過,就能參加到 Android 的源代碼中,這絕對(duì)是一件令人興奮的事 情。 1.2 Android 層次結(jié)構(gòu) Android系統(tǒng)是在Linux系統(tǒng)的根底上,經(jīng)過了層層封裝,最終提供應(yīng)開發(fā)者 的是大量的Java APJ在這里被叫做Android API,于是,開發(fā)者就可以像開發(fā)一 般的Java程序那樣開發(fā)Android應(yīng)用程序,這樣的設(shè)計(jì)不僅降低了開發(fā) Android 應(yīng)用程序的難度,還增加了 Android 系統(tǒng)的界面友好度。 和一般的操作系統(tǒng)一樣, Android 也是對(duì)硬件進(jìn)行了多層的封裝,使得應(yīng)用 程
3、序的開發(fā)者和用戶能輕松地操作硬件,完成他們所希望完成的事情。 Android 所針對(duì)的硬件就是 , 這里主要指智能 , 這種智能 與傳統(tǒng)的 相比 功能被弱化,而更偏向于一臺(tái)筆記本電腦,因此它的 CPU內(nèi)存等硬件配置 要比傳統(tǒng)的 高。它需要提供應(yīng)用戶一些電腦所擁有的功能,比方說 Wi-Fi 上 網(wǎng)、鼠標(biāo)或觸屏控制的界面、收發(fā)電子郵件、玩大型游戲等,但同時(shí)又必須擁有 傳統(tǒng) 所支持的 、攝像頭、藍(lán)牙等功,這些挑戰(zhàn)都增加了 Android的設(shè)計(jì) 難度。 Android從下至上可以分為這樣幾個(gè)層次: (1) Linux內(nèi)核及驅(qū)動(dòng)層(C實(shí)現(xiàn)); (2)本地庫(C庫和C+航)和Java運(yùn)行時(shí)環(huán)境層(主要由
4、C C+位現(xiàn)); (3) Java框架層(主要由Java實(shí)現(xiàn)); (4) Java應(yīng)用程序?qū)?Java實(shí)現(xiàn))。 第3層和第4層之間就是上文所說的 Android API,這也是Android提供應(yīng)應(yīng) 用程序開發(fā)人員的接口,我們只要熟悉了這些 API,就可以進(jìn)行Android應(yīng)用程 序的開發(fā)工作了。 Android 中所有的額應(yīng)用程序,包括核心應(yīng)用程序和用戶開發(fā)的應(yīng)用程 序,它們都屬于第4層次,用戶可以得到系統(tǒng)自帶的所有程序的源代碼, 比方初 始界面管理程序、短信程序、日歷、聯(lián)系人管理程序等,并能隨意修改這些程序, 甚至還可以刪除其中的一兩個(gè), 然后重新編譯源代碼, 這樣便生成了自己定制的 An
5、droid 系統(tǒng)。 1.3 Android 源代碼結(jié)構(gòu) 雖然只看API就可以編寫Android的應(yīng)用程序了,但是無論對(duì)Android系統(tǒng)的 研究人員還是應(yīng)用程序的開發(fā)者來說,Android的源代碼都是一筆值得好好研究 的財(cái)富。 Android的源代碼可以從其官方網(wǎng)站上下載到,在此之前,本機(jī)上需要裝Linux 系統(tǒng),然后根據(jù)官網(wǎng)上的步驟逐步執(zhí)行,包括初始化系統(tǒng)環(huán)境、下載源碼、編譯 源碼,就可以在本機(jī)上下載并編譯整個(gè) Android系統(tǒng)的源代碼。講述如何下載并 編譯 Android 源代碼的 官 網(wǎng)地址如下 : :source.android /source/initializing.html 。
6、 縱觀整個(gè)Android源碼的結(jié)構(gòu),在其根目錄下有大約10多個(gè)文件夾,其中可 以大致分為以下三局部: (1)關(guān)鍵局部 這局部的實(shí)現(xiàn)代碼位于根目錄下除了 external和package之外的所有文件夾 中,這些代碼實(shí)現(xiàn)了 Linux內(nèi)核kernel文件夾、核心驅(qū)動(dòng)、Android驅(qū)動(dòng)、Android 系統(tǒng)的建立build文件夾、Dalvik虛擬機(jī)dalvik文件夾、C和C+陣地庫bionic 文件夾、硬件抽象、無線硬件接口 hardware/ril文件夾、Java運(yùn)行環(huán)境的支持 等功能,是整個(gè) Android 系統(tǒng)的啟動(dòng)和運(yùn)行所必須的。 ( 2) 擴(kuò)展局部 這局部的實(shí)現(xiàn)代碼位于 externa
7、l 文件夾中, 這里邊存放著許多其他開源工程, 這些工程都已經(jīng)過修改而融入到 Android 系統(tǒng)中。 ( 3) 應(yīng)用程序包 這局部代碼位于package文件夾中,由應(yīng)用程序apps、提供器providers、 輸入法input methods三局部組成。 Android 自帶的應(yīng)用程序就位于./package/apps中, 這里有 Browser 瀏 覽器, AlarmClock 鬧鐘,Camera 照相機(jī),Contacts 聯(lián)系人,Settings 設(shè)置,Launcher 初始界面等,還有一些,在此不再一一羅列。 第二局部 Wi-Fi 層次結(jié)構(gòu) Android 中 Wi-Fi 驅(qū)動(dòng)程序被編
8、譯成內(nèi)核的模塊, 通過應(yīng)用程序設(shè)置開關(guān)進(jìn)行 加載和卸載, 具體來說就是 Settings - Wireless & networks - Wi-F。 i 同時(shí), 要使 Wi-Fi 正常工作,驅(qū)動(dòng)中還需要實(shí)現(xiàn)燒寫固件程序和配置信息到 Wi-Fi 的芯片中。 2.1 Wi-Fi 程序模塊 在Android的源代碼中,有多處地方涉及到 Wi-Fi,跨越了前文中所說的1、 2.1.1 3、 4 層。下面介紹幾個(gè)與實(shí)現(xiàn) Wi-Fi 功能密切相關(guān)的程序模塊。 2.1.2 開源庫 wpa_supplicant 它是一個(gè)開源的庫,參加到 Android 源碼中,經(jīng)過修改后成為 Android 實(shí)現(xiàn) W
9、i-Fi 功能的根底。它的代碼位于 ./external/wpa_supplicant 文件夾中,主要用 C 和C+1成,實(shí)現(xiàn)了從上層接到命令后,發(fā)送給硬件驅(qū)動(dòng)程序,接著操作硬件完 成需要的操作,這里是通過 socket 來與硬件驅(qū)動(dòng)進(jìn)行通信的。下列圖 2-1 是 wpa_supplicant 的框架圖。 frvnil卻d cdfltiol m呵thm 圖2-1 wpa_supplicant開源工程框架圖 2.1.3 硬件驅(qū)動(dòng)程序 前 文 所 說 的 wpa_supplicant與 之 通 信 的 硬 件 驅(qū) 動(dòng) 的 代 碼 位 于./hardware/libhardware_legacy/w
10、ifi/wifi.c 中。 2.1.4 JNI 局部 首先簡要介紹一下 JNI, JNI是Java Native Interface的縮寫,它實(shí)現(xiàn)了 Java代 碼與其他代碼進(jìn)行交互,使得在 Java虛擬機(jī)中運(yùn)行的Java代碼能夠與用其他語 言編寫的應(yīng)用程序和庫進(jìn)行交互。在 Android中,JNI可以讓Java程序調(diào)用C程 序。 與 Wi-Fi 相 關(guān) 的 JNI 代 碼 位 于./frameworks/base/core/jni/android_net_wifi_Wifi.cpp 中。 2.1.5 Wi-FiAPI 局部 這局部源代碼使用Java完成了對(duì)Wi-Fi API的封裝,使應(yīng)用程序
11、可以使用 Wi-Fi 功 能 , 它 們 位 于 frameworks/base/services/java/com/android/server/ 和 frameworks/base/wifi/java/android/net/wifi/ 中。 2.1.6 Wi-Fi Setting 的用程序局部 這是 Android 中自帶的一個(gè)應(yīng)用程序,在 的 Settings 中,它可以讓用戶 手動(dòng)翻開或關(guān)閉 Wi-Fi 功能。當(dāng)用戶翻開 Wi-Fi 功能后,它會(huì)自動(dòng)搜索周圍的無 線網(wǎng)絡(luò), 并以列表的形式顯示, 供用戶選擇, 默認(rèn)會(huì)連接用戶上一次成功連接的 無線網(wǎng)絡(luò)。 這局部代碼位于 ./packag
12、es/apps/Settings/src/com/android/settings/wifi 中。 2.2 Wi-Fi 層次結(jié)構(gòu)關(guān)系 下列圖 2-2 就是 Android 中 Wi-Fi 的各模塊在整個(gè) Android 層次結(jié)構(gòu)中的位置, 以及它們之間的關(guān)系。 第三局部 Wi-Fi 執(zhí)行過程 Android中Wi-Fi是使用層次結(jié)構(gòu)設(shè)計(jì)的,因此執(zhí)行過程根本上是在接到用戶 命令后,先從上到下,再從下到上,完成用戶與 是Wi-Fi功能的詳細(xì)執(zhí)行過程示意圖。Wi-Fi設(shè)備的交互。下列圖3-1就 圖2-2 Android中 Wi-Fi的層次結(jié)構(gòu)圖 wpa_s 叩 phcam 圖3-1 Wi-Fi執(zhí)行過
13、程示意圖 如上圖3-1所示,Wi-Fi的執(zhí)行過程主要有4個(gè),下文將對(duì)這幾個(gè)過程進(jìn)行詳 細(xì)介紹。 3.1 從 Settings 中啟動(dòng) Wi-Fi 當(dāng)用戶按下 Wi-Fi按鈕后,Android 會(huì)調(diào)用 WifiEnabler的 onPreferenceChange 再由 WifiEnabler 調(diào)用 WifiManager 的 setWifiEnabled接口函數(shù), 通過 AIDL 實(shí)際 調(diào)用的是 WifiService的setWifiEnabled函數(shù),WifiService接著向自身發(fā)送一條 MESSAGE_ENABLE_WI雁息,在處理該消息的代碼中做真正的使能工作:首先 裝載 WIFI內(nèi)
14、核模塊該模塊的位置硬編 W AccessPunilCialij Socket 碼為 /system/lib/modules/wlan.ko, 然后啟動(dòng) wpa_supplicant 配置文件硬編碼為 /data/misc/wifi/wpa_supplicant.conf , 再 通 過 WifiStateTracker 來 啟 動(dòng) WifiMonitor 中的監(jiān)視線程。 當(dāng)使能成功后,會(huì)播送發(fā)送 WIFI_STATE_CHANGED_ACTION Intent通知 外界Wi-Fi已 經(jīng) 成 功 使 能 了 。WifiEnabler創(chuàng) 立 的 時(shí) 候 就 會(huì) 向Android注 冊 接 收 WI
15、FI_STATE_CHANGED_ACT|ON止匕它會(huì)收至ij該Intent,從而開始掃描。 3.2 查找 Access Point AP 掃描的入口函數(shù)是 WfiService的startScan,它其實(shí)也就是往 wpa_supplicant 發(fā)送SCAN命令。當(dāng)wpa_supplicant處理完SCAN命令后,它會(huì)向控制通道發(fā)送 事件通知掃描完成,從而 wifi_wait_for_event 函數(shù)會(huì)接收到該事件,由此 WifiMonitor中的MonitorThread會(huì)被執(zhí)行來出來這個(gè)事件,WfiStateTracker那么接 著播送發(fā) SCAN_RESULTS_AVAILABLE_AC
16、TION Intent, WifiLayer 注冊了接收 SCAN_RESULTS_AVAILABLE_ACTJON Intent ,所以它的相關(guān)處理函數(shù) handleScanResultsAvailabl會(huì)被調(diào)用,在該函數(shù)中,先會(huì)去拿到SCAN的結(jié)果最 終是往wpa_supplicant發(fā)送SCAN_RESUL命令并讀取返回值來實(shí)現(xiàn)的。 對(duì) 每 一 個(gè) 掃 描 返 回 的 AP , WifiLayer 會(huì) 調(diào) 用 WifiSettings 的 onAccessPointSetChangedS數(shù),從而最終把該 AP加到GUI顯示列表中。 3.3 連接 AP 當(dāng)用戶在 AcessPointDia
17、log 中選擇好加密方式和輸入密鑰之后,再點(diǎn)擊連接 按鈕, Android 就會(huì)去連接這個(gè) AP。 WifiLayer 會(huì) 先 檢 測 這 個(gè) AP 是 不 是 之 前 被 配 置 過 , 這 個(gè) 是 通 過 向 wpa_supplicant 發(fā)送 LIST_NETWORK 命令并且比擬返回值來實(shí)現(xiàn)的,如果 wpa_supplicant 沒 有 這 個(gè) AP 的 配 置 信 息 , 那么 會(huì) 向 wpa_supplicant 發(fā) 送 ADD_NETWORK 命令來添加該 AP, ADD_NETWORK 命令會(huì)返回一個(gè) ID , WifiLayer 再 用 這 個(gè) 返 回 的 ID 作 為 參
18、數(shù) 向 wpa_supplicant 發(fā) 送 ENABLE_NETWORK 命令,從而讓 wpa_supplicant去連接該 AP。 3.4 配置 IP 地址 當(dāng) wpa_supplicant 成功連接上 AP 之后,它會(huì)向控制通道發(fā)送事件通知連接 上 AP 了, 從而 wifi_wait_for_event 函數(shù)會(huì)接收到該事件, 由此 WifiMonitor 中的 MonitorThread會(huì)被執(zhí)行來處理這個(gè)事件,WifiMonitor再調(diào)用WfiStateTracker的 notifyStateChange, WifiStateTracker貝U接著會(huì)往自身發(fā)送 EVENT_DHCP_START 息 來 啟 動(dòng) DHCP 去 獲 取 IP 地 址 , 然 后 再 廣 播 發(fā) 送 NETWO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國有毒有害檢測儀行業(yè)發(fā)展研究報(bào)告
- 2025至2030年中國智力拼圖行業(yè)發(fā)展研究報(bào)告
- 2025至2030年中國普型防撬門行業(yè)發(fā)展研究報(bào)告
- 2025至2030年中國無糖沙琪瑪行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國無鹵阻燃填充料市場現(xiàn)狀分析及前景預(yù)測報(bào)告
- 2025至2030年中國新型陰離子表面活性劑SAS市場分析及競爭策略研究報(bào)告
- 未來哲學(xué)家:全球思想與多元辯證
- 中國老年用品市場競爭態(tài)勢及需求前景預(yù)測報(bào)告2025-2030年
- 2024年九月化糞池清理服務(wù)在線預(yù)約系統(tǒng)對(duì)接合同
- 影片如何影響認(rèn)知
- 山東省名校聯(lián)盟2024-2025學(xué)年高一3月校際聯(lián)考英語試題(原卷版+解析版)
- 京劇頭飾美術(shù)課件
- 數(shù)據(jù)庫應(yīng)用技術(shù)-第三次形考作業(yè)(第10章~第11章)-國開-參考資料
- 垃圾分類我宣講(課件)三年級(jí)下冊勞動(dòng)人民版
- 重慶市2025屆高三3月適應(yīng)性月考語文試卷及參考答案
- T-CECS 10390-2024 建筑幕墻用背栓
- 國旗下講話第三周校長講話稿:以習(xí)慣鑄舟楫 以品格揚(yáng)云帆-讓成長在堅(jiān)守中綻放華章
- 三門峽水庫實(shí)習(xí)報(bào)告
- 文化產(chǎn)業(yè)項(xiàng)目風(fēng)險(xiǎn)管理及應(yīng)對(duì)措施
- 民用無人機(jī)操控員執(zhí)照(CAAC)考試復(fù)習(xí)重點(diǎn)題庫500題(含答案)
- 價(jià)值共創(chuàng)理論形成路徑探析與未來研究展望
評(píng)論
0/150
提交評(píng)論