HAL层移植相对简单,MT6620 采用的是Android的WiFi架构,没有经过修改,按照MTK的指导文档移植即可,这里需要注意的是wifi.c文件和init.connectivity.rc文件.
wifi.c文件的路径
iTop4412_KK4.4/hardware/libhardware_legacy/wifi.c
该文件会与wpa_supplicnat服务进行通信,是Android进行WIFi控制的HAL层的实现,根据logcat 输出信息判断WiFi 工作流程哪里出了问题,笔者修改了wifi.c文件的宏定义:
static charprimary_iface[PROPERTY_VALUE_MAX];
// TODO: use new ANDROID_SOCKETmechanism, once support for multiple
// sockets is in
//dg cancel formt6620
//#defineWIFI_DRIVER_MODULE_NAME1 "rtl8188eu"
//#defineWIFI_DRIVER_MODULE_PATH1 "/system/lib/modules/rtl8188eu.ko"
//#defineWIFI_DRIVER_MODULE_NAME2 "rtl8192cu"
//#defineWIFI_DRIVER_MODULE_PATH2 "/system/lib/modules/rtl8192cu.ko"
//#defineWIFI_DRIVER_MODULE_NAME3 "rt5370sta"
//#defineWIFI_DRIVER_MODULE_PATH3 "/system/lib/modules/rt5370sta.ko"
由于我们在 init.connectivity.rc 里面加载了 WiFi驱动库及运行 wmt_launcher服务,所以不再需要wif.c加载驱动了,直接注释掉相关宏即可.
wifi.c的 int wifi_load_driver() 函数会设置wifi的相关属性:
staticconst char DRIVER_PROP_NAME[] ="wlan.driver.status";
property_set(DRIVER_PROP_NAME,"ok");
设置属性后会触发WiFi上电操作,因为我们在init.connectivity.rc设置了属性触发:
#monitor property and power on/off wlan
onproperty:wlan.driver.status=ok
write /dev/wmtWifi "1"
onproperty:wlan.driver.status=unloaded
write /dev/wmtWifi "0"
wifi.c 会启动wpa_suplicant服务:
intwifi_start_supplicant(int p2p_supported)
该函数会查找wpa_supplicant服务是否已经运行,如没有运行会启动该服务.
init.connectivity.rc 原始文件有MTK提供:
iTop4412_KK4.4/hardware/mediatek/config/combo_mt66xx/init.combo_mt66xx.rc
原始文件名称为init.combo_mt66xx.rc,拷贝到ramdisk的root目录下面名称变更为init.connectivity.rc文件 。
我们在该文件增加了加载驱动模块库操作,运行wmt_lanucher服务操作,另外需要注意文件原有的创建wifi相关目录操作,及修改权限,变更拥有者,这些command非常的重要,比如:
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets0770 wifi wifi
mkdir /data/misc/wpa_supplicant 0770 wifi wifi
mkdir /data/misc/p2p_supplicant 0770 wifi wifi
chown wifi wifi /data/misc/wifi/wpa_supplicant.conf
chown wifi wifi /data/misc/wifi/p2p_supplicant.conf
chmod 0660 /data/misc/wifi/wpa_supplicant.conf
chmod 0660 /data/misc/wifi/p2p_supplicant.conf
wpa_supplicant会在/data/misc/wifi/sockets目录下面创建wlan0文件节点用于与外部程序wpa_cli或者Android层服务进行通信.
这样在Android4.4的Setting里面打开WiFi,就可以扫描到热点,连接互联网了,启动WiFi之前注意关闭有线连接,否则会存在网络访问冲突.
注意: Android系统第一次运行是没有开启WiFi功能的,如果您的开发板上面有WiFi模块,且手动开启了Android Setting界面的 WiFi功能 ,那么请不要把WiFi模块从底板上面拆除,否则Android启动过程中因为找不到WiFi模块 ,会频繁 打印出调试信息,导致Android启动失败 ,如果确实产生了这个问题,请重新烧写Android系统此问题即可解决.
总结:
以上作为 iTOP4412开发平台移植 WiFi功能的过程总结,即将发布的Android4.4的Kernel及Android层代码均包含Porting后的代码,也就是Wifi正常工作的代码,方便大家学习和产品研发.
如果您在实际的项目中需要WiFi功能,请参考官方的原理图设计硬件,尽力使用相同的WiFi资源,比如WiFi使能配置引脚,WiFi中断配置引脚,WiFi 复位引脚,串口配置引脚等等,这样您只需要关注硬件部分,驱动使用我们移植好的即可,否则需要您修改WiFi引脚配置,进行必要的调试工作,增加自己的工作量。
MT6620 Android4.4 Porting Guid and drivers:
http://download.csdn.net/detail/yimiyangguang1314/8656149