開發(fā)環(huán)境說明
內(nèi)核版本:3.5.0
PC 宿主機(jī):紅帽 REDHAT
一、移植 WIFI 驅(qū)動(dòng)
當(dāng)前采用的WIFI是360隨身WIFI,這款隨身WIFI所用的網(wǎng)卡芯片是 Ralink(雷凌科技) 的解決方案(在之前文章里也有詳細(xì)介紹),芯片型號(hào)為 MT7601。 如果在PC計(jì)算機(jī)上使用這款隨身WIFI那自然是簡(jiǎn)單,官網(wǎng)下載個(gè)驅(qū)動(dòng)安裝插上就能使用。 如果是在嵌入式平臺(tái),自動(dòng)的平臺(tái)上使用,官網(wǎng)就沒有現(xiàn)成的驅(qū)動(dòng)下載了,這種情況下就需要針對(duì)WIFI編寫驅(qū)動(dòng)。當(dāng)然,從0開始寫確實(shí)困難,不過這款芯片官方提供了linux下的驅(qū)動(dòng)源碼,這就好辦了。只需要下載下來,編譯就能使用了。
接下來這篇文章會(huì)詳細(xì)介紹WIFI驅(qū)動(dòng)從哪里下載,下載下來如何修改進(jìn)行編譯安裝測(cè)試,并交叉編譯對(duì)應(yīng)的WIFI工具,最終完成WIFI的基本使用,完成IP地址動(dòng)態(tài)分配,熱點(diǎn)連接,熱點(diǎn)掃描、熱點(diǎn)信息查看等等。
1.1 下載 WIFI 驅(qū)動(dòng)
下載鏈接:http://mediatek.com/zh-CN/downloads1/downloads/[](http://mediatek.com/zh-CN/downloads1/downloads/)
直接下載鏈接
http://s3.amazonaws.com/mtk.cfs/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2[](http://s3.amazonaws.com/mtk.cfs/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2)
1.2配置編譯驅(qū)動(dòng)
將下載的驅(qū)動(dòng)壓縮包拷貝到虛擬機(jī),解壓。(為了好分類,最好單獨(dú)創(chuàng)建一個(gè)文件夾存放)
1.2.1 解壓
[root@XiaoLong 360_WIFI]# tar xvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
1.2.2 修改運(yùn)行環(huán)境
進(jìn)入到解壓的目錄下,修改頂層 Makefile,驅(qū)動(dòng)默認(rèn)的運(yùn)行環(huán)境為 X86,需要注釋掉。
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +30
第 30 行加上注釋:#PLATFORM = PC 第 49 行取消注釋:LATFORM = SMDK
1.2.3 修改編譯環(huán)境
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +275
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /work/linux3.5/linux-3.5 內(nèi)核路徑 CROSS_COMPILE = arm-linux- 交叉編譯器 endif
1.2.4 查看 USB 的 ID
USB 芯片的 ID,需要用作匹配作用!相當(dāng)于平臺(tái)設(shè)備的驅(qū)動(dòng)端與設(shè)備端一樣,插入了 USB 之后,USB 控制器需要對(duì)插入的 USB 進(jìn)行訪問,確認(rèn)是否是 WIFI 芯片。確定的憑證就是 ID 號(hào)
查看 USB ID 的方法:
在虛擬機(jī)環(huán)境下,輸入 lsusb 先查看已經(jīng)存在的 USB 設(shè)備:
查看之后,再插入 360WIFI,再次輸入 lsusb 查看存在的 USB 設(shè)備。
注意: 默認(rèn) 360WIFI 會(huì)被 windows 掛載,需要手動(dòng)點(diǎn)擊虛擬機(jī)右下腳的 USB 圖標(biāo)將 360WIFI 掛載進(jìn)來。
掛載進(jìn)來之后,查看的結(jié)果:
由上面可以看出,360WIFI 的設(shè)備 ID 分別是:148f 和 760b。
1.2.5 添加 USB ID
添加 USB 的 ID 需要修改 common 目錄下的 rtusb_dev_id.c 文件,該文件里有一個(gè)存放 ID 的結(jié)構(gòu)體,我們需要將上一步得到的 360WIFI 的 ID 添加到結(jié)構(gòu)體中。
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# cd common/
[root@XiaoLong common]# gedit rtusb_dev_id.c +37
添加的格式:
{USB_DEVICE(0x148f,0x760b)}, //添加 360wifi 的設(shè)備 ID
1.2.6 去除調(diào)試信息
為什么去除調(diào)試信息呢?因?yàn)樵诮K端調(diào)試代碼的時(shí)候,驅(qū)動(dòng)會(huì)不斷的向終端打印信息,導(dǎo)致沒法敲打命令,所以需要將其注釋掉。去除調(diào)試信息需要進(jìn)入到 include/os/目錄下,修改 rt_linux.h 文件的 1558 行。
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# cd include/os/
[root@XiaoLong os]# gedit rt_linux.h +1558
#include "os/rt_os.h"
#undef DBGPRINT //添加這兩句話 去除調(diào)試打印輸出
#define DBGPRINT(...)
#endif /* __RT_LINUX_H__ */
1.2.7 編譯源碼
修改完之后,編譯源碼,生成驅(qū)動(dòng)文件。 (需要在解壓的頂層目錄下輸入 make) 編譯成功后,會(huì)在 os/linux/目錄下生成 mt7601Usta.ko 文件。
1.2.8 修改 U-BOOT 啟動(dòng)代碼
啟動(dòng) u-bootd 的時(shí)候先進(jìn)入 U-BOOT 命令行,設(shè)置 UBOOT 環(huán)境變量,在之前的環(huán)境變量后加一句 coherent_pool=2M。
coherent_pool=2M 表示設(shè)置 DMA 的緩沖區(qū)大小。如果不設(shè)置 DMA 緩沖區(qū)大小,裝載 360WIFI 驅(qū)動(dòng)的時(shí)候會(huì)報(bào)錯(cuò)。
設(shè)置UBOOT環(huán)境變量代碼如下:(注意:下邊代碼是一行,不能有換行符出現(xiàn))
set bootargs root=/dev/nfs nfsroot=192.168.18.3:/work/nfs_root ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off console=ttySAC0,115200 lcd=s70 coherent_pool=2M init=/linuxrc
1.2.9 測(cè)試 WIFI 驅(qū)動(dòng)
將生成的 mt7601Usta.ko 驅(qū)動(dòng)文件拷貝到開發(fā)板目錄下,安裝。安裝成功之后,將 360WIFI 插入到開發(fā)板的 USB 口中,觀察彈出的測(cè)試信息。
[root@XiaoLong /360_WIFI]# insmod mt7601Usta.ko
如果識(shí)別成功,會(huì)出現(xiàn)以下的提示信息:
1.3.0 拷貝 WIFI 啟動(dòng)配置文件
將 RT2870STA.dat 拷貝至開發(fā)板 /etc/Wireless/RT2870STA/目錄下。
(沒有目錄就創(chuàng)建一個(gè)); mkdir /etc/Wireless/RT2870STA
二、移植 WIFI 配置工具
2.1 移植wireless_tools
Wireless tools for Linux是一個(gè)Linux命令行工具包,用來設(shè)置支持Linux Wireless Extension的無線設(shè)備。Wireless tools for Linux 和 Linux Wireless Extension 由 Jean Tourrilhes在維護(hù),由Hewlett-Packard(HP惠普)贊助。
大多數(shù)基于Linux內(nèi)核的操作系統(tǒng)都包含Wireless tools。在許多GNU/Linux 發(fā)行版中,都缺省安裝這個(gè)工具包,即使是沒有自動(dòng)安裝,也能很容易地找到其二進(jìn)制代碼安裝包。
Wireless Extension (WE)是一組通用的API,能在用戶空間對(duì)通用Wireless LANs進(jìn)行配置和統(tǒng)計(jì)。它的好處在于僅通過一組單一的工具就能對(duì)各種各樣的Wireless LANs進(jìn)行管理,不過它們是什么類型,只要其驅(qū)動(dòng)支持Wireless Extension就行;另一個(gè)好處就是不用重啟驅(qū)動(dòng)或Linux就能改變這些參數(shù)。
Wireless Tools (WT)就是用來操作Wireless Extensions的工具集,它們使用字符界面,雖然粗糙,但支持所有Wireless Extension。雖然還有很多其他管理Wireless Extensions的工具,但Wireless Tools是參考實(shí)現(xiàn),它包括以下工具:
iwconfig:設(shè)置基本無線參數(shù)
iwlist:掃描、列出頻率,比特率,密鑰等
iwspy:獲取每個(gè)節(jié)點(diǎn)鏈接的質(zhì)量(只能查閱與之相連的節(jié)點(diǎn))
iwpriv:操作Wireless Extensions 特定驅(qū)動(dòng)
ifrename: 基于各種靜態(tài)標(biāo)準(zhǔn)命名接口
大多數(shù) Linux 發(fā)行版本都在其網(wǎng)絡(luò)初始化腳本中集成Wireless Extension,以便啟動(dòng)時(shí)配置無線接口。他們還將Wireless Tools作為其標(biāo)準(zhǔn)封裝包。
2.1.1 下載地址
下載地址:
http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz[](http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz)
2.1.2 解壓配置
(1)解壓
[root@xiaolong 360wifi]# tar xvf wireless_tools.29.tar.gz
[root@xiaolong 360wifi]# cd wireless_tools.29
(2)修改 Makefile
[root@xiaolong wireless_tools.29]# gedit Makefile 大約 12 行和 14 行
12 CC = arm-linux-gcc
14? R = arm-linux-ar
(3)? 編譯
[root@xiaolong wireless_tools.29]# make
(4) 拷貝文件
拷貝 libiw.so.29 文件到目標(biāo)系統(tǒng) rootfs/usr/lib/目錄
拷貝用到的幾個(gè)程序到目標(biāo)板 rootfs/usr/lib/bin/目錄
iwpriv、iwconfig、iwlist, iwevent, iwspy
至此 wireless_tools 移植完成
有可能出現(xiàn)的錯(cuò)誤:
在到產(chǎn)品板上還可能出現(xiàn) can't resolve symbol '__ctype_b_loc' 錯(cuò)誤
去掉 iwlib.h 中這一行重新編譯即可
#include < ctype.h >
2.1.3 工具使用方法
1. 啟動(dòng)網(wǎng)卡:
ifconfig ra0 up
2. 關(guān)閉網(wǎng)卡:
ifconfig ra0 down
3. 掃描周圍的 wifi 信息:
iwlist ra0 scan
4. 查看無線網(wǎng)卡的信息(比如:網(wǎng)卡名稱,已經(jīng)連接上的 WIFI 等):
iwconfig
5. 我們經(jīng)常會(huì)用到的主要是 iwlist、iwconfig、 iwpriv(沒有全部測(cè)試過)
命令行:(連接不需要驗(yàn)證密碼的熱點(diǎn))
iwlist mlan0 scan //搜索熱點(diǎn)信息
ap iwconfig mlan0 essid “linksys” //連接熱點(diǎn)
udhcpc -i mlan0 //獲得動(dòng)態(tài) IP
命令行:(連接需要驗(yàn)證密碼的熱點(diǎn))
iwlist mlan0 scan //搜索熱點(diǎn)信息
ap iwconfig mlan0 key xxxxxxxxxx //輸入驗(yàn)證密碼
iwconfig mlan0 key open //密碼驗(yàn)證功能打開
iwconfig mlan0 essid “linksys” //連接熱點(diǎn)
udhcpc –i mlan0 //獲得動(dòng)態(tài) IP
3.1 移植 wap_supplicant 工具
目前可以使用wireless-tools 或wpa_supplicant工具來配置無線網(wǎng)絡(luò)。請(qǐng)記住重要的一點(diǎn)是,對(duì)無線網(wǎng)絡(luò)的配置是全局性的,而非針對(duì)具體的接口。
wpa_supplicant是一個(gè)較好的選擇,但缺點(diǎn)是它不支持所有的驅(qū)動(dòng)。請(qǐng)瀏覽wpa_supplicant網(wǎng)站獲得它所支持的驅(qū)動(dòng)列表。另外,wpa_supplicant目前只能連接到那些你已經(jīng)配置好ESSID的無線網(wǎng)絡(luò),它可以讓您連接到那些使用WPA的AP。wireless-tools支持幾乎所有的無線網(wǎng)卡和驅(qū)動(dòng),但它不能連接到那些只支持WPA的AP。
關(guān)于WPA:
WPA是WiFi Protected Access的縮寫,中文含義為“WiFi網(wǎng)絡(luò)安全存取”。WPA是一種基于標(biāo)準(zhǔn)的可互操作的WLAN安全性增強(qiáng)解決方案,可大大增強(qiáng)現(xiàn)有以及未來無線局域網(wǎng)絡(luò)的數(shù)據(jù)保護(hù)和訪問控制水平。
wpa_supplicant是一個(gè)開源項(xiàng)目,已經(jīng)被移植到Linux,Windows以及很多嵌入式系統(tǒng)上。它是WPA的應(yīng)用層認(rèn)證客戶端,負(fù)責(zé)完成認(rèn)證相關(guān)的登錄、加密等工作。
wpa_supplicant是一個(gè) 獨(dú)立運(yùn)行的 守護(hù)進(jìn)程,其核心是一個(gè)消息循環(huán),在消息循環(huán)中處理WPA狀態(tài)機(jī)、控制命令、驅(qū)動(dòng)事件、配置信息等。
經(jīng)過編譯后的 wpa_supplicant源程序可以看到兩個(gè)主要的可執(zhí)行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的關(guān)系就是服務(wù)和客戶端的關(guān):
后臺(tái)運(yùn)行wpa_supplicant,使用 wpa_cli來搜索、設(shè)置、和連接網(wǎng)絡(luò)。
3.1.1 wap_supplicant 簡(jiǎn)介
在 Linux 移植 iw 工具的時(shí)候,我們講過 iw 支持兩種“認(rèn)證/加密”的方式,這兩種方式分別為:open 與 wep。但是現(xiàn)在很多的無線加密方法都是以 wpa 與 wpa2(AES)方式加密的。那么這里就出現(xiàn)了 iw 工具不能再 wpa 與 wpa2 的無線加密上使用。因此接下來移植一個(gè) wpa_supplicant 的工具:這個(gè)工具支持上面介紹到的四種方式:
1? open
2? WEP
3? WPA(TKJP)
4? WAP2(AES)
3.1.2 移植 libopenssl 庫
OpenSSL 是一個(gè)安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
OpenSSL被曝出現(xiàn)嚴(yán)重安全漏洞后,發(fā)現(xiàn)多數(shù)通過SSL協(xié)議加密的網(wǎng)站使用名為OpenSSL的開源軟件包。OpenSSL漏洞不僅影響以https開頭的網(wǎng)站,黑客還可利用此漏洞直接對(duì)個(gè)人電腦發(fā)起“心臟出血”(Heartbleed)攻擊。據(jù)分析,Windows上有大量軟件使用了存在漏洞的OpenSSL代碼庫,可能被黑客攻擊抓取用戶電腦上的內(nèi)存數(shù)據(jù)。
下載鏈接:http://distfiles.macports.org/openssl/[](http://distfiles.macports.org/openssl/)
1.? 將下載的 openssl-1.0.2e.tar.gz 壓縮包拷貝至虛擬機(jī)解壓。
[root@XiaoLong 360_WIFI]# tar xvf openssl-1.0.2e.tar.gz
2.? 配置編譯安裝的路徑
[root@XiaoLong openssl-1.0.2e]# ./config shared no-asm --prefix=$PWD/tmp
--prefix=$PWD/tmp 表示編譯安裝的路徑為當(dāng)前目錄下的 tmp
3.? 修改頂層 Makefile
[root@XiaoLong openssl-1.0.2e]# gedit Makefile +62
62 CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
75? AKEDEPPROG= arm-linux-gcc
4.? 編譯
[root@XiaoLong openssl-1.0.2e]# make
5.? 安裝
[root@XiaoLong openssl-1.0.2e]# make DESTDIR=$PWD/tmp install
3.1.3 拷貝生成的文件
(1)將安裝目錄下(tmp/include)的頭文件拷貝到交叉編譯器的 include 目錄下
[root@XiaoLong openssl-1.0.2e]# cp tmp/include/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include/ -rf
(2) 將編譯生成 lib 庫拷貝一份到開發(fā)板根文件系統(tǒng) lib 目錄下
[root@XiaoLong tmp]# pwd
/work/360_WIFI/openssl-1.0.2e/tmp
[root@XiaoLong tmp]# ls bin include lib openssl-1.0.2e.tmp.tar ssl
[root@XiaoLong tmp]# cp lib/* /work/nfs_root/lib/ -rf -d
(3) 將編譯生成的 lib 庫拷貝到交叉編譯器的 lib 目錄下
[root@XiaoLong openssl-1.0.2e]#
cp tmp/lib/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ -rf -d
3.1.4 移植 wpa_supplicant : 可用于上述 4 種"認(rèn)證/加密"的庫
下載鏈接:http://w1.fi/wpa_supplicant/[](http://w1.fi/wpa_supplicant/)
(1)將下載好的壓縮包拷貝至虛擬機(jī)解壓
[root@XiaoLong 360_WIFI]# tar xvf wpa_supplicant-2.5.tar.gz
(2) 加載配置文件
[root@XiaoLong wpa_supplicant-2.5]# cd wpa_supplicant/
[root@XiaoLong wpa_supplicant]# cp defconfig .config
(3)修改配置文件
[root@XiaoLong wpa_supplicant]# gedit .config
增加以下代碼:
CC=arm-linux-gcc
CFLAGS += -I/work/360_WIFI/openssl-1.0.2e/tmp/include
LIBS +=-L/work/360_WIFI/openssl-1.0.2e/tmp/lib
CFLAGS += -I /work/360_WIFI/libnl-3.2.25/tmp/include/libnl3
LIBS += -L /work/360_WIFI/libnl-3.2.25/tmp/lib
CONFIG_LIBNL32=y
(4)編譯
[root@XiaoLong wpa_supplicant]# make
(5)安裝
[root@XiaoLong wpa_supplicant]#make DESTDIR=$PWD/tmp install
(6)拷貝生成的可執(zhí)行文件到開發(fā)板的 sbin 目錄下--路徑 /tmp/usr/local/sbin
[root@XiaoLong sbin]# pwd
/work/360_WIFI/wpa_supplicant-2.5/wpa_supplicant/tmp/usr/local/sbin
[root@XiaoLong sbin]# cp ./* /work/nfs_root/sbin/
(7)? 拷貝生成的可執(zhí)行文件到開發(fā)板的 bin 目錄下
[root@XiaoLong sbin]# ls wpa_cli wpa_passphrase wpa_supplicant
[root@XiaoLong sbin]# cp ./* /work/nfs_root/bin/
4.1 測(cè)試使用 WIFI 步驟
4.1.1 創(chuàng)建密碼配置文件
在開發(fā)板根文件系統(tǒng)/etc/目錄創(chuàng)建 wpa_supplicant.conf 文件 ,輸入以下內(nèi)容:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wap_supplicant ap_scan=1 update_config=1
network={
ssid="208"
key_mgmt=WPA-PSK
proto=WPA
pairwise=TKIP CCMP
group=TKIP CCMP #
priority=2
psk="www.linux.com"
}
4.1.2 創(chuàng)建網(wǎng)卡控制接口
在開發(fā)板終端輸入:
[root@XiaoLong /]#mkdir /var/run/wap_supplicant -p
4.1.3 插入 360wifi 測(cè)試
將 360WIFI 插入開板 USB 口,安裝 WIFI 驅(qū)動(dòng):
[root@XiaoLong /driver/360wifi]# insmod mt7601Usta.ko
[ 47.260000] rtusb init rt2870 --- >
[ 47.260000] usbcore: registered new interface driver rt2870
[ 94.105000] usb 1-2.2: new high-speed USB device number 7 using s5p-ehci
[ 94.220000] usb 1-2.2: New USB device found, idVendor=148f, idProduct=760b
[ 94.220000] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 94.220000] usb 1-2.2: Product: 802.11 n WLAN
[ 94.220000] usb 1-2.2: Manufacturer: MediaTek
[ 94.220000] usb 1-2.2: SerialNumber: 1.0
[ 94.225000] < -- RTMPAllocTxRxRingMemory, Status=0
[ 94.230000] < -- RTMPAllocAdapterBlock, Status=0
[ 94.235000] BULK IN MaxPacketSize = 512 [ 94.235000] EP address = 0x84
[ 94.240000] BULK IN MaxPacketSize = 512
[ 94.245000] EP address = 0x85
[ 94.245000] BULK OUT MaxPacketSize = 512 [ 94.250000] EP address = 0x 8
[ 94.255000] BULK OUT MaxPacketSize = 512 [ 94.255000] EP address = 0x 4
[ 94.260000] BULK OUT MaxPacketSize = 512 [ 94.265000] EP address = 0x 5
[ 94.265000] BULK OUT MaxPacketSize = 512 [ 94.270000] EP address = 0x 6
[ 94.275000] BULK OUT MaxPacketSize = 512
[ 94.280000] EP address = 0x 7
[ 94.280000] BULK OUT MaxPacketSize = 512
[ 94.285000] EP address = 0x 9
查看識(shí)別成功的網(wǎng)卡:
[root@XiaoLong /driver/360wifi]# iwconfig lo no wireless extensions.
ra0 Ralink STA sit0 no wireless extensions.
eth0 no wireless extensions.
ip6tnl0 no wireless extensions.
4.1.4 啟動(dòng)網(wǎng)卡
[root@XiaoLong /]# wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B
[ 257.765000] Current MAC: =00:87:46:19:8f:eb
[ 257.780000] NICReadEEPROMParameters: RxPath = 1, TxPath = 1
[ 257.790000] 20MHz BW, 2.4G band-03030505, Adata = 03030505, Gdata = 03030505 [ 257.790000] 20MHz BW, 2.4G band-00000004, Adata = 00000004, Gdata = 00000004
[ 257.795000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002
[ 257.800000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002
[ 257.800000] 20MHz BW, 2.4G band-ffff0002, Adata = ffff0002, Gdata = ffff0002
[ 258.020000] BuildChannel # 1 :: Pwr0 = 16, Pwr1 =0, Flags = 0
BuildChannel # 2 :: Pwr0 = 16, Pwr1 =0, Flags = 0
BuildChannel # 3 :: Pwr0 = 16, Pwr1 =0, Flags = 0
BuildChannel # 4 :: Pwr0 = 16, Pwr1 =0, Flags = 0
BuildChannel # 5 :: Pwr0 = 17, Pwr1 =0, Flags = 0
BuildChannel # 6 :: Pwr0 = 17, Pwr1 =0, Flags = 0
BuildChannel # 7 :: Pwr0 = 17, Pwr1 =0, Flags = 0
BuildChannel # 8 :: Pwr0 = 17, Pwr1 =0, Flags = 0
BuildChannel # 9 :: Pwr0 = 17, Pwr1 =0, Flags = 0
BuildChannel # 10 :: Pwr0 = 18, Pwr1 =0, Flags = 0
BuildChannel # 11 :: Pwr0 = 18, Pwr1 =0, Flags = 0
BuildChannel # 12 :: Pwr0 = 18, Pwr1 =0, Flags = 0
BuildChannel # 13 :: Pwr0 = 18, Pwr1 =0, Flags = 0
BuildChannel # 14 :: Pwr0 = 18, Pwr1 =0, Flags = 0
<==== rt28xx_init, Status=0
[ 258.075000] 0x1300 = 00064300
[root@XiaoLong /]# [ 260.380000] RSN_IE: f0b15003, len = 24
[ 260.380000] 0x0000 : dd 16 00 50 f2 01 01 00 00 50 f2 04 01 00 00 50
[ 260.380000] 0x0010 : f2 04 01 00 00 50 f2 02
[ 260.545000] Key = 71:62:76:2d:90:f1:7d:e4:76:57:c0:c7:e4:a8:fa:a8
[ 260.545000] Rx MIC Key = 00:00:00:00:00:00:00:00 [ 260.545000] Tx MIC Key = 00:00:00:00:00:00:00:00
出現(xiàn)上面紅色部分的提示表示連接路由器成功??!
4.1.5 查看連接成功的 WIFI 信息
[root@XiaoLong /]# iwconfig lo no wireless extensions.
ra0 Ralink STA ESSID:"208" Nickname:"MT7601STA" 連接模式是 STA,連接上的路由器名稱是 208
Mode:Managed Frequency=2.437 GHz Access Point: D0:C7:C0:D4:84:12
Bit Rate=135 Mb/s
RTS thr:off Fragment thr:off
Encryption key:7162-762D-90F1-7DE4-7657-C0C7-E4A8-FAA8 [3] Security mode:restricted Security mode:open
Link Quality=100/100 Signal level:-27 dBm Noise level:-27 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
4.1.6 配置網(wǎng)卡地址信息
① [root@XiaoLong /]# ifconfig ra0 192.168.18.123 broadcast 192.168.18.255 netmask 255.255.0.0 up
② [root@XiaoLong /]# ifconfig ra0
Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.18.123 Bcast:192.168.255.255 Mask:255.255.0.0 配置成功 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:124367 errors:0 dropped:0 overruns:0 frame:0 TX packets:175 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:26249317 (25.0 MiB) TX bytes:10673 (10.4 KiB)
4.1.6 配置網(wǎng)卡地址信息
① [root@XiaoLong /]# ifconfig ra0 192.168.18.123 broadcast 192.168.18.255 netmask 255.255.0.0 up
② [root@XiaoLong /]# ifconfig ra0
Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.18.123 Bcast:192.168.255.255 Mask:255.255.0.0 配置成功 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:124367 errors:0 dropped:0 overruns:0 frame:0 TX packets:175 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:26249317 (25.0 MiB) TX bytes:10673 (10.4 KiB)
4.1.7 配置網(wǎng)關(guān)信息
[root@XiaoLong /]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ra0
查看路由表信息:
[root@XiaoLong /]# iproute
192.168.0.0/16 dev ra0 src 192.168.18.123
如果沒有無線網(wǎng)卡的網(wǎng)關(guān)信息,需要自己添加一個(gè):
[root@XiaoLong /]# route add default gw 192.168.18.1
4.1.8 ping 外網(wǎng) IP 測(cè)試
前提是當(dāng)前連接的 WIFI 可以連接互聯(lián)網(wǎng)。
202.108.22.5 是百度的 IP 地址。
[root@XiaoLong /]# ping 202.108.22.5
PING 202.108.22.5 (202.108.22.5): 56 data bytes
64 bytes from 202.108.22.5: seq=0 ttl=51 time=51.431 ms
64 bytes from 202.108.22.5: seq=1 ttl=51 time=44.511 ms
64 bytes from 202.108.22.5: seq=2 ttl=51 time=95.936 ms 64 bytes from 202.108.22.5: seq=3 ttl=51 time=46.402 ms
4.1.9 實(shí)現(xiàn) ping 域名
在/etc/目錄下創(chuàng)建一個(gè) resolv.conf 文件,輸入 DNS 地址,如下:
nameserver 192.168.1.1 nameserver 202.96.134.33
說明:一般寫本地網(wǎng)關(guān)就可以了,也就是保留 nameserver 192.168.1.1
也可以直接在串口終端使用命令創(chuàng)建并且寫入內(nèi)容。如下:
[root@XiaoLong /]# echo nameserver 192.168.1.1 > > /etc/resolv.conf
[root@XiaoLong /]# echo nameserver 202.96.134.33 > > /etc/resolv.conf
開發(fā)板中要想 ping 通外網(wǎng) IP,需要設(shè)置默認(rèn)網(wǎng)關(guān),這個(gè)網(wǎng)關(guān)必須要和所連接的路由器設(shè)置的網(wǎng)關(guān)相同(resolv.conf 文件內(nèi)容一般可以自動(dòng)獲取,不用手動(dòng)填)。
ping 百度示例:
[root@XiaoLong /]# ping www.baidu.com
[ 2742.105000] CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = 1, SetTid = 400000, DeleteTid = ffffffff.
[ 2742.105000] 1-MACValue= d4c0c7d0,
[ 2742.105000] 2-MACValue= 411284,
PING www.baidu.com (119.75.218.70): 56 data bytes
64 bytes from 119.75.218.70: seq=0 ttl=51 time=55.509 ms 64 bytes from 119.75.218.70: seq=1 ttl=51 time=53.253 ms 64 bytes from 119.75.218.70: seq=2 ttl=51 time=62.990 ms
64 bytes from 119.75.218.70: seq=3 ttl=51 time=44.665 ms
4.2.0 自動(dòng)獲取 IP 地址
使用 busybox 的 udhcpc 工具。一般默認(rèn)的配置都是選中的,為了確保成功,還是需要去確認(rèn)一下。
1. 首先配置 linux 內(nèi)核使其支持 DHCP,以及 socket:
[*] Networking support --- >< * > Packet socket
[*] IP: DHCP support
[*] Network packet filtering framework (Netfilter) --- >
2. 配置 busybox:
Networking Utilities --- > udhcp Server/Client --- >
[ * ] udhcp Server (udhcpd) udhcp Client (udhcpc)
[ * ] Lease display utility (dumpleases)
[ * ] Log udhcp messages to syslog (instead of stdout)
[ * ] Compile udhcp with noisy debugging messages
3. 編譯安裝 busybox
make
make install
4. 編譯完并安裝 busybox 后,將 busybox 源碼目錄下的 example/udhcpc/simple.script 腳本文件 cp 到根文件系統(tǒng)的/usr/share/udhcpc/default.script 文件中。
如果沒有目錄先創(chuàng)建目錄:
[root@XiaoLong /]#mkdir /usr/share/udhcpc -p
5. 自動(dòng)獲取 IP:
[root@XiaoLong /]# udhcpc -i ra0 udhcpc (v1.23.2) started
Setting IP address 0.0.0.0 on ra0 Sending discover...
Sending select for 192.168.1.10...
Lease of 192.168.1.10 obtained, lease time 7200
Setting IP address 192.168.1.10 on ra0 Deleting routers
route: SIOCDELRT: No such process
Adding router 192.168.1.1 獲取的 IP 地址
Recreating /etc/resolv.conf 自動(dòng)更新 resolv.conf 文件
Adding DNS server 211.162.66.66
Adding DNS server 211.162.77.77
6. 查看獲取到的 IP:
[root@XiaoLong /]# ifconfig ra0
Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:260636 errors:0 dropped:0 overruns:0 frame:0 TX packets:528 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:55031927 (52.4 MiB) TX bytes:33119 (32.3 KiB)
7. ping 百度測(cè)試:
自動(dòng)獲取 IP 也可以使用第三方其他工具(一般使用 busybox 自帶的即可):
下載 DHCP 源碼,編譯后得到 dhclient 工具,實(shí)現(xiàn) DHCP client.
(1) 下載源碼:http://gd.tuwien.ac.at/infosys/servers/isc/dhcp/ ,選中 dhcp-3.1.3.tar.gz;
(2) 解壓 tar -zxvf dhcp-3.1.3.tar.gz,然后進(jìn)入./dhcp-3.1.3/,運(yùn)行配置./configure,之后生成 work.linux-2.2 文件夾, 進(jìn)入 work.linux-2.2/client/,輸入 make "CC=arm-linux-gcc -static",將編譯生成 dhclient。
(3) 拷貝生成的 dhclient 到 mini2440 開發(fā)板上,為方便使用,可以放在/usr/bin/下;拷貝另外兩個(gè)配置文件到開發(fā)板,分別是 /dhcp-3.1.3/client/dhclient.conf 和/dhcp-3.1.3/client/scripts/linux 到開發(fā)板的/sbin/目錄下。并改名后一個(gè)文件為 dhclient-script ,并修改該文件的第一行 #! /bin/bash 為 #! /bin/sh ,保存后,修改權(quán)限 chmod +x /sbin/dhclient-script。
(4) 為 eth0 或者 wlan0 配置 dhcp 服務(wù),輸入 dhclient eth0 或者 dhclient wlan0 即可.
4.2.1 開機(jī)自動(dòng)加載連接路由器
可以將以下代碼加載到 etc/profile 文件里或者是/etc/rcS 文件里,開機(jī)自動(dòng)執(zhí)行。
insmod mt7601Usta.ko #安裝驅(qū)動(dòng)
wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B #啟動(dòng)網(wǎng)卡
udhcpc -i ra0 #自動(dòng)獲取 IP 地址--busybox 自帶的工具
5.1 其他工具移植方法
5.1.1 安裝flex工具庫
系統(tǒng)自帶的flex庫版本太低,需要升級(jí)!
Flex 是一個(gè)高效、免費(fèi)的開源框架,可用于構(gòu)建具有表現(xiàn)力的 Web應(yīng)用程序,這些應(yīng)用程序利用Adobe Flash Player和Adobe AIR, 可以實(shí)現(xiàn)跨瀏覽器、桌面和操作系統(tǒng)。雖然只能使用 Flex 框架構(gòu)建 Flex應(yīng)用程序,但Adobe Flash Builder(之前稱為 Adobe Flex Builder?)軟件可以通過智能編碼、交互式遍歷調(diào)試以及可視設(shè)計(jì)用戶界面布局等功能加快開發(fā)。
下載鏈接:http://sourceforge.net/projects/flex/files/
將下載的壓縮文件拷貝至虛擬機(jī),解壓,配置,編譯安裝。
[root@XiaoLong 360_WIFI]# tar xvf flex-2.6.0.tar.bz2
[root@XiaoLong 360_WIFI]# cd flex-2.6.0
[root@XiaoLong flex-2.6.0]# ./configure
[root@XiaoLong flex-2.6.0]# make && make install
5.1.2 安裝 bison
下載鏈接:http://ftp.gnu.org/gnu/bison/
GNU bison 是屬于 GNU 項(xiàng)目的一個(gè)語法分析器生成器。
GNU Bison是一種通用目的的分析器生成器。它將LALR(1)上下文無關(guān)文法的描述轉(zhuǎn)化成分析該文法的C程序。 一旦你精通Bison,你可以用它生成從簡(jiǎn)單的桌面計(jì)算器到復(fù)雜的程序設(shè)計(jì)語言等等許多語言的分析器。
將下載好的bison-3.0 .tar.gz壓縮包拷貝到虛擬機(jī)解壓,解壓后,進(jìn)入到解壓后的目錄,配置,編譯,安裝。
[root@XiaoLong bison-3.0]# ./configure
[root@XiaoLong bison-3.0]# make && make install
5.1.3 安裝libnl庫
libnl套件是netlink庫提供api的集合協(xié)議基于Linux內(nèi)核的接口。
Netlink IPC機(jī)制主要是在內(nèi)核和用戶空間之間提供接口。 它被設(shè)計(jì)為一個(gè)更靈活的ioctl的繼任者,主要提供網(wǎng)絡(luò)相關(guān)的內(nèi)核配置和監(jiān)控接口。
下載鏈接:http://www.infradead.org/~tgr/libnl/
將下載后的libnl-3.2.25.tar.gz壓縮包拷貝到虛擬機(jī),解壓,配置,編譯,安裝。
[root@XiaoLong work]# tar xvf libnl-3.2.25.tar.gz
[root@XiaoLong libnl-3.2.25]# ./configure --host=arm-linux --prefix=$PWD/tmp
--prefix=$PWD/tmp :表示指定編譯安裝的路徑 ---安裝路徑為當(dāng)前目錄的tmp文件夾
--host=arm-linux :指定編譯器
[root@XiaoLong libnl-3.2.25]# make && make install
5.1.4 拷貝依賴庫
Libnl庫安裝成功之后,在tmp目錄下會(huì)生成lib目錄。
1將lib目錄下的文件拷貝一份到系統(tǒng)交叉編譯路徑下的lib目錄里
2將lib目錄下的文件拷貝一份到開發(fā)板的根文件系統(tǒng)lib目錄里
3將libnl庫下include目錄下的文件,拷貝一份到交叉編譯器的include目錄
[root@XiaoLong libnl-3.2.25]# cp tmp/lib/* /work/nfs_root/lib/ -rf -d
[root@XiaoLong libnl-3.2.25]#
cp tmp/include/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include/ -rf
[root@XiaoLong libnl-3.2.25]#
cp tmp/lib/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ -rf -d
審核編輯:湯梓紅
-
usb
+關(guān)注
關(guān)注
60文章
7945瀏覽量
264628 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209476 -
WIFI
+關(guān)注
關(guān)注
81文章
5297瀏覽量
203706 -
驅(qū)動(dòng)開發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12077 -
MT7601
+關(guān)注
關(guān)注
0文章
2瀏覽量
2887
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論