Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
框架:
Android使用wpa_supplicant(开源软件项目,简称WPAS)服务对无线网络进行控制和管理,框架如下(摘自网络)
Client调用方式指的是通过wpa_cli客户端的方式调用。也就是说wpa_cli和wpa_supplicant是C/S架构的关系,而
Framework层也是C/S的方式通过socket与WPAS通信。
WPAS作为framework和driver的中继,也就是framework -> wpa_supplicant -> driver, driver -> wpa_supplicant -> framework, 不过其实wpa_supplicant与driver中间还有一层叫cfg80211,这里当是Kernel driver框架的一部分吧。
启动:
hardware/libhardware_legacy/wifi/wifi.c
int wifi_start_supplicant(int p2p_supported)
{
//static const char SUPPLICANT_NAME[] = "wpa_supplicant";
strcpy(supplicant_name, SUPPLICANT_NAME);
property_set("ctl.start", supplicant_name);
}
启动wpa_supplicant服务,对应的配置在device/rockchip/common/init.connectivity.rc
########## kernel version >= 3.10.x ##########
service wpa_supplicant /system/bin/wpa_supplicant \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -I/system/etc/wifi/wpa_supplicant_overlay.conf \ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot
-iwlan0:对应的interface -Dnl80211: 使用的驱动 -c/data/misc/wifi/wpa_supplicant.conf: 配置文件,前面文章有提过此文件的由来 -g@android:wpa_wlan0: 控制接口,后面会看到socket的连接对应的名字会用到它 socket wpa_wlan0 dgram 660 wifi wifi: 创建一个socket文件,名字是wpa_wlan0, framwork和WPAD的通信就靠它来建立。注意只有当服务运行起来后会创建。