一、 WIFI 的基本架构
1、wifi 用户空间的程序和库 :
external/wpa_supplicant/
生成库 libwpaclient.so 和守护进程 wpa_supplicant
2、hardware/libhardware_legary/wifi/ 是 wifi 管理库
3、JNI 部分:
frameworks/base/core/jni/android_net_wifi_Wifi.cpp
4、JAVA 部分:
frameworks/base/services/java/com/android/server/
frameworks/base/wifi/java/android/net/wifi/
5、WIFI Settings 应用程序位于:
packages/apps/Settings/src/com/android/settings/wifi/
6、WIFI 驱动模块 wlan.ko
wpa_supplicant 通过 wireless_ext 接口和驱动通信
7、WIFI 硬件模块
二、 WIFI 在 Android 中如何工作
Android 使用一个修改版 wpa_supplicant 作为 daemon 来控制 WIFI ,代码位于
external/wpa_supplicant 。 wpa_supplicant 是 通 过 socket 与
hardware/libhardware_legacy/wifi/wifi.c 通 信 。 UI 通 过 android.net.wifi package
(frameworks/base/wifi/java/android/net/wifi/ )发送命令给 wifi.c 。相应的 JNI 实现位于
frameworks/base/core/jni/android_net_wifi_Wifi.cpp 。 更 高 一 级 的 网 络 管 理 位 于
frameworks/base/core/java/android/net。
三、配置 Android 支持 WIFI
在 BoardConfig.mk 中添加:
BOARD_HA VE_WIFI := true
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
这将在 external/wpa_supplicant/Android.mk 设置 WPA_BUILD_SUPPLICANT 为 true,
默认使用驱动 driver_wext.c 。
如果使用定制的 wpa_supplicant 驱动 (例如 wlan0),可以设置 :
BOARD_WPA_SUPPLICANT_DRIVER := wlan0
四、使能 wpa_supplicant 调试信息
默认 wpa_supplicant 设置为 MSG_INFO ,为了输出更多信息,可修改:
1、在 common.c 中设置 wpa_debug_level = MSG_DEBUG;
2、在 common.c 中把 #define wpa_printf 宏中的
if ((level) >= MSG_INFO)
改为
if ((level) >= MSG_DEBUG)
五、配置 wpa_supplicant.conf
wpa_supplicant 是通过 wpa_supplicant.conf 中的 ctrl_interface= 来指定控制 socket 的,
应 该 在 AndroidBoard.mk 中 配 置 好 复 制 到 $(TARGET_OUT_ETC)/wifi ( 也 就 是
/system/etc/wifi/wpa_supplicant.conf )这个位置会在 init.rc 中再次检测的。
一般的 wpa_supplicant.conf 配置为:
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi
update_config=1
评论1
最新资源