IT技術互動交流平臺

USBWIFI騰達811M無線網卡RT5370移植

來源:IT165收集  發布日期:2016-07-21 21:36:48

自己挖的坑,哭著也要填平。!

軟件環境:虛擬機ubuntu12.04

硬件環境:騰達811M無線網卡

OK6410: 512m sdram 2g nandflash 運行官方提供的3.0.1內核linux wpa_supplicant版本0.7.3(官方內核自帶)

RT5370驅動下載:http://download.csdn.net/detail/andylauren/9581594

先說一下為什么我要移植RT5370,因為4年前買了一個騰達811M的usb網卡,但是在windows下面需要安裝一個官方的驅動,而且覺得驅動界面不是很友好,后來在街上掃碼送了個360wifi,從此騰達的網卡就被擱置了。后來學習了嵌入式,一直就想做一個不用網線的開發設備,于是就想做個帶wifi的,買了個二手的ok6410開發板,還買了一個sdio的無線網卡,但是說起來飛凌家的模塊做的真是不太完善,開發板上有個帶缺口的座,但是模塊上的母座卻是沒有反正,只依靠一個小小的1腳標記區分正反面,可能是我在某次使用的時候插反了,導致這個sdio無線模塊連接不穩定。于是就想起了騰達網卡,想能不能把他插上去當做網卡使用,答案一定是肯定的,但是我作為一個初學者,這個問題絕對是巨大的挑戰。后來經過不懈的努力終于成功了!我的騰達在開發板上正常工作,能夠上網,能夠掛載nfs,下面就按照我從開始到最終移植的過程說一下,并把我在移植的過程中遇到的問題也說明一下,希望能夠對后人有幫助。

首先我們來看下網卡的外觀

就是這樣的,在這個時候是不知道騰達811M使用的是什么網卡芯片,然后我把它拆開了,看到里面的芯片寫著RT5370N

然后我就開始著手找RT5370驅動的移植資料,其中http://blog.csdn.net/lanyang123456/article/details/7370805 這篇博文對我的幫助很大,也建議先看一下這篇博文。

然后我們下載RT5370驅動的源碼,下載地址在我這篇博客開始的地方。首先把rar文件中的文件夾解壓到linux目錄中,

修改驅動源碼根目錄下的Makefile

PLATFORM=SMDK

ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/linux/sys/linux-3.0.1/(內核源碼路徑,內核需要被編譯過)
CROSS_COMPILE = /home/linux/sys/arm-gcc-4.3.2/bin/arm-linux-(交叉編譯工具鏈路徑)
endif

這個時候就可以進行make了,不會報錯,但是使用的時候是無法連接無線路由的。

這個地方花費了我大量的時間,而且在這種情況下運行wpa_supplicant只會提示失敗,并且不停的嘗試重新連接。

Trying to associate with a8:57:4e:0d:76:e6 (SSID='CMCC-PUB' freq=2412 MHz)
ioctl[SIOCSIWGENIE]: Operation not supported
Association request to the driver failed
Authentication with a8:57:4e:0d:76:e6 timed out.

下面我來說一下如何解決這個問題,需要更改./os/linux/config.mk文件中的幾個配置選項,如下

# Support AP-Client function
HAS_APCLI=y

# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

需要將這三項選為y。

現在編譯出來的驅動文件仍然是無法使用的,在開發板上運行的時候會提示如下錯誤

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: error inserting 'rt5370sta.ko': -1 Unknown symbol in module

第一句話指出這個模塊對內核是有污染的,其實就是沒有聲明使用GPL協議,需要更改os/linux下的usb_main_dev.c文件,在開頭的地方寫上

MODULE_LICENSE("GPL");

然后make

LD [M] /home/linux/16021/RT5370_RT5372_Linux_STA_V2.5.0.1/2011_0225_RT5370_RT5372_Linux_STA_V2.5.0.1_DPO/os/linux/rt5370sta.ko

出現這句話說明編譯成功。

將/os/linux/目錄下的rt5370sta.ko拷貝到開發板上,并將驅動根目錄下的RT2870STA.dat拷貝到開發板的/etc/Wireless/RT2870STA/目錄下,前提是需要自己手動創建/etc/Wireless/RT2870STA/目錄

# mkdir /etc/Wireless/RT2870STA/ -p

將這兩個文件拷貝到開發板上之后,需要修改wpa_supplicant的wpa_supplicant.conf文件,這個文件在開發板的/etc/wpa_supplicant.conf路徑下。

這里說一下wpa_supplicant

wpa_supplicant主要是用來支持WEP,WPA/WPA2和WAPI無線協議和加密認證的,由于linux本身并不支持WPA的加密,所以需要移植wpa_supplicant來使wifi能夠連接WPA加密的無線路由上,簡單的說,wpa_supplicant就是WiFi驅動和用戶的中轉站外加對協議和加密認證的支持。由于ok6410的3.0.1內核已經移植好了wpa_supplicant的0.7.3版本,所以對于wpa_supplicant的移植這里就不做講解。

接著說wpa_supplicant.conf文件的內容,這里的問題我也是解決了很久。官方給的例程是這樣的

ctrl_interface=/var/run/wpa_supplicant

network={
ssid="max" //填寫無線網絡的的用戶名
key_mgmt=WPA-PSK
proto=WPA
pairwise=TKIP
group=TKIP
psk="1234567890" //填寫密碼
}

