Wifi系統框架

一:Android Wifi框架圖
                                           
                                        

二:Android Wifi源碼結構
1 Wifi Settings層
    原生機目錄:packages/apps/Settings/src/com/android/settings/wifi/
    主要的類:
    WifiSettings.java 負責顯示Wifi的設置界面
    WifiEnabler.java 負責Wifi的開關邏輯
    WifiDialog.java 負責Wifi的對話框
    WifiInfo.java 表示Wifi的相關配置信息


2  Wifi Framework層

   原生機目錄:
   frameworks/base/wifi/Java/android/net/wifi/
     

  frameworks/base/core/java/android/net/

     

    frameworks/opt/net/wifi/service/java/com/android/server/wifi

         

    主要的類:

   WifiManager: 它是Wifi模塊向外部應用透漏出來的接口,其它所有應用都可以通過WifiManager來操作Wifi的各項功能,但是WifiManager本身不具備處理請求的能力,而是把所有的請求轉發給WifServiceImpl來處理。        

   WifiService: Java Framework中Wifi功能的總入口,負責Wifi功能的核心業務。它是服務器端的實現,作爲Wifi部分的核心,處理實際的驅動加載、掃描、鏈接、斷開等命令,以及底層上報的事件。對於主動的命令控制,WiFi是一個簡單的封裝,針對來自客戶端的控制命令,調用相應的WifiNative底層實現。

   WifiServiceImpl: 本身也不具備處理請求的能力,而是將請求分類後交給不同的處理者處理,比如WifiStateMachine。

    WifiStateMachine: 它是一個複雜的狀態機,維護了Wifi的啓動、掃描、連接、斷開等多個狀態。它運行自己獨有的線程中,擁有自己的消息隊列。

    WifiStateTracker: 除了負責WiFi的電源管理模式等功能外,其核心是WifiMonitor所實現的事件輪詢機制,以及消息處理函數handleMessage()。

    WifiMonitor: 專門負責接收來自Wpa_supplicant的事件,並將這些信息進行分類再交予StateMachine處理。

    WifiNative: 一個接口類,主要是提供一些native方法用於wifi framework層和WPAS通信。WifiNative的主要實現都在wifi.c函數裏,WifiNative不過是將其封裝,供framework層調用。


   特別注意:WifiService 和 WifiMonitor 是整個模塊的核心。WifiService 負責啓動關閉 wpa_supplicant、啓動關閉 WifiMonitor 監視線程和把命令下發給 wpa_supplicant,而 WifiMonitor 則負責從 wpa_supplicant 接收事件通知。也就是說WifiService負責wifi整個流程的控制,而WifiMonitor負責監視底層的事件。

3 Wifi JNI層

   目錄:frameworks/base/core/jni/android_net_wifi_Wifi.cpp
   android_net_wifi_Wifi.cpp就是典型jni接口,通過它可以直接調用Wifi的硬件抽象層。


4 Wifi Hardware層 (wifi管理庫)

   hardware/libhardware_legacy/wifi/wifi.c
   Wifi Hardware層也叫wpa_supplicant適配層,是通用wpa_supplicant的封裝。wpa_supplicant適配層起着承上啓下的作用,主要用於與wpa_supplicant守護進程的通信,以供給Wifi框架層使用。

5 wpa_supplicant層(wifi tool)
   wpa_supplicant是一個開源項目,已經移植到Linux、Windows以及其它嵌入式系統上。它是WPA(WiFi Protected Access的縮寫,中文含義爲WiFi網絡安全存取)的應用層認證客戶端,負責完成認證相關的登錄、加密等工作。 該層是Wifi FrameWork層的基石,也叫Wifi服務層。
   源代碼目錄:external/wpa_supplicant/
   經過編譯後主要結果是生成動態庫libwpa_client.so和可執行程序wpa_supplicant。
   (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層

   內核根目錄:drivers/net/wireless 


轉自https://blog.csdn.net/weixin_42093428/article/details/80822606

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章