Android WiFi–系統架構

來源:互聯網
上載者:User
文章目錄
  • 1.2 WifiMonitor
  • 1.3 wpa_supplicant
  • 1.4 Wifi驅動模組
  • 1.5 Wifi電源管理模組
  • 1.6 Wifi工作步驟
  • 1.7 Wifi模組代碼
  •  2.1 狀態變化
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);    }

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.