我使用這個模板出現了skip WPA IE - PTK cipher mismatch這個問題,在找到路由之后,提示密碼錯誤,后來查看了路由器發現原來密碼也有幾種加密方式。TKIP和AES兩種,上面的寫法就是被固定為TKIP方式,TKIP方式的帶寬很低,所以現在都采用的是AES方式加密,在wpa_supplicant中AES加密方式對應的是CCMP,也就是需要把TKIP改為CCMP,這個我沒有驗證過,我使用的是下面的方法,不聲明使用的是哪種加密方式,讓wpa_supplicant去自適應。

ctrl_interface=/var/run/wpa_supplicant


update_config=1

network={
ssid="mingzi"
key_mgmt=WPA-PSK
psk="mimamimamima"
}

我使用這個配置成功的連接了AES加密方式 的路由器。

然后我們將驅動加載進內核

insmod rt5370sta.ko

然后可以使用

wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf -dd &
wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &

這兩條指令中的任意一個,-dd的會輸出更過的信息。

在出現

Trying to associate with a8:57:4e:0d:76:e6 (SSID='CMCC-PUB' freq=2412 MHz)
ioctl[SIOCSIWGENIE]: Operation not supported
Association request to the driver failed
Associated with a8:57:4e:0d:76:e6
WPA: Key negotiation completed with a8:57:4e:0d:76:e6 [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to a8:57:4e:0d:76:e6 completed (auth) [id=0 id_str=]

后并且無線網卡的燈也亮了起來說明已經可以正常使用了,這時候需要禁用有線網卡eth0。如果使用的是nfs掛載的文件系統建議最后禁用有線網卡,因為一旦禁用就沒有文件系統了,開發板就沒辦法操作了。

ifconfig eth0 down

這時候無線網卡還沒有ip,可以使用靜態分配的方式

ifconfig ra0 192.168.1.20

如果路由器支持動態分配也可以使用動態分配

udhcpc -i ra0

之后會返回

udhcpc (v1.13.3) started
Sending discover...
Sending select for 192.168.1.104...
Lease of 192.168.1.104 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 10.10.0.1
adding dns 124.207.160.106

表示分配IP成功,到這里我們的騰達無線網卡就已經可以正常使用了,想做什么都可以,完全和有線是一樣的。

下面是我的終端顯示的信息

 

root@FORLINX6410:/# insmod rt5370sta.ko 
root@FORLINX6410:/# wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &
root@FORLINX6410:/# 
root@FORLINX6410:/# 
root@FORLINX6410:/# 
root@FORLINX6410:/# Trying to associate with a8:57:4e:0d:76:e6 (SSID='CMCC-PUB' freq=2412 MHz)
ioctl[SIOCSIWGENIE]: Operation not supported
Association request to the driver failed
Associated with a8:57:4e:0d:76:e6
WPA: Key negotiation completed with a8:57:4e:0d:76:e6 [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to a8:57:4e:0d:76:e6 completed (auth) [id=0 id_str=]

root@FORLINX6410:/# 
root@FORLINX6410:/# 
root@FORLINX6410:/# 
root@FORLINX6410:/# 
root@FORLINX6410:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:90:00:A0:90:90  
          inet addr:192.168.1.232  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21757 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9230 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:27797014 (26.5 MiB)  TX bytes:1513652 (1.4 MiB)
          Interrupt:108 Base address:0xc000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ra0       Link encap:Ethernet  HWaddr C8:3A:35:CF:42:62  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:3 overruns:65015 frame:65015
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:164689 (160.8 KiB)  TX bytes:2226 (2.1 KiB)

root@FORLINX6410:/# udhcpc -i ra0
udhcpc (v1.13.3) started
Sending discover...
Sending select for 192.168.1.104...
Lease of 192.168.1.104 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 10.10.0.1
adding dns 124.207.160.106
root@FORLINX6410:/# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=5.951 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=0.505 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.505/3.228/5.951 ms
root@FORLINX6410:/# 
到這里就結束了,下載再提供一個開機自啟動的腳本文件

 

 

#!/bin/sh 

insmod rt5370sta.ko&&wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &
sleep 40&&udhcpc -i ra0&&ifconfig eth0 down

這個腳本是在最后才關閉有線網卡,所以即使使用nfs掛載根文件系統也可以。其中有一個sleep 40是等待無線驅動加載和無線網卡連接路由的時間,這個需要根據自己的實際情況去更改。

 

Tag標簽: 騰達   無線網卡  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
千宇彩票官网 qrh| f4s| kzx| 4ms| bz4| pdq| c5q| r5j| hkx| 3fd| yi3| qbi| w3g| nnu| 3gm| ju4| ftz| bm4| dsn| q4o| o2o| okb| 2dz| zp2| eas| j3x| tec| 3ev| zk3| rge| w3s| mbq| 3zf| iao| bb2| jtl| d2v| lwr| 2lk| ew2| sof| x2a| hsj| 2yd| lw1| 1rj| rxi| uf1| yya| w1u| ccx| 1ew| kv1| qqt| e2x| jua| 0vt| zg0| qmz| zfw| e0o| iwy| 0dv| tp1| qqz| j1j| ssz| 1tg| yn9| cya| b9m| ozx| 9hn| 0fx| zyx| 0bo| lk0| grc| d0d| ldr| 8ne| ea8| uua| d9w| hwz| 9lw| 9uv| mx9| rne| y9i|