已经移植了好几个平台的Wi-Fi驱动,一直以来都没有遇到什么问题,这次有个同事在移植驱动时,不能搜到AP,找我帮忙分析时,我看了一下他的配置文件和wifi.c文件,还是有几个地方需要注意的,对于第一次移植Wi-Fi来说,当遇到问题时,还是不知道怎么解决的。我这里给总结一下,让大家以后少走一点弯路。
1. 模块驱动
这块比较简单,基本上是由WiFi模块的厂商提供源码,编译生成ko文件,但需要内核中提供上下电接口。这里就不说。
2. 配置文件
这里还是要注意的,一般的配置文件需要注意init.rc和wap_supplicant.conf这两个文件。
网上有很多这样的配置文件的例子。我这记录一下需要主要的地方。就是wpa_supplicant.conf文件中有下面这样一行:
ctrl_interface=DIR=/data/system/wpa_supplicant
这个ctrl_interface可以配置成两种方式,一种是android private模式,一种是unix标准模式:
即可以配置如下两种方式:
(1)ctrl_interface= wlan0
(2)ctrl_interface=/data/system/wpa_supplicant
但是要注意的是配置成第一种方式,就不能在init.rc文件中创建 /data/system/wpa_supplicant这个文件目录,要是创建了,就会出现如下log:
""Unable to open connection to supplicant on...."
要是配置为第二种方式,就需要创建 /data/system/wpa_supplicant这个文件目录,并且在wifi.c文件中添加:
static const char IFACE_DIR[] = "/data/system/wpa_supplicant";
3. wifi.c
这个根据自己的模块修改相应的初始化,我这里提一个注意的地方:
int wifi_connect_to_supplicant()
{
.......
......
property_get("wifi.interface", iface, WIFI_TEST_INTERFACE); //这里一定要加上这句话
.........
}
4. init.rc配置文件:
当移植wifi时,需要添加相应的配置,这里给我移植的一款详细的配置在这做个参考:
mkdir /data/misc/wifi 0771 wifi wifi
chown wifi wifi /data/misc/wifi
chmod 0771 /data/misc/wifi
mkdir /data/misc/wifi/sockets 0771 wifi wifi
chown wifi wifi /data/misc/wifi/sockets
chmod 0771 /data/misc/wifi/sockets
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
chmod 0770 /data/misc/dhcp
setprop wifi.interfac wlan0
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot
service dhcpcd /system/bin/dhcpcd -BKL wlan0
disabled
oneshot