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
之後重啟,就會自動連上路由器上網