接上节,写下porting流程,这次导入是的atheros6302。
一、配置Android支持WIFI
在BoardConfig.mk中:
WPA_SUPPLICANT_VERSION := VER_0_6_ATHEROS
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
BOARD_WLAN_ATHEROS_SDK := system/wlan/atheros/AR6kSDK
BOARD_WLAN_CHIP_AR6003 := true
BOARD_WLAN_PM_SUSPEND := 1
二、配置wpa_supplicant.conf
wpa_supplicant是通过wpa_supplicant.conf中的ctrl_interface=来指定控制socket的,应该在AndroidBoard.mk中配置好复制到$(TARGET_OUT_ETC)/wifi,也就是/system/etc/wifi/wpa_supplicant.conf这个文件复制过来的。
一般的wpa_supplicant.conf配置为:
ctrl_interface=DIR=/data/misc/wifi/wpa_supplicant GROUP=wifi
update_config=1
fast_reauth=1
ap_scan=1
三、配置wifi.c
#define WIFI_DRIVER_MODULE_PATH "/system/wifi/ar6000.ko"
#define WIFI_DRIVER_MODULE_NAME "ar6000"
#define WIFI_FIRMWARE_LOADER ""
#define WIFI_TEST_INTERFACE "wlan0"
static const char IFACE_DIR[] = "/data/misc/wifi/wpa_supplicant";
const char SUPP_CONFIG_FILE[] = "/data/misc/wifi/wpa_supplicant.conf";
四、配置路径和权限
在init.rc里,加入下列代码:
mkdir /system/etc/wifi 0770 wifi wifi
chmod 0770 /system/etc/wifi
chmod 0660 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
# wpa_supplicant socket
mkdir /data/system/wpa_supplicant 0771 wifi wifi
chmod 0771 /data/system/wpa_supplicant
#wpa_supplicant control socket for android wifi.c
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
chmod 0770 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf
mkdir /data/misc/wifi/sockets 0770 wifi wifi
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
chown 0770 /system/etc/dhcpcd/dhcpcd-run-hooks
#注意定义接口wlan0
setprop wifi.interface wlan0
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -dd-Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
user root
group wifi inet
socket wpa_wlan0 dgram 660 wifi wifioneshot
service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B wlan0
disabled
oneshot
五、上层接口的配置
public WifiStateTracker(Context context, Handler target) {
super(context, target, ConnectivityManager.TYPE_WIFI, 0, "WIFI", "");
....
mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");//注意更改为wlan0
....
}
六、kenerl配置
在内核中选择对SDIO通道,根据实际情况在内核初始化时给wifi模块上电,一般按时序拉GPIO。另外config里要有wext_core等与wireless相关选项。这个WIFI驱动支持蓝牙,如果项目没有蓝牙,要么删掉wifi里代码,要么打开内核对SDIO蓝牙的支持。否则,编译wifi驱动会报错。