历时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驱动下载地址:?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
相关文件下载
具体下载目录在 /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 #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中看出。最终定下来的启动参数为: