開發環境說明
內核版本:3.5.0
PC 宿主機:紅帽 REDHAT
一、移植 WIFI 驅動
當前采用的WIFI是360隨身WIFI,這款隨身WIFI所用的網卡芯片是 Ralink(雷凌科技) 的解決方案(在之前文章里也有詳細介紹),芯片型號為 MT7601。 如果在PC計算機上使用這款隨身WIFI那自然是簡單,官網下載個驅動安裝插上就能使用。 如果是在嵌入式平臺,自動的平臺上使用,官網就沒有現成的驅動下載了,這種情況下就需要針對WIFI編寫驅動。當然,從0開始寫確實困難,不過這款芯片官方提供了linux下的驅動源碼,這就好辦了。只需要下載下來,編譯就能使用了。
接下來這篇文章會詳細介紹WIFI驅動從哪里下載,下載下來如何修改進行編譯安裝測試,并交叉編譯對應的WIFI工具,最終完成WIFI的基本使用,完成IP地址動態分配,熱點連接,熱點掃描、熱點信息查看等等。
1.1 下載 WIFI 驅動
下載鏈接: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配置編譯驅動
將下載的驅動壓縮包拷貝到虛擬機,解壓。(為了好分類,最好單獨創建一個文件夾存放)
1.2.1 解壓
[root@XiaoLong 360_WIFI]# tar xvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
1.2.2 修改運行環境
進入到解壓的目錄下,修改頂層 Makefile,驅動默認的運行環境為 X86,需要注釋掉。
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +30
第 30 行加上注釋:#PLATFORM = PC 第 49 行取消注釋:LATFORM = SMDK
1.2.3 修改編譯環境
[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +275
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /work/linux3.5/linux-3.5 內核路徑 CROSS_COMPILE = arm-linux- 交叉編譯器 endif
1.2.4 查看 USB 的 ID
USB 芯片的 ID,需要用作匹配作用!相當于平臺設備的驅動端與設備端一樣,插入了 USB 之后,USB 控制器需要對插入的 USB 進行訪問,確認是否是 WIFI 芯片。確定的憑證就是 ID 號
查看 USB ID 的方法:
在虛擬機環境下,輸入 lsusb 先查看已經存在的 USB 設備:
查看之后,再插入 360WIFI,再次輸入 lsusb 查看存在的 USB 設備。
注意: 默認 360WIFI 會被 windows 掛載,需要手動點擊虛擬機右下腳的 USB 圖標將 360WIFI 掛載進來。
掛載進來之后,查看的結果:
由上面可以看出,360WIFI 的設備 ID 分別是:148f 和 760b。
1.2.5 添加 USB ID
添加 USB 的 ID 需要修改 common 目錄下的 rtusb_dev_id.c 文件,該文件里有一個存放 ID 的結構體,我們需要將上一步得到的 360WIFI 的 ID 添加到結構體中。
[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 的設備 ID
1.2.6 去除調試信息
為什么去除調試信息呢?因為在終端調試代碼的時候,驅動會不斷的向終端打印信息,導致沒法敲打命令,所以需要將其注釋掉。去除調試信息需要進入到 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 //添加這兩句話 去除調試打印輸出
#define DBGPRINT(...)
#endif /* __RT_LINUX_H__ */
1.2.7 編譯源碼
修改完之后,編譯源碼,生成驅動文件。 (需要在解壓的頂層目錄下輸入 make) 編譯成功后,會在 os/linux/目錄下生成 mt7601Usta.ko 文件。
1.2.8 修改 U-BOOT 啟動代碼
啟動 u-bootd 的時候先進入 U-BOOT 命令行,設置 UBOOT 環境變量,在之前的環境變量后加一句 coherent_pool=2M。
coherent_pool=2M 表示設置 DMA 的緩沖區大小。如果不設置 DMA 緩沖區大小,裝載 360WIFI 驅動的時候會報錯。
設置UBOOT環境變量代碼如下:(注意:下邊代碼是一行,不能有換行符出現)
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 測試 WIFI 驅動
將生成的 mt7601Usta.ko 驅動文件拷貝到開發板目錄下,安裝。安裝成功之后,將 360WIFI 插入到開發板的 USB 口中,觀察彈出的測試信息。
[root@XiaoLong /360_WIFI]# insmod mt7601Usta.ko
如果識別成功,會出現以下的提示信息:
1.3.0 拷貝 WIFI 啟動配置文件
將 RT2870STA.dat 拷貝至開發板 /etc/Wireless/RT2870STA/目錄下。
(沒有目錄就創建一個); mkdir /etc/Wireless/RT2870STA
二、移植 WIFI 配置工具
2.1 移植wireless_tools
Wireless tools for Linux是一個Linux命令行工具包,用來設置支持Linux Wireless Extension的無線設備。Wireless tools for Linux 和 Linux Wireless Extension 由 Jean Tourrilhes在維護,由Hewlett-Packard(HP惠普)贊助。
大多數基于Linux內核的操作系統都包含Wireless tools。在許多GNU/Linux 發行版中,都缺省安裝這個工具包,即使是沒有自動安裝,也能很容易地找到其二進制代碼安裝包。
Wireless Extension (WE)是一組通用的API,能在用戶空間對通用Wireless LANs進行配置和統計。它的好處在于僅通過一組單一的工具就能對各種各樣的Wireless LANs進行管理,不過它們是什么類型,只要其驅動支持Wireless Extension就行;另一個好處就是不用重啟驅動或Linux就能改變這些參數。
Wireless Tools (WT)就是用來操作Wireless Extensions的工具集,它們使用字符界面,雖然粗糙,但支持所有Wireless Extension。雖然還有很多其他管理Wireless Extensions的工具,但Wireless Tools是參考實現,它包括以下工具:
iwconfig:設置基本無線參數
iwlist:掃描、列出頻率,比特率,密鑰等
iwspy:獲取每個節點鏈接的質量(只能查閱與之相連的節點)
iwpriv:操作Wireless Extensions 特定驅動
ifrename: 基于各種靜態標準命名接口
大多數 Linux 發行版本都在其網絡初始化腳本中集成Wireless Extension,以便啟動時配置無線接口。他們還將Wireless Tools作為其標準封裝包。
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 文件到目標系統 rootfs/usr/lib/目錄
拷貝用到的幾個程序到目標板 rootfs/usr/lib/bin/目錄
iwpriv、iwconfig、iwlist, iwevent, iwspy
至此 wireless_tools 移植完成
有可能出現的錯誤:
在到產品板上還可能出現 can't resolve symbol '__ctype_b_loc' 錯誤
去掉 iwlib.h 中這一行重新編譯即可
#include < ctype.h >
2.1.3 工具使用方法
1. 啟動網卡:
ifconfig ra0 up
2. 關閉網卡:
ifconfig ra0 down
3. 掃描周圍的 wifi 信息:
iwlist ra0 scan
4. 查看無線網卡的信息(比如:網卡名稱,已經連接上的 WIFI 等):
iwconfig
5. 我們經常會用到的主要是 iwlist、iwconfig、 iwpriv(沒有全部測試過)
命令行:(連接不需要驗證密碼的熱點)
iwlist mlan0 scan //搜索熱點信息
ap iwconfig mlan0 essid “linksys” //連接熱點
udhcpc -i mlan0 //獲得動態 IP
命令行:(連接需要驗證密碼的熱點)
iwlist mlan0 scan //搜索熱點信息
ap iwconfig mlan0 key xxxxxxxxxx //輸入驗證密碼
iwconfig mlan0 key open //密碼驗證功能打開
iwconfig mlan0 essid “linksys” //連接熱點
udhcpc –i mlan0 //獲得動態 IP
3.1 移植 wap_supplicant 工具
目前可以使用wireless-tools 或wpa_supplicant工具來配置無線網絡。請記住重要的一點是,對無線網絡的配置是全局性的,而非針對具體的接口。
wpa_supplicant是一個較好的選擇,但缺點是它不支持所有的驅動。請瀏覽wpa_supplicant網站獲得它所支持的驅動列表。另外,wpa_supplicant目前只能連接到那些你已經配置好ESSID的無線網絡,它可以讓您連接到那些使用WPA的AP。wireless-tools支持幾乎所有的無線網卡和驅動,但它不能連接到那些只支持WPA的AP。
關于WPA:
WPA是WiFi Protected Access的縮寫,中文含義為“WiFi網絡安全存取”。WPA是一種基于標準的可互操作的WLAN安全性增強解決方案,可大大增強現有以及未來無線局域網絡的數據保護和訪問控制水平。
wpa_supplicant是一個開源項目,已經被移植到Linux,Windows以及很多嵌入式系統上。它是WPA的應用層認證客戶端,負責完成認證相關的登錄、加密等工作。
wpa_supplicant是一個 獨立運行的 守護進程,其核心是一個消息循環,在消息循環中處理WPA狀態機、控制命令、驅動事件、配置信息等。
經過編譯后的 wpa_supplicant源程序可以看到兩個主要的可執行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的關系就是服務和客戶端的關:
后臺運行wpa_supplicant,使用 wpa_cli來搜索、設置、和連接網絡。
3.1.1 wap_supplicant 簡介
在 Linux 移植 iw 工具的時候,我們講過 iw 支持兩種“認證/加密”的方式,這兩種方式分別為:open 與 wep。但是現在很多的無線加密方法都是以 wpa 與 wpa2(AES)方式加密的。那么這里就出現了 iw 工具不能再 wpa 與 wpa2 的無線加密上使用。因此接下來移植一個 wpa_supplicant 的工具:這個工具支持上面介紹到的四種方式:
1? open
2? WEP
3? WPA(TKJP)
4? WAP2(AES)
3.1.2 移植 libopenssl 庫
OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。
OpenSSL被曝出現嚴重安全漏洞后,發現多數通過SSL協議加密的網站使用名為OpenSSL的開源軟件包。OpenSSL漏洞不僅影響以https開頭的網站,黑客還可利用此漏洞直接對個人電腦發起“心臟出血”(Heartbleed)攻擊。據分析,Windows上有大量軟件使用了存在漏洞的OpenSSL代碼庫,可能被黑客攻擊抓取用戶電腦上的內存數據。
下載鏈接:http://distfiles.macports.org/openssl/[](http://distfiles.macports.org/openssl/)
1.? 將下載的 openssl-1.0.2e.tar.gz 壓縮包拷貝至虛擬機解壓。
[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 表示編譯安裝的路徑為當前目錄下的 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 庫拷貝一份到開發板根文件系統 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 種"認證/加密"的庫
下載鏈接:http://w1.fi/wpa_supplicant/[](http://w1.fi/wpa_supplicant/)
(1)將下載好的壓縮包拷貝至虛擬機解壓
[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)拷貝生成的可執行文件到開發板的 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)? 拷貝生成的可執行文件到開發板的 bin 目錄下
[root@XiaoLong sbin]# ls wpa_cli wpa_passphrase wpa_supplicant
[root@XiaoLong sbin]# cp ./* /work/nfs_root/bin/
4.1 測試使用 WIFI 步驟
4.1.1 創建密碼配置文件
在開發板根文件系統/etc/目錄創建 wpa_supplicant.conf 文件 ,輸入以下內容:
# 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 創建網卡控制接口
在開發板終端輸入:
[root@XiaoLong /]#mkdir /var/run/wap_supplicant -p
4.1.3 插入 360wifi 測試
將 360WIFI 插入開板 USB 口,安裝 WIFI 驅動:
[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
查看識別成功的網卡:
[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 啟動網卡
[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
出現上面紅色部分的提示表示連接路由器成功!!
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 配置網卡地址信息
① [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 配置網卡地址信息
① [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 配置網關信息
[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
如果沒有無線網卡的網關信息,需要自己添加一個:
[root@XiaoLong /]# route add default gw 192.168.18.1
4.1.8 ping 外網 IP 測試
前提是當前連接的 WIFI 可以連接互聯網。
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 實現 ping 域名
在/etc/目錄下創建一個 resolv.conf 文件,輸入 DNS 地址,如下:
nameserver 192.168.1.1 nameserver 202.96.134.33
說明:一般寫本地網關就可以了,也就是保留 nameserver 192.168.1.1
也可以直接在串口終端使用命令創建并且寫入內容。如下:
[root@XiaoLong /]# echo nameserver 192.168.1.1 > > /etc/resolv.conf
[root@XiaoLong /]# echo nameserver 202.96.134.33 > > /etc/resolv.conf
開發板中要想 ping 通外網 IP,需要設置默認網關,這個網關必須要和所連接的路由器設置的網關相同(resolv.conf 文件內容一般可以自動獲取,不用手動填)。
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 自動獲取 IP 地址
使用 busybox 的 udhcpc 工具。一般默認的配置都是選中的,為了確保成功,還是需要去確認一下。
1. 首先配置 linux 內核使其支持 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 到根文件系統的/usr/share/udhcpc/default.script 文件中。
如果沒有目錄先創建目錄:
[root@XiaoLong /]#mkdir /usr/share/udhcpc -p
5. 自動獲取 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 自動更新 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 百度測試:
自動獲取 IP 也可以使用第三方其他工具(一般使用 busybox 自帶的即可):
下載 DHCP 源碼,編譯后得到 dhclient 工具,實現 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,然后進入./dhcp-3.1.3/,運行配置./configure,之后生成 work.linux-2.2 文件夾, 進入 work.linux-2.2/client/,輸入 make "CC=arm-linux-gcc -static",將編譯生成 dhclient。
(3) 拷貝生成的 dhclient 到 mini2440 開發板上,為方便使用,可以放在/usr/bin/下;拷貝另外兩個配置文件到開發板,分別是 /dhcp-3.1.3/client/dhclient.conf 和/dhcp-3.1.3/client/scripts/linux 到開發板的/sbin/目錄下。并改名后一個文件為 dhclient-script ,并修改該文件的第一行 #! /bin/bash 為 #! /bin/sh ,保存后,修改權限 chmod +x /sbin/dhclient-script。
(4) 為 eth0 或者 wlan0 配置 dhcp 服務,輸入 dhclient eth0 或者 dhclient wlan0 即可.
4.2.1 開機自動加載連接路由器
可以將以下代碼加載到 etc/profile 文件里或者是/etc/rcS 文件里,開機自動執行。
insmod mt7601Usta.ko #安裝驅動
wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B #啟動網卡
udhcpc -i ra0 #自動獲取 IP 地址--busybox 自帶的工具
5.1 其他工具移植方法
5.1.1 安裝flex工具庫
系統自帶的flex庫版本太低,需要升級!
Flex 是一個高效、免費的開源框架,可用于構建具有表現力的 Web應用程序,這些應用程序利用Adobe Flash Player和Adobe AIR, 可以實現跨瀏覽器、桌面和操作系統。雖然只能使用 Flex 框架構建 Flex應用程序,但Adobe Flash Builder(之前稱為 Adobe Flex Builder?)軟件可以通過智能編碼、交互式遍歷調試以及可視設計用戶界面布局等功能加快開發。
下載鏈接:http://sourceforge.net/projects/flex/files/
將下載的壓縮文件拷貝至虛擬機,解壓,配置,編譯安裝。
[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 項目的一個語法分析器生成器。
GNU Bison是一種通用目的的分析器生成器。它將LALR(1)上下文無關文法的描述轉化成分析該文法的C程序。 一旦你精通Bison,你可以用它生成從簡單的桌面計算器到復雜的程序設計語言等等許多語言的分析器。
將下載好的bison-3.0 .tar.gz壓縮包拷貝到虛擬機解壓,解壓后,進入到解壓后的目錄,配置,編譯,安裝。
[root@XiaoLong bison-3.0]# ./configure
[root@XiaoLong bison-3.0]# make && make install
5.1.3 安裝libnl庫
libnl套件是netlink庫提供api的集合協議基于Linux內核的接口。
Netlink IPC機制主要是在內核和用戶空間之間提供接口。 它被設計為一個更靈活的ioctl的繼任者,主要提供網絡相關的內核配置和監控接口。
下載鏈接:http://www.infradead.org/~tgr/libnl/
將下載后的libnl-3.2.25.tar.gz壓縮包拷貝到虛擬機,解壓,配置,編譯,安裝。
[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 :表示指定編譯安裝的路徑 ---安裝路徑為當前目錄的tmp文件夾
--host=arm-linux :指定編譯器
[root@XiaoLong libnl-3.2.25]# make && make install
5.1.4 拷貝依賴庫
Libnl庫安裝成功之后,在tmp目錄下會生成lib目錄。
1將lib目錄下的文件拷貝一份到系統交叉編譯路徑下的lib目錄里
2將lib目錄下的文件拷貝一份到開發板的根文件系統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
+關注
關注
60文章
7891瀏覽量
263976 -
Linux
+關注
關注
87文章
11225瀏覽量
208911 -
WIFI
+關注
關注
81文章
5286瀏覽量
203275 -
驅動開發
+關注
關注
0文章
130瀏覽量
12062 -
MT7601
+關注
關注
0文章
2瀏覽量
2858
發布評論請先 登錄
相關推薦
評論