1. 程式人生 > >X210移植MTK7601無線網絡卡驅動(上)

X210移植MTK7601無線網絡卡驅動(上)

1、MTK7601

聯發科的低成本wifi解決方案。

2、無線網絡卡的配置和使用

(1)常用無線網絡卡工具介紹:iwconfig、iwlist、iwpriv、wpa_supplicant

(2)常見WIFI加密格式介紹和路由器端檢視:WEP、WPA

(3)wpa_supplicant使用詳解

(4)配置本地IP地址、閘道器、dns等並確認外網連線

3、確認環境

首先要拿到開發板提供的官方linux+QT4.8映象,這個核心之前我們做了很多修改(改了螢幕引數和更換觸控式螢幕驅動),根檔案系統則使用九鼎bsp提供的根檔案

進入檔案系統之後,輸入ifconfig

                                        

會發現沒有設定好開發板的ip地址

這時候輸入ifconfig eth0 192.168.1.10(只要和ubuntu在同個網段就好)

最後將ubuntu的nfs資料夾掛載到開發板檔案系統中的opt資料夾下:

mount -t nfs -o nolock 192.168.1.141:/home/aston/rootfs /opt

lsusb檢視網絡卡的VID和PID

Bus 001 Device 003: ID 148f:7601

VID和PID主要功能就是用來識別裝置,並掛接相應的驅動。

4、編譯和移植

首先將下載好的DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

在ubuntu中解壓完壓縮包後,執行make clean清理一下殘留的編譯檔案。

這個原始碼檔案是已經修改過的了,所以我們僅需檢查一下幾個內容即可。

4.1、確認原始碼包中rtusb_dev_id.c檔案

檔案路徑在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/common目錄下。

                       

其中第二行的USB_DEVICE(0x148f,0x7601) 對應上了我們之前看到的網絡卡的VID和PID。

4.2、修改Makefile

修改主目錄中的makefile

(1)平臺換成:三星

PLATFORM = SMDK

                                     

(2)核心原始碼樹路徑設定

LINUX_SRC = /home/work/x210/kernel //linux核心原始碼樹

                              

(3)交叉工具鏈路徑設定

CROSS_COMPILE = //交叉編譯環境

                      

4.3、修改網絡卡名字(可選)

(1)常用無線網絡卡名稱:rax、wlanx

(2)修改include/rtmp_def.h檔案

#define INF_MAIN_DEV_NAME "ra"

#define INF_MBSSID_DEV_NAME "ra"

4.4、新增wpa_supplicant支援

將來要使用wpa_supplican工具使wifi進行聯網,就需要配置這個選項。

檔案路徑在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/

確保config.mk檔案中WPA_SUPPLICANT=y

                      

4.5、編譯生成驅動模組

make clean && make -j2

生成os/linux/mt7601Usta.ko就是驅動模組

5.WIFI網絡卡的配置過程

5.1掛載驅動

首先將usb網絡卡插入開發板上的usb介面中。

然後再將之前編譯好的mt7601Usta.ko檔案放在開發板的檔案系統中,執行insmod mt7601Usta.ko載入網絡卡驅動

之後執行命令ifconfig -a 可以看到我們的網絡卡資訊,雖然這時候網絡卡還不能被啟動。

                                   

5.2wpa_supplicant配置檔案

首先在開發板中的etc資料夾裡面建立這幾個檔案。

/etc/Wireless/RT2870STA/RT2870STA.dat

使用mkdir -p /etc/Wireless/RT2870STA 建立RT2870STA資料夾

其中配置檔案RT2870STA.dat在之前的驅動原始碼裡面有,在原始碼的根目錄中。將RT2870STA.dat檔案拷貝到/etc/Wireless/RT2870STA/資料夾中。

               

複製完成之後,還需要修改/etc/wpa_supplicant.conf檔案。

其中key_mgmt是加密方式

ssid和psk則是wifi的賬號和密碼

                                       

5.3、網絡卡配置命令序列(手動)

insmod mt7601Usta.ko //安裝驅動程式

ifconfig ra0 up //開啟無線網絡卡

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //連線無線網路

連線完無線網路之後,可以輸入wpa_cli -i ra0 status 檢視網路連線狀態,如果有出現下圖,就說明連線正常。

                                    

接下來設定開發板的ip地址,配置閘道器之後,ping內外網就能通了。

ifconfig ra0 192.168.1.200 //手動配置ip,同一網段
route add default gw 192.168.1.1 dev ra0 //配置閘道器
ping 192.168.1.1 //ping 閘道器
ping 8.8.8.8 //ping 外網

如果想ping域名的話,就需要配置dns,首先開啟etc下的resolv.conf檔案,新增nameserver 192.168.1.1 即可。

vi /etc/resolv.conf //配置dns
nameserver 192.168.1.1

注意:

1、ra0的配置和上網前,一定要先關掉eth0(ifconfig eth0 down),否則你ping或者設定等等都是預設使用的eth0而不是ra0.

2、當我們wifi網絡卡連線上路由器後,想要ping通路由器(閘道器),必須本地wifi網絡卡有一個和網關同一網段的ip地址才可以。這個本地的ip地址可以dhcp分配,也可以手工配置一個。

3、本地有了ip地址,並且wifi網絡卡通過wpa_supplicant配置連上路由器後,就能ping通網關了。但是這時還不能ping通外網,因為本地還沒有新增閘道器配置。新增閘道器配置有2種方法:通過route命令動態新增,或者通過/etc/network/interfaces檔案新增。

4、新增閘道器後就能ping通外網IP了,但是還ping不通www.baidu.com等域名,因為還沒有dns。

至此,手動配置wifi模組上網就基本完成了。如果還要更方便點上網,就參考接下來的。

5.4、使用interfaces檔案靜態配置

之前使用的是手動配置,接下來使用interfaces檔案進行配置

首先還是跟一開始一樣

insmod mt7601Usta.ko //安裝驅動程式

ifconfig ra0 up //開啟無線網絡卡

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //連線無線網路

wpa_cli -i ra0 status //檢視連線狀態

然後在終端使用vi開啟開發板檔案系統中的/etc/network/interfaces,增加以下配置。

                                    

最後使interface檔案生效(重啟網絡卡),方法是先ifdown ra0然後ifup ra0

                                  

總結:使用/etc/network/interfaces檔案其實就是替代了手工配置時的ifconfig分配本地ip地址,和route新增閘道器這兩步。

5.5、使用dhcp動態分配IP

路由器中有個dhcp伺服器,本地有dhcp客戶端,嵌入式裝置的檔案系統中的busybox內也帶了dhcp功能。

前導步驟:使用dhcp動態分配ip前,需要執行以下步驟

insmod /home/mt7601Usta.ko //安裝驅動程式

ifconfig ra0 up //開啟無線網絡卡

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //連線無線網路

wpa_cli -i ra0 status //檢視連線狀態

當前狀態就是:wifi網絡卡已經啟動並且連線上路由器了,但是本地沒有ip地址,所以沒法ping通路由器。怎麼辦?使用dhcp分配一個本地ip。

方法1:命令列使用udhcpc命令來分配

輸入命令:udhcpc -i ra0

之後就可以得到dhcp分配好的地址。

方法2:使用interface檔案選擇dhcp模式然後重啟網絡卡

6、讓開發板開機自動連上路由器上網

改/etc/init.d/rcS及其相關檔案.

首先在開發板檔案系統中的/etc/init,d/目錄下建立一個S41Wifi檔案

新增進之前配置的東西。

                         

儲存後,記得給S41Wifi這個檔案加上可執行許可權。

chmod a+x S41Wifi

之後重啟,就會自動連上路由器上網