1. 程式人生 > >mt7601(360二代)wifi-STA移植到itop4412

mt7601(360二代)wifi-STA移植到itop4412

一、移植準備

  1. 基本概念

  移植之前首先搞清兩個概念 AP和STA,並且在下載wifi驅動原始碼時注意是STA還是 AP。

       Wifi模組包括兩種形式的拓撲結構:Infra(基礎網)和Adhoc(自組網)。

  • AP:也就是無線接入點,是一個無線網路建立者,是網路的中心節點。由AP組建,眾 多 STA加入的無線網路就是Infra(基礎網)。這種網路以AP為中心,網路中所有的通 信 都通過AP來轉發。
  • STA:連線到無線網路的站點。由兩個及以上STA組建,網路中無AP的無線網路叫做 Adhoc(自組網)。所有的STA都可以直接進行通訊。

下面我們的移植是以STA為例。

2.注意事項

在移植之前另一個要他特別注意的就是,網絡卡選擇,市面上的無線網絡卡驅動(如

TP-link)大多是不開源的,所以在選擇一款無線網絡卡時一定要注意它是否有對應的驅動,驅動可以在github上找,如果找不到或者怕折騰就按照我下面的步驟,選擇MTK原廠的驅動。原廠驅動支援的無線網絡卡:我是測過的是360二代,mt7601u,是支援的。TP-link不支援,360三代也不支援。

原廠驅動在官網可以下載:http://www.mediatek.com/。也可以在CSDN上下載http://download.csdn.net/detail/pchl33/7424755,需要3C幣貌似....。

二、移植步驟

1.從官網http://www.mediatek.com/zh-CN/downloads/mt7601u-usb/

下載驅動檔案(國內可能比較慢),並copy到工作路徑,然後解壓,進去原始碼路徑。


2.修改makefile檔案

  ①註釋第30行,取消PC平臺。

  

②取消註釋第49行,SMDK代表 三星開發板平臺。

 

③第275行,修改linux原始碼路徑以及指定交叉編譯器。

 

注意此處linux核心原始碼一定要是經過編譯的,不然會報錯,androidQtKernel原始碼是一樣的,編譯方法也相似只需修改配置檔案在這裡不詳細說明如何編譯Kernel

3.開啟include/rtmp_def.h,修改1604 1605 行為下面。

 

4.開啟common/rtusb_dev_id.c修改第42行,新增usb網絡卡的產品id

和裝置ID關於如何檢視網絡卡的id,插上網絡卡,在命令列中輸入lsusb,可以看到裝置的id,找到網絡卡的即可。並仿照其他的格式,在下圖新增屬於你的無線網絡卡的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裡面是具體配置,SSIDwifi名字,可以通過wpa_passphrase工具來新增,也可以手動編寫。

但是wpa2加密的psk(密碼)必須通過wpa_passphrase來生成。

proto   WPA2必須選擇RSN,WPA 選WPA;

key_mgmtWPA-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。 到此,就可以pingwww.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相似,就是配置有區別,有時間在更新。