众所周知,Android 是基于Linux内核的,所以直接支持LinuxWLAN接口。WLAN的内核驱动是根据用户在UI上的设定动态加载的,通过ctrl_interfaceopenssl来实现WLAN的控制和安全性,TCPIP则基于WLAN的标准实现。

WLAN Android上的体系构架如下:

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手机上打开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 : 加载内核驱动

WLAN的搜索流程如下:

1Application Framework: WifiManager

startScan()

2Service:

WifiService::startScan()

WifiNative::scanCommand();

3JNI: android_net_wifi_Wifi.cpp :

JNINativeMethod: scanCommand / scanResultsCommand

android_net_wifi_scanCommand / android_net_wifi_scanResultsCommand

4HAL : hardware/libhardware/wifi/wifi.c

wifi_send_command : SCAN / SCAN_RESULTS

wpa_supplicant/driver_wext.c

wpa_driver_wext_scan() : SIOCSIWSCAN

5Kernel : WLAN 驱动处理相关接口的命令

WAPI是我国WLAN的国家标准----- GB 15629.11,并予以802.11i兼容,在Android上的实现只需增加相应的鉴权即可。

更多相关文章

  1. 使用Docker编译Android系统内核
  2. AIDL (Android Interface Definition Language) Android 接口定
  3. Parcalable接口使用(android传递结构体数据的方法)
  4. Android中webview加载的网页上的按钮点击失效
  5. android从网站获取json接口数据并放置到spinner
  6. Android内核编译和裁剪
  7. ListView中使用线程实现无限加载
  8. 利用View.inflate加载xml
  9. Android JNI学习笔记——so文件动态加载

随机推荐

  1. VMware虚拟机安装deepin
  2. 初识前端Emmet与Html
  3. 表格课程表/表单登录
  4. VMware虚拟机安装ubuntu20
  5. Ement常用语法、元素四类属性、布局标签
  6. 阿里云镜像站NTP——Windows11操作系统配
  7. Ement常用语法、元素的四类属性、一些常
  8. 常用 Ement 语法、Html 标签属性和布局标
  9. Emmet语法
  10. 2021-12-21作业