展会信息港展会大全

Android 4.2上调试RT3070 WiFi模块
来源:互联网   发布日期:2015-09-28 16:05:16   浏览:1862次  

导读:Android4.2调试RT3070 WiFi模块 历时4天,终于有所收获,今天来总结一下。周一1.PC ubuntu上测试该WiFi模块 得出两个结果,ubunt...

Android4.2调试RT3070 WiFi模块

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

周一

1.PC ubuntu上测试该WiFi模块

得出两个结果,ubuntu12.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=5013.编译驱动模块

编译过程很曲折,还好保留了过程(这里),用GIT记录了,并记录了每次改动。这里看一下git log:

commit 2f3f683eec43ce123017b5302002e14e01367a2b

Author: ybk

Date:Thu Dec 26 10:59:28 2013 +0800

change fw path

commit 742c1b56346de3f1ea79b59aae688c5d8cf30561

Author: kangear

Date:Wed Dec 25 16:29:52 2013 +0800

更新的ifname 和if2name的位置和名字

commit 1334bbcffc59321fee262d5ca3970a5208a85da6

Author: ybk

Date:Wed Dec 25 13:08:03 2013 +0800

add module_param ifname if2name

commit 35bed3ef00ed8ff38238d18a3895f05fc490d7be

Author: ybk

Date:Tue Dec 24 14:39:11 2013 +0800

Fix: Supplicant not running, cannot connect

commit ed54e07e671c903e0cf73691d185ad43240c0a33

Author: ybk

Date:Tue Dec 24 14:23:55 2013 +0800

v1.0 succeed cmd

commit 7c0d98a75ab0df239c0defc4f09a27b13d9fd801

Author: ybk

Date:Tue Dec 24 14:18:49 2013 +0800

0.0 version

今天的主要参考文档:

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。周四

今天就剩下整理代码和文档了,这两项可并不是小事。整理代码包括规范代码,和去除添加的调试信息。记录文档是因为记忆是会消失的,但是记录的文字可不会。所以记录文档还要好好的记录。

类型:RT3070

模块:rt3070sta.ko

参数:ifname=wlan0 if2name=p2p0

协议:wext

固件:/etc/firmware/RT2870STA.dat

最后的优化,关于AP模式还是有一点问题的,可以在接下来的时间解决它。具体的错误是:Unable to open connection to supplicant on "/data/misc/wifi/sockets/p2p0": No such file or directory

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港