USB-WiFi驱动移植(STA)

学习完嵌入式课程,也买了开发板还有一个无名厂商的wifi模块,想把WiFi模块移植到开发板,且支持sta模式与ap模式,于是开始走上填坑之路!

在附带驱动光盘资料得知芯片是relink的(后被MTK收购),但就是不知具体是哪个芯片,给的Linux驱动包如下:


USB-WiFi驱动移植(STA)_第1张图片

由于有多种芯片的驱动包,自己的无知,然后开始无头苍蝇般地尝试移植。按照网上的一些博客、网页,解压、修改相应的makefile、生成相应的驱动模块.ko文件,但在开发板insmod加载.ko文件,插入usb
的WiFi模块,始终打印如下



也怀疑是我内核没配置好,继续网上查资料,勾勾选选,重新编译移植内核,再加载WiFi模块的.ko 文件,插入模块,但还是打印
“usb 1-1.1: new high speed USB device number 3 using s5p-ehci and address 7”之类的提示信息,然后卡住不动了。

期间也怀疑模块硬件问题,重新淘了块有厂商名称的MTK芯片的WiFi模块,结果还是出现同样问题,看来就是我的问题了,哪里还认识不到位,继续网上搜索资料,直到遇到这两篇博客,坑才慢慢填上……

LinuxMint编译内核驱动无线网卡 | 薄荷开源网
http://www.mintos.org/hardware/compile-kernel-wireless.html

MT7601驱动移植 - zqj6893的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/zqj6893/article/details/44258439

才明白,这是USB的WiFi模块芯片驱动没被识别的原因,空有一个USB接口插入的提示信息,insmod的.ko根本就不是插入的wifi模块的驱动!各种折腾……
写这篇博客,谨记我踩过的坑!!!

目的验证:
STA模式:
在输入cat /proc/net/wireless
如果存在wlan0/ra0相关信息说明网卡驱动安装成功:

USB-WiFi驱动移植(STA)_第2张图片

AP模式:
手机或者笔记本电脑连上开发板的WiFi热点

准备:
搭建测试好TFTP与NFS
开发板:TQ210V3,S5PV210的CPU
PC端:Ubuntu 12.04 LTS
内核版本:2.6.35
交叉编译链:arm-embedsky-linux-gnueabi gcc version 4.4.6 (for TQ210 EmbedSky Tech)

STA模式的移植:(MTK的比较坑,两种模式要移植两个驱动)
1.连接好PC端与开发板,打开PC端串口调试工具,开发板上电开机,然后在串口调试工具输入命令lsusb,接着把USB接口的WiFi模块插在开发板上,如图:


USB-WiFi驱动移植(STA)_第3张图片

可看到芯片的信息:ID 148f:5370,根据信息选择RT5X7X的驱动压缩包。我自己重新在网上下了RT5370的驱动包,复制到虚拟机的共享文件夹,然后在虚拟机Ubuntu把驱动包复制解压,cd到源码路径下。
vim 顶层的makefile,修改makefile,根据自己的情况 指定平台、内核、交叉编译器。
S5PV210是三星出品的,所以平台根据处理器选择SMDK。

USB-WiFi驱动移植(STA)_第4张图片

保存退出
make ARCH=arm (Linux系统严格区分大小写,要与内核相同arm大小写)

我也明白了,移植驱动没成功原因:首先选择没正确芯片驱动包,然后就是没指定架构!!!想起老师是说过要指定架构的,我真是把老师的话当做耳边风啊!!!

复制驱动模块到之前搭建好的nfs相关文件夹下

测试: 开发板接上电源,连接网线、串口线,打开串口调试窗口,打开电源 手动加载WiFi驱动:insmod rt5370sta.ko,显示如图

USB-WiFi驱动移植(STA)_第5张图片

如果移植正确的驱动,插入 USB的WiFi模块,显示
USB-WiFi驱动移植(STA)_第6张图片

然后验证一下:cat /proc/net/wireless
USB-WiFi驱动移植(STA)_第7张图片

卸载驱动模块:rmmod rt5370sta.ko
USB-WiFi驱动移植(STA)_第8张图片

至此,STA模式的驱动移植完毕!
错误信息:
/home/drivers # insmod rt5370sta.ko
rt5370sta: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
rt5370sta: Unknown symbol usb_alloc_urb (err 0)
rt5370sta: Unknown symbol usb_free_urb (err 0)
rt5370sta: Unknown symbol usb_alloc_coherent (err 0)
rt5370sta: Unknown symbol usb_register_driver (err 0)
rt5370sta: Unknown symbol usb_put_dev (err 0)
rt5370sta: Unknown symbol usb_get_dev (err 0)
rt5370sta: Unknown symbol usb_submit_urb (err 0)
rt5370sta: Unknown symbol usb_free_coherent (err 0)
rt5370sta: Unknown symbol usb_control_msg (err 0)
rt5370sta: Unknown symbol usb_deregister (err 0)
rt5370sta: Unknown symbol usb_kill_urb (err 0)
insmod: can't insert 'rt5370sta.ko': unknown symbol in module, or unknown parameter

分析发现我下载驱动包源码里面证书认证:于是在网上找到解决方法如下:
在WiFi驱动源目录下找到2011_0225_RT5370_RT5372_Linux_STA_V2.5.0.1_DPO/os/linux/usb_main_dev.c文件,添加一句:
MODULE_LICENSE("GPL");


USB-WiFi驱动移植(STA)_第9张图片

然后再重新编译生成rt5370sta.ko文件……

解决方法的网址:
rt3070sta: module license 'unspecified' taints kernel... SOLVED
http://www.linuxforums.org/forum/wireless-internet/161550-rt3070sta-module-license-unspecified-taints-kernel-solved.html

你可能感兴趣的:(USB-WiFi驱动移植(STA))