mt7601(360二代)wifi-STA移植到itop4412
一、移植準備
- 基本概念
移植之前首先搞清兩個概念 :AP和STA,並且在下載wifi驅動原始碼時注意是STA還是 AP。
Wifi模組包括兩種形式的拓撲結構:Infra(基礎網)和Adhoc(自組網)。
- AP:也就是無線接入點,是一個無線網路建立者,是網路的中心節點。由AP組建,眾 多 STA加入的無線網路就是Infra(基礎網)。這種網路以AP為中心,網路中所有的通 信 都通過AP來轉發。
- STA:連線到無線網路的站點。由兩個及以上STA組建,網路中無AP的無線網路叫做 Adhoc(自組網)。所有的STA都可以直接進行通訊。
下面我們的移植是以STA為例。
2.注意事項
在移植之前另一個要他特別注意的就是,網絡卡選擇,市面上的無線網絡卡驅動(如
原廠驅動在官網可以下載:http://www.mediatek.com/。也可以在CSDN上下載http://download.csdn.net/detail/pchl33/7424755,需要3C幣貌似....。
二、移植步驟
1.從官網http://www.mediatek.com/zh-CN/downloads/mt7601u-usb/
2.修改makefile檔案
①註釋第30行,取消PC平臺。
②取消註釋第49行,SMDK代表 三星開發板平臺。
③第275行,修改linux原始碼路徑以及指定交叉編譯器。
注意此處linux核心原始碼一定要是經過編譯的,不然會報錯,android與Qt的Kernel原始碼是一樣的,編譯方法也相似只需修改配置檔案在這裡不詳細說明如何編譯Kernel。
3.開啟include/rtmp_def.h,修改1604 和1605 行為下面。
4.開啟common/rtusb_dev_id.c修改第42行,新增usb網絡卡的產品id
5.檢視“os/linux/config.mk”檔案,確保“config.mk”檔案中WPA_SUPPLICANT配置 如下圖所示。
6.在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913目錄下執行以下命令編譯原始碼,分別 輸入“make clean”,“make -j2”命令。編譯成功後如下圖,生成可mt7601u.ko。
7.將“/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.ko”拷貝到 開發板任意位置(建議跟RT2870STA放在一起)。在開發板的根檔案系統中建立目錄/etc/Wireless/RT2870STA/ ,將原始碼目錄中的 RT2870STA.dat拷貝到剛才建立的etc/Wireless/RT2870STA/目錄中。
8.插上無線網絡卡看到列印如下
9.載入驅動程式“mt7601Usta.ko”,如下圖。命令:insmod mt7601Usta.ko
10 關閉乙太網0,開啟wlan0.
11 iwlist wlan0 scan檢視附近無線網路。
可以開cell10 中看到ESSID = “hhw”的wifi,這是我自己用手機開的一個熱點wifi.我們可以看到它的各項資訊。包括MAC地址,協議,頻段為2.4GHZ,採用WPA2加密(這個資訊很重要,後面會用到)。
12得知wifi的相關資訊後,我們開始準備連線wifi.修改/etc/wpa_supplicant.conf檔案中的內容。根據上一步得到的資訊配置無線網路。關於wpa_supplicant.conf如何寫,可以百度參考官方歷程,我這裡只簡單配置一下。
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
proto=RSN
key_mgmt=WPA-PSK
ssid="hhw"
#psk="19951105"
psk=3bd7469add2a9b69f39f8a852e2cc6ad99ebae5d99d16ad502c4999172a9200a
}
關於上面的配置簡單介紹一下:
Network裡面是具體配置,SSID為wifi名字,可以通過wpa_passphrase工具來新增,也可以手動編寫。
但是wpa2加密的psk(密碼)必須通過wpa_passphrase來生成。
proto WPA2必須選擇RSN,WPA 選WPA;
key_mgmt為WPA-PSK。
wpa_passphrase格式如下。
wpa_passphrase <yourAPssid> <yourpassphrase> > /etc/wpa_supplicant/wpa_supplicant.conf
13.執行命令wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf 執行命令udhcpc -i wlan0獲取動態IP閘道器DNS。 到此,就可以ping通www.baidu.com了。
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf:
udhcpc -i wlan0:
Ping baidu.com:
14.可以看到,系統會不停列印一些訊息,會影響我們輸入命令,因此需要用如下命令設定一下
系統列印等級:
echo "4 4 1 7" >/proc/sys/kernel/printk
三:自動配置
以上就完成了所有的配置過程,但是每次我們連線wifi都需要完成以下幾個步驟:
1.掛載驅動 #insmod mt7601Usta
2.關閉乙太網0 #ifconfig eth0 down
3.開啟wlan0 #ifconfig wlan0 up
4.載入配置檔案 #wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
5.動態分配IP #udhcpc -i wlan0
這樣很麻煩,所以我們可以把這幾個命令寫入etc/init.d/rcS檔案中。這樣每次開機就會自動執行以上配置命令。
可以看到rcS指令碼中的程式碼片段如上。我們只需增加一個指令碼(關於如何編寫shell指令碼自行百度,這裡只簡單介紹一下)mt7601,然後新增到圖中wifi setting 位置下的這個路徑 /etc/init.d/mt7601
新增路徑完成後,可以把eh0的啟動指令碼遮蔽,不遮蔽也沒關係,因為我們的自動配置指令碼會關閉eth0。
mt7601 Shell指令碼內容如下
#!/bin/sh
echo “starting wifi driver......”
insmod /lib/modules/mt7601/mt7601Usta.ko
sleep 1
ifconfig eth0 down
sleep 1
ifconfig wlan0 up
sleep 1
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
sleep 15
udhcpc -i wlan0
這樣我們重啟的時候就會發現wifi自動連上了,雖然很方便但是如果重啟時無線網絡卡沒有插入,那麼會像下面一樣報錯。
以上就是所有過程,AP模式的編譯和STA相似,就是配置有區別,有時間在更新。