android wifi工作流程

來源:互聯網
上載者:User

Wifi 網卡狀態 1.    WIFI_STATE_DISABLED: WIFI網卡不可用 2.    WIFI_STATE_DISABLING: WIFI正在關閉 3.    WIFI_STATE_ENABLED:WIFI網卡可用 4.    WIFI_STATE_ENABLING:WIFI網卡正在開啟 5.    WIFI_STATE_UNKNOWN:未知網卡狀態   WIFI 訪問網路需要的許可權 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission>修改網路狀態的許可權 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission>修改WIFI狀態的許可權 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission>訪問網路許可權 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> </uses-permission>訪問WIFI許可權   WIFI 核心模組 n  WifiService 由SystemServer啟動的時候產生的ConnecttivityService建立,負責啟動關閉wpa_supplicant,啟動和關閉WifiMonitor線程,把命令下發給wpa_supplicant以及跟新WIFI的狀態 n  WifiMonitor   負責從wpa_supplicant接收事件通知 n  Wpa_supplicant 1、讀取設定檔 2、初始化配置參數,驅動函數 3、讓驅動scan當前所有的bssid 4、檢查掃描的參數是否和使用者佈建的想否 5、如果相符,通知驅動進行許可權 認證操作 6、連上AP n  Wifi驅動模組 廠商提供的source,主要進行load firmware和kernel的wireless進行通訊 n  Wifi電源管理模組 主要控制硬體的GPIO和上下電,讓CPU和Wifi模組之間通過sdio介面通訊   Wifi工作步驟 n  Wifi模組初期化 n  Wifi啟動 n  尋找熱點(AP) n  配置AP n  配置AP參數 n  Wifi串連 n  IP地址配置   Wifi模組代碼總結 n  Wifi Application代碼 packages/apps/Settings/src/com/android/settings/wifi n  Wifi Framework frameworks/base/wifi/java/android/net/wifi frameworks/base/services/java/com/android/server n  Wifi JNI frameworks/base/core/jni/android_net_wifi_Wifi.cpp n  Wifi Hardware hardware/libhardware_legacy/wifi/wifi.c n  Wifi tool external/wpa_supplicant n  Wifi kernel net/wireless     drivers/wlan_sd8688       arch/arm/mach-pxa/wlan_pm.c   Wifi模組的初始化: 在 SystemServer 啟動的時候,會產生一個ConnectivityService 的執行個體, ConnectivityService 的建構函式會建立WifiService,WifiStateTracker 會建立WifiMonitor 接收來自底層的事件,WifiService 和WifiMonitor 是整個模組的核心。WifiService 負責啟動關閉wpa_supplicant、啟動關閉WifiMonitor 監視線程和把命令下發給wpa_supplicant,而WifiMonitor 則負責從wpa_supplicant 接收事件通知。    Wifi模組的啟動: WirelessSettings 在初始化的時候配置了由WifiEnabler 來處理Wifi 按鈕, 當使用者按下Wifi 按鈕後,Android 會調用WifiEnabler 的onPreferenceChange,再由WifiEnabler調用WifiManager 的setWifiEnabled 介面函數,通過AIDL,實際調用的是WifiService 的setWifiEnabled 函數,WifiService 接著向自身發送一條MESSAGE_ENABLE_WIFI 訊息,在處理該訊息的代碼中做真正的使能工作:首先裝載WIFI 核心模組(該模組的位置寫入程式碼為"/system/lib/modules/wlan.ko" ), 然後啟動wpa_supplicant ( 設定檔寫入程式碼為"/data/misc/wifi/wpa_supplicant.conf"),再通過WifiStateTracker 來啟動WifiMonitor 中的監視線程。     尋找熱點(AP): (Wifi開啟)中講到Wifi模組開啟後會對外發送WIFI_STATE_CHANGED_ACTION。WifiLayer中註冊了Action的Receiver。當WifiLayer收到此Action後開始scan的流程,具體如下  當wpa_supplicant 處理完SCAN 命令後,它會向控制通道發送事件通知掃描完成,從wifi_wait_for_event 函數會接收到該事件,由此WifiMonitor 中的MonitorThread 會被執行來出來這個事件:  配置 AP 參數: 當使用者在 WifiSettings 介面上選擇了一個AP 後,會顯示配置AP 參數的一個對話方塊:    Wifi串連:      IP地址的配置: 
     

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.