Android 4.2调试RT3070 WiFi模块


历时4天,终于有所收获,今天来总结一下。

周一

1.PC Ubuntu上测试该WiFi模块
  得出两个结果,Ubuntu 12.10是支持这个WiFi模块的驱动是rt2x00usb和rt2x00lib等等,产品id:148f:3070。同样也带来了一些困惑怎么会那么多模块呢?Rtl8192cu的就一个模块,这到Android上怎么办呢?了解到标准linux的驱动和各个厂商的驱动是不同步的,前者要之后后者一些,于是我继续做了以下的事。
  
拆WiFi模块了解具体型号
对于型号有点模糊,了解具体型号最好的方法就是拆机,直接看芯片上的型号,这样一点也不会模糊了,于是动手拆了该WiFi模块,看到芯片的型号如下:

Ralink RT3070L TPKY371F9 1234PT

确定其真正型号为RT3070
2.找官方最新驱动
找到这里是!号外:这个型号叫Ralink(雷凌)现在已经并入了MTK(联发科)。
RT3070驱动下载地址:http://www.mediatek.com/_en/07_downloads/01_windows.php?sn=501
3.编译驱动模块
编译过程很曲折,还好保留了过程,用GIT记录了,并记录了每次改动。这里看一下git log:

commit 2f3f683eec43ce123017b5302002e14e01367a2b Author: ybk <kangear@163.com> Date: Thu Dec 26 10:59:28 2013 +0800 change fw path   commit 742c1b56346de3f1ea79b59aae688c5d8cf30561 Author: kangear <baokang211@163.com> Date: Wed Dec 25 16:29:52 2013 +0800 更新的ifname 和if2name的位置和名字   commit 1334bbcffc59321fee262d5ca3970a5208a85da6 Author: ybk <kangear@163.com> Date: Wed Dec 25 13:08:03 2013 +0800 add module_param ifname if2name   commit 35bed3ef00ed8ff38238d18a3895f05fc490d7be Author: ybk <kangear@163.com> Date: Tue Dec 24 14:39:11 2013 +0800 Fix: Supplicant not running, cannot connect   commit ed54e07e671c903e0cf73691d185ad43240c0a33 Author: ybk <kangear@163.com> Date: Tue Dec 24 14:23:55 2013 +0800 v1.0 succeed cmd   commit 7c0d98a75ab0df239c0defc4f09a27b13d9fd801 Author: ybk <kangear@163.com> Date: Tue Dec 24 14:18:49 2013 +0800

相关文件下载

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2014年资料/3月/4日/Android 4.2调试RT3070 WiFi模块

下载方法见

今天的主要参考文档:
1.《 WIFI模块RT3070的ARM Linux移植 》
2.《Android WIFI Ralink RT3070开发记录 》

周二

情况并不容乐观,险些要放弃,因为回头想想我还没有为Android编译过WiFi驱动模块,我潜意识里觉得我编译的驱动模块一定是缺少什么东西的。至少现在驱动模块可以编译过,插入内核模块正常,但是我通过busybox ifconfig并没有看到wlan或者其它。
1.找到网络接口
调试Android驱动最重要的是确定问题在哪一层,一层一场的来搞定。层层是耦合性很松的,可以单独调试某层。现在是网络接口并没有看到,问题是在哪呢?看这个文章《wifi模块rt3070的arm+linux移植 》看到ifconfig后还可以跟-a参数,于是赶紧查查这个是什么意思,是显示所有的网络接口,使用了一下,果真出现了ra0。着实兴奋,然后就是改接口名字为wlan0,这个属于驱动编译决定的。
2.手动启动并扫描AP.
(1).#busybox ifocnfig -a # 查看所有网络接口
(2). # busybox ifconfig wlan0 up # 使用该网卡
(3). # iwlist wlan0 scan # 搜索AP 并记下ESSID这里以ChinaNet为例。
(4). # iwconfig wlan0 essid ChinaNet #连接无密码的ESSID,为了测试专门设置一个无密码的。
(5). # dhcp wlan0 # 获取ip地址
(6). # busybox ifconfig #再看网卡状态,可以看到已经成功获取ip地址了。
(7). # ping 115.29.210.26 #先ping百度ip.(最好ping百度,Google不建议)
(8). # ping www.baidu.com #ping百度域名 成功。



周三

这天先做了很多杂事,把固件路径规划一下,这个还是和驱动编译有关,改了重新编译驱动就可以了。重点是手动启动wpa_supplicant。wpa_supplicant具体错误是:
Supplicant not running, cannot connect.

1.手动启动wpa_supplicant
  当驱动模块没有问题的时候,我就强行上它上路了,但是从Settings中打开的时候,模块抛入成功-》wpa_supplicant启动失败,所以要找找启动不起来的原因了。
  遇到了两个疑惑,看到的例子是使用的wext协议启动的,而目前Android BSP上带的几个都是用nl80211启动的。通过尝试RT3070适合的是wext协议。wpa_supplicant正常启动后,启动端会有响应,可以从/proc/kmsg中看出。最终定下来的启动参数为:

service rt_supplicant /system/bin/wpa_supplicant \
    -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
    #-Dnl80211 -iwlan0 -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin
    #  we will start as root and wpa_supplicant will switch to user wifi
    #  after setting up the capabilities required for WEXT
    #  user wifi
    #  group wifi inet keystore
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
  Oneshot

 添加到init.rk30board.rc中,然后以在hardware/libhardware_legacy/wifi/wifi.c中判断如果是RT3070就启动rt_supplicant。以区别用其它协议启动的wpa_supplicant。
意外上路
这次再次将wifi模块上路,从Settings中直接打开看流程,很意外,上路正常,顺利搜索到AP上。连接网络测试,一切OK。

  • 1
  • 2
  • 下一页

相关内容

    暂无相关文章