1. 程式人生 > >Android WiFi 系統架構

Android WiFi 系統架構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

1. 系統架構

        Android WiFi系統引入了wpa_supplicant,它的整個WiFi系統以wpa_supplicant為核心來定義上層使用者介面和下層驅動介面。整個WiFi系統架構如下圖所示:

   一切盡在上圖中,下面將對每部分進行詳細分析。

1.1 WifiService   

     由SystemServer啟動的時候生成的ConnecttivityService建立,負責啟動關閉wpa_supplicant,啟動和關閉WifiMonitor執行緒,把命令下發給wpa_supplicant以及更新WIFI的狀態。

     處理其它模組通過IWifiManager介面傳送過來的遠端WiFi操作。

1.2 WifiMonitor

    負責從wpa_supplicant接收事件通知。

1.3 wpa_supplicant

  1) 讀取配置檔案
  2) 初始化配置引數,驅動函式
  3) 讓驅動scan當前所有的bssid
  4) 檢查掃描的引數是否和使用者設定的相符
  5) 如果相符,通知驅動進行許可權和認證操作
  6) 連上AP

1.4 Wifi驅動模組

     廠商提供的source,主要進行load firware和kernel的wireless進行通訊

1.5 Wifi電源管理模組

     主要控制硬體的GPIO和上下電,讓CPU和Wifi模組之間通過sdio介面或USB介面通訊

1.6 Wifi工作步驟

  1) Wifi啟動
  2) 開始掃描
  3) 顯示掃描的AP
  4) 配置AP
  5) 連線AP
  6) 獲取IP地址
  7) 上網

1.7 Wifi模組程式碼

   1) Wifi Settings應用程式
       packages/apps/Settings/src/com/android/settings/wifi

   2) Wifi Framework
       frameworks/base/wifi/java/android/net/wifi (UI通過android.net.wifi package
傳送命令給wifi.c)

       frameworks/base/core/java/android/net(更高一級的網路管理)
       frameworks/base/services/java/com/android/server

   3) Wifi JNI
       frameworks/base/core/jni/android_net_wifi_Wifi.cpp
  
4) Wifi Hardware (wifi管理庫)
       hardware/libhardware_legacy/wifi/wifi.c

   5) wpa_supplicant(wifi  tool)

       external/wpa_supplicant8
       (1) wpa_client (生成庫libwpaclient.so)

            external/wpa_supplicant_8/wpa_supplicant/src/common/wpa_ctrl.c

       (2) wpa_server (生成守護程序wpa_supplicant)

            external/wpa_supplicant_8/wpa_supplicant/main.c
 
  6) Wifi kernel
       net/wireless     drivers/wlan_xxx       arch/arm/mach-xxx/wlan_pm.c


2. WifiService和wpa_supplicant啟動流程

     WifiService和wpa_supplicant啟動流程如下圖所示:

 2.1 狀態變化

• 載入wifi驅動的狀態變化流程如下:

初始狀態:mInitialState

                         |
          mDriverUnloadedState

                         |
      mWaitForP2pDisableState

                         |
mDriverLoadingState(其enter中呼叫WifiNative.loadDriver)

 

• 啟動wpa_supplicant的狀態變化如下:
   在DriverLoadedState狀態的processMessage中呼叫WifiNative.startSupplicant

3. 生產時自動開啟Wifi

在生產時, 預設Wifi是關閉的,如果需要預設開啟,可修改wifiservice.java中的如下程式碼: 

 

    /**     * Check if Wi-Fi needs to be enabled and start     * if needed     *     * This function is used only at boot time     */    public void checkAndStartWifi() {        mAirplaneModeOn.set(isAirplaneModeOn());        mPersistWifiState.set(getPersistedWifiState());        /* Start if Wi-Fi should be enabled or the saved state indicates Wi-Fi was on */        boolean wifiEnabled = shouldWifiBeEnabled() || testAndClearWifiSavedState();        Slog.i(TAG, "WifiService starting up with Wi-Fi " +                (wifiEnabled ? "enabled" : "disabled"));        setWifiEnabled(wifiEnabled); //強制設定為true        mWifiWatchdogStateMachine = WifiWatchdogStateMachine.               makeWifiWatchdogStateMachine(mContext);    }


 

 

 

 

 

 


 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述