眾所周知,Android 是基于Linux內(nèi)核的,所以直接支持Linux的WLAN接口。WLAN的內(nèi)核驅(qū)動是根據(jù)用戶在UI上的設(shè)定動態(tài)加載的,通過ctrl_interface和openssl來實現(xiàn)WLAN的控制和安全性,TCPIP則基于WLAN的標(biāo)準(zhǔn)實現(xiàn)。
WLAN ?在Android上的體系構(gòu)架如下:
Application Framework : base/wifi/java/android/net/wifi
??????????????????????????????? WifiManager/WifiMonitor/WifiConfiguration …
Service Framework: base/services/java/com/android/server/
??????????????????????????????? WifiService / WifiWatchdogService
JNI (Java Native Interface)
??????????????????????????????? jni/android_net_wifi_Wifi.cpp
HAL (Hardware Abstract Layer)
??????????????????????????????? hardware/libhardware/wifi/wifi.c
??????????????????????????????? wpa_supplicant / ctrl_interface
Kernel driver
在Android手機(jī)上打開WIFI的流程如下:
1)Application Framework: WifiManager
??????????????????????????????? setWifiEnabled()
2)Service: WifiService
??????????????????????????????? setWifiEnabled()
??????????????????????????????? handleMessage() : MESSAGE_ENABLE_WIFI
3)JNI: android_net_wifi_Wifi.cpp :
??????????????????????????????? JNINativeMethod:? loadDriver
??????????????????????????????? android_net_wifi_loadDriver()
4)HAL : hardware/libhardware/wifi/wifi.c
??????????????????????????????? wifi_load_driver()
5)Kernel : 加載內(nèi)核驅(qū)動
?
WLAN的搜索流程如下:
1)Application Framework: WifiManager
??????????????????????????????? startScan()
2)Service:
??????????????? WifiService::startScan()
??????????????? WifiNative::scanCommand();
3)JNI: android_net_wifi_Wifi.cpp :
??????????????????????????????? JNINativeMethod:? scanCommand / scanResultsCommand
??????????????????????????????? android_net_wifi_scanCommand / android_net_wifi_scanResultsCommand
4)HAL : hardware/libhardware/wifi/wifi.c
??????????????????????????????? wifi_send_command : SCAN / SCAN_RESULTS
??????????????? ??????? wpa_supplicant/driver_wext.c
??????????????????????????????? wpa_driver_wext_scan() : SIOCSIWSCAN
5)Kernel : WLAN 驅(qū)動處理相關(guān)接口的命令
WAPI是我國WLAN的國家標(biāo)準(zhǔn)----- GB 15629.11,并予以802.11i兼容,在Android上的實現(xiàn)只需增加相應(yīng)的鑒權(quán)即可。
?
?