Android WiFi系统引入了wpa_supplicant,它的整个WiFi系统以wpa_supplicant为核心来定义上层用户接口和下层驱动接口。整个WiFi系统架构如下图所示:
由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及更新WIFI的状态。处理其它模块通过IWifiManager接口发送过来的远端WiFi操作。
负责从wpa_supplicant接收事件通知。
厂商提供的source,主要进行load firware和kernel的wireless进行通信,控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口或USB接口通信
packages/apps/Settings/src/com/android/settings/wifi
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
frameworks/base/core/jni/android_net_wifi_Wifi.cpp
hardware/libhardware_legacy/wifi/wifi.c
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
net/wireless drivers/wlan_xxx arch/arm/mach-xxx/wlan_pm.c
WifiService和wpa_supplicant启动流程如下图所示:
•加载wifi驱动的状态变化流程如下:
mInitialState(初始状态)
|
mDriverUnloadedState
|
mWaitForP2pDisableState
|
mDriverLoadingState (其中enter中调用WfiNative.loadDriver)
• 启动wpa_supplicant的状态变化如下:
在DriverLoadedState状态的processMessage中调用WifiNative.startSupplicant
• 启动wpa_supplicant的状态变化如下:
在DriverLoadedState状态的processMessage中调用WifiNative.startSupplicant