學(xué)習(xí)完嵌入式課程,也買了開發(fā)板還有一個無名廠商的wifi模塊,想把WiFi模塊移植到開發(fā)板,且支持sta模式與ap模式,于是開始走上填坑之路!
在附帶驅(qū)動光盤資料得知芯片是relink的(后被MTK收購),但就是不知具體是哪個芯片,給的Linux驅(qū)動包如下:
由于有多種芯片的驅(qū)動包,自己的無知,然后開始無頭蒼蠅般地嘗試移植。按照網(wǎng)上的一些博客、網(wǎng)頁,解壓、修改相應(yīng)的makefile、生成相應(yīng)的驅(qū)動模塊.ko文件,但在開發(fā)板insmod加載.ko文件,插入usb
的WiFi模塊,始終打印如下

也懷疑是我內(nèi)核沒配置好,繼續(xù)網(wǎng)上查資料,勾勾選選,重新編譯移植內(nèi)核,再加載WiFi模塊的.ko 文件,插入模塊,但還是打印
“usb 1-1.1: new high speed USB device number 3 using s5p-ehci and address 7”之類的提示信息,然后卡住不動了。
期間也懷疑模塊硬件問題,重新淘了塊有廠商名稱的MTK芯片的WiFi模塊,結(jié)果還是出現(xiàn)同樣問題,看來就是我的問題了,哪里還認(rèn)識不到位,繼續(xù)網(wǎng)上搜索資料,直到遇到這兩篇博客,坑才慢慢填上……
LinuxMint編譯內(nèi)核驅(qū)動無線網(wǎng)卡 | 薄荷開源網(wǎng)
http://www.mintos.org/hardware/compile-kernel-wireless.html
MT7601驅(qū)動移植 - zqj6893的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/zqj6893/article/details/44258439
才明白,這是USB的WiFi模塊芯片驅(qū)動沒被識別的原因,空有一個USB接口插入的提示信息,insmod的.ko根本就不是插入的wifi模塊的驅(qū)動!各種折騰……
寫這篇博客,謹(jǐn)記我踩過的坑?。?!
目的驗證:
STA模式:
在輸入cat /proc/net/wireless
如果存在wlan0/ra0相關(guān)信息說明網(wǎng)卡驅(qū)動安裝成功:

AP模式:
手機(jī)或者筆記本電腦連上開發(fā)板的WiFi熱點(diǎn)
準(zhǔn)備:
搭建測試好TFTP與NFS
開發(fā)板:TQ210V3,S5PV210的CPU
PC端:Ubuntu 12.04 LTS
內(nèi)核版本:2.6.35
交叉編譯鏈:arm-embedsky-linux-gnueabi gcc version 4.4.6 (for TQ210 EmbedSky Tech)
STA模式的移植:(MTK的比較坑,兩種模式要移植兩個驅(qū)動)
1.連接好PC端與開發(fā)板,打開PC端串口調(diào)試工具,開發(fā)板上電開機(jī),然后在串口調(diào)試工具輸入命令lsusb,接著把USB接口的WiFi模塊插在開發(fā)板上,如圖:
可看到芯片的信息:ID 148f:5370,根據(jù)信息選擇RT5X7X的驅(qū)動壓縮包。我自己重新在網(wǎng)上下了RT5370的驅(qū)動包,復(fù)制到虛擬機(jī)的共享文件夾,然后在虛擬機(jī)Ubuntu把驅(qū)動包復(fù)制解壓,cd到源碼路徑下。
vim 頂層的makefile,修改makefile,根據(jù)自己的情況 指定平臺、內(nèi)核、交叉編譯器。
S5PV210是三星出品的,所以平臺根據(jù)處理器選擇SMDK。


保存退出
make ARCH=arm (Linux系統(tǒng)嚴(yán)格區(qū)分大小寫,要與內(nèi)核相同arm大小寫)
我也明白了,移植驅(qū)動沒成功原因:首先選擇沒正確芯片驅(qū)動包,然后就是沒指定架構(gòu)!??!想起老師是說過要指定架構(gòu)的,我真是把老師的話當(dāng)做耳邊風(fēng)?。。?!
復(fù)制驅(qū)動模塊到之前搭建好的nfs相關(guān)文件夾下
測試: 開發(fā)板接上電源,連接網(wǎng)線、串口線,打開串口調(diào)試窗口,打開電源 手動加載WiFi驅(qū)動:insmod rt5370sta.ko,顯示如圖

如果移植正確的驅(qū)動,插入 USB的WiFi模塊,顯示

然后驗證一下:cat /proc/net/wireless

卸載驅(qū)動模塊:rmmod rt5370sta.ko

至此,STA模式的驅(qū)動移植完畢!
錯誤信息:
/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
分析發(fā)現(xiàn)我下載驅(qū)動包源碼里面證書認(rèn)證:于是在網(wǎng)上找到解決方法如下:
在WiFi驅(qū)動源目錄下找到2011_0225_RT5370_RT5372_Linux_STA_V2.5.0.1_DPO/os/linux/usb_main_dev.c文件,添加一句:
MODULE_LICENSE("GPL");
然后再重新編譯生成rt5370sta.ko文件……
解決方法的網(wǎng)址:
rt3070sta: module license 'unspecified' taints kernel... SOLVED
http://www.linuxforums.org/forum/wireless-internet/161550-rt3070sta-module-license-unspecified-taints-kernel-solved.html