usbwifi網卡mt7601u驅動配置

目錄結構說明

一、環境說明

1、環境介紹

2、確認usbwifi網卡信息

3、相關驅動

二、配置編譯驅動

0、編譯前檢查host配置

1、通過menuconfig配置7601驅動

2、執行make編譯

三、測試驅動

1、掛載mt7601u驅動

2、 出現問題排查

四、安裝wifi配置工具

1、wifi配置工具介紹

2、通過buildroot配置wpa_supplicant工具

五、wpa_supplicant工具使用

一、環境說明

1、環境介紹

?? 首先這里我們需要安裝一些基礎的編譯環境,安裝tftp服務器,安裝nfs服務器等,這里我們可以參考文章《orangpione利用usb共享網絡(RNDIS)實現tftp加載內核掛載到NFS根文件系統》中的環境準備章節,自行安裝相關服務,在這里不展開。后續的開發是基于tftp和nfs傳輸的條件下進行,如果沒有實現相關傳輸,也可以通過燒錄sd卡的形式進行。

2、確認usbwifi模塊信息

??1. 確認usbwifi網卡的相關產品信息,我們可以通過把網卡插入windowns,且驅動后查詢相關驅動信息。這里我們主要是為了獲取usb設備的VID和PID,如下圖,可知USBWiFi的VID是0x148f,而PID是0x7601


windows驅動

?? PID/VID唯一標識一個設備,HardwareID是為了給系統識別的 ,他是根據PID/VID而生成的。這個與序列號沒什么關系,序列號一般都是廠家固化到芯片中的信息而已。GUID只是為了標志你安裝的設備是屬于一個什么類當中,這個類可以顯示再設備管理器中。比如:你可以定義一個類,當然這個類有與系統中任何類都不同的GUID,然后選擇一個圖標和類名,就可以同網卡等其他設備一起顯示在設備管理器下的根目錄中了
??根據USB規范的規定,所有的USB設備都有供應商ID(VID)和產品識別碼(PID),主機通過不同的VID和PID來區別不同的設備,VID和PID都是兩個字節長,其中,供應商ID(VID)由供應商向USB執行論壇申請,每個供應商的VID是唯一的,PID由供應商自行決定,理論上來說,不同的產品、相同產品的不同型號、相同型號的不同設計的產品最好采用不同的PID,以便區別相同廠家的不同設備。
??VID和PID通常情況下有兩種存儲方式,第一種是主控生產商的VID和PID,存儲在主控的bootcode中;第二種是設備生產商的VID和PID,該VID和PID存儲在主控外部的非易失性存儲設備中(EEPROM或Flash)的設備固件中,當USB設備連接主機時,如果固件中有設備生產商的VID和PID,會將該VID和PID報告給主機,而忽略主控生產商的VID和PID。所以理論上一個USB存儲設備的VID應該是設備生產商的VID,而不是主控生產商的VID,這兩個VID應該是不同的(主控生產商自己生產的設備除外)。
??由于VID和PID重復并不會對產品的使用帶來嚴重影響,很多USB設備生產商(山寨廠居多)為了方便,并不會向USB執行論壇申請自己的VID,而是依然沿用主控生產商的VID或隨便向產品寫入VID和PID;同時,正規廠家只需要申請VID,PID由廠家自行確定,所以存在相同型號的產品,可能采用了不同的主控(商業需要,很正常),而他們的PID是一樣的,基于上述原因通過VID和PID就不能準確識別USB設備的主控型號,這個問題大家在使用USB設備的過程中需要注意。

3、相關驅動

  1. 確定我們的設備是mt7601u后,我們先到官網了解相關信息,官網地址https://www.mediatek.com/products/broadbandWifi/mt7601u,其中可以看到里面有linux下的驅動,官方給出的驅動源碼連接為https://d86o2zu8ugzlg.cloudfront.net/mediatek-craft/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2,官方的驅動源碼看起來有點老了,是2013年9月13日的包,我們需要再確認下有沒有新的驅動更新,畢竟現在內核都5.7了。
  2. 在github倉庫中找到https://github.com/kuba-moo/mt7601u
    有新的mt7601驅動,而且按照其描述信息,已經支持到內核4.2了,但是還不是最新的驅動,找了好多資料但是后面沒有找到更新的相關信息了。
  3. 很偶然的情況下,在kernel的源碼make menuconfig搜索7601的時候發現,內核本身竟然已經支持有mt7601u的驅動了,直接配置好,后續開始編譯

二、配置編譯驅動

0、編譯前檢查host配置

如果沒有host驅動部分,很多usb外設都不能工作,lsusb沒有任何反應

Support for Host-side USB--->CONFIG_USB=y 
Inventra Highspeed Dual Role Controller--->CONFIG_USB_MUSB_HDRC
    --->MUSB Mode Selection (Dual Role mode)
        --->Dual Role mode--->CONFIG_USB_MUSB_DUAL_ROLE

1、通過menuconfig配置7601驅動

  1. 在內核源碼目錄執行make menuconfig(前提已經配置了相關的arch和gcc),進入搜索界面搜索7601,發現7601的相關相關配置路徑為Device Drivers--->Network device support--->Wireless LAN--->MediaTek devices--->MediaTek MT7601U (USB) support
    搜索7601

    7601u
  2. 在配置7601模塊時發現,還需要配置mac80211和cfg80211驅動模塊,其配置路徑為Networking support--->Wireless下的cfg80211 - wireless configuration API 和Generic IEEE 802.11 Networking Stack (mac80211)
    80211

2、執行make編譯

  1. 執行make modules -j4編譯,或者通過make M=drivers modules -j4編譯net目錄下的modules,編譯完成后,會在源碼的下面位置出現ko文件
net/wireless/cfg80211.ko
net/mac80211/mac80211.ko
drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
  1. 通過執行make modules_install INSTALL_MOD_PATH=rootfs,把模塊安裝到指定的目錄中去,賺了我們安裝到我們的nfs根文件系統中,INSTALL_MOD_PATH指定安裝目錄。安裝后可以到我們指定的安裝目錄下查看是否有上面的ko文件,具體目錄如下
lib/modules/5.7.7/kernel/net/wireless/cfg80211.ko
lib/modules/5.7.7/kernel/net/mac80211/mac80211.ko
lib/modules/5.7.7/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
  1. 由于我這里是直接安裝到,nfs根文件系統中,這里我們只需要更新zImage和dtb文件到tftp服務目錄下,然后重啟開發板,就可以直接進入系統,進行模塊的加載測試了。(用nfs開發比較方便可以省去燒錄的步驟,哈哈哈)

三、測試驅動

1、掛載mt7601u驅動

  1. 在開發板登錄系統,通過命令modprobe -l | grep mt7601查看是否存在mt7601的內核依賴關系
  2. 通過命令modprobe mt7601u加載7601的usbwifi驅動
  3. 插入usbwifi模塊,會顯示如下信息,顯然這里出錯了,但是為什么呢
[   92.490546] usb 3-1: reset high-speed USB device number 2 using ehci-platform
[   92.693611] mt7601u 3-1:1.0: ASIC revision: 76010001 MAC revision: 76010500
[   92.702041] mt7601u 3-1:1.0: Direct firmware load for mt7601u.bin failed with error -2
[   92.710670] mt7601u: probe of 3-1:1.0 failed with error -2

2、 出現問題排查

  1. 出現問題后,谷歌一番后,發現這個問題其實是由于,開發板的文件系統缺少mt7606u.bin文件導致的,這里參考https://github.com/kuba-moo/mt7601u,我們從官方的源碼的src/mcu/bin把其MT7601.bin文件拷貝到我們開發板的nfs系統的/lib/firmware目錄下,并重命名問mt7601u.bin文件
“Download the vendor driver (see section below) and copy file MT7601U.bin to /lib/firmware”   
 cp src/mcu/bin/MT7601.bin /lib/firmware/mt7601u.bin
  1. 在虛擬機拷貝完后,因為nfs系統,我們可以直接到開發板先通過命令,modprobe -r mt7601u移除之前的mt7601u模塊
  2. 我們再次重新加載modprobe mt7601u模塊,如無意外可以輸出下面的信息,這里提示failed to load regulatory.db這個數據庫,但是發現對于驅動沒有影響,我就忽略了
[ 5998.967033] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 5998.976850] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 5998.985609] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 5998.994261] cfg80211: failed to load regulatory.db
[ 5999.007632] usbcore: registered new interface driver mt7601u
  1. 通過ifconfig -a查看網卡接口,這里可以看到wlan0,有的可能是ra0,則表示驅動成功
wlan0     Link encap:Ethernet  HWaddr 20:0D:B0:1D:56:D0  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B

四、安裝wifi配置工具

1、wifi配置工具介紹

??wpa_supplicant本是開源項目源碼,被谷歌修改后加入Android移動平臺,它主要是用來支持WEP,WPA/WPA2和WAPI無線協議和加密認證的,而實際上的工作內容是通過socket(不管是wpa_supplicant與上層還是wpa_supplicant與驅動都采用socket通訊)與驅動交互上報數據給用戶,而用戶可以通過socket發送命令給wpa_supplicant調動驅動來對WiFi芯片操作。 簡單的說,wpa_supplicant就是WiFi驅動和用戶的中轉站外加對協議和加密認證的支持。
??目前可以使用wireless-tools 或wpa_supplicant工具來配置無線網絡。請記住重要的一點是,對無線網絡的配置是全局性的,而非針對具體的接口。
??wpa_supplicant是一個較好的選擇,但缺點是它不支持所有的驅動。請瀏覽wpa_supplicant網站獲得它所支持的驅動列表。另外,wpa_supplicant目前只能連接到那些你已經配置好ESSID的無線網絡。wireless-tools支持幾乎所有的無線網卡和驅動,但它不能連接到那些只支持WPA的AP。
??經過編譯后的wpa_supplicant源程序可以看到兩個主要的可執行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的關系就是服務和客戶端的關系:后臺運行wpa_supplicant,使用wpa_cli來搜索、設置、和連接網絡。

2、通過buildroot配置wpa_supplicant工具

  1. 通過build配置wpa_supplicant,比較簡單,因為所有的依賴以及要處理的都由buildroot幫忙處理了,我們只需要配置好wpa_supplicant功能即可。
  2. 執行命令./build.sh menuconfig(這里的腳本是之前章節定義好的),配置wpa_supplicant功能開啟
    路徑為:```Target packages--->Networking applications--->wpa_supplicant,配置如圖(同時配置了wpa_cli)
    wpa_supplicant
  3. 執行命令./build.sh -j4,編譯wpa_supplicant,由于buildroot會直接編譯出wpa_supplicant的可這行文件,并拷貝到根文件目錄(也是我的nfs根目錄),其文件具體路徑為build/wpa_supplicant-2.9/wpa_supplicant/wpa_supplicant,在跟文件系統的目錄在/usr/sbin/wpa_supplicant
  4. 由于開發板掛載的nfs根文件系統就是buildroot編譯的根文件系統,所以可以直接在開發板上輸入wpa用tap補全出wpa_supplicant,則說明wpa_supplicant安裝完成。
  5. 如果喜歡編譯源碼的朋友可以參考https://www.cnblogs.com/y4247464/p/13373143.html進行wpa_supplicant的編譯,可以通過http://w1.fi/releases/wpa_supplicant-2.9.tar.gz下載2.9版本或者其他版本的wpa_supplicant

五、wpa_supplicant工具使用

  1. vi /etc/wpa_supplicant.conf,修改wpa_supplicant配置文件,主要配置賬號密碼和加密方式
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1

network={
  ssid="ssid"
  psk="passwd"
  proto=WPA
  key_mgmt=WPA-PSK
}
  1. 通過命令ifconfig wlan0 up啟動wifi網口
  2. 通過命令wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0啟動wpa_supplicant 工具,出現類似授權信息
[   45.102774] wlan0: authenticate with 60:3a:7c:56:92:d3
[   45.175326] wlan0: send auth to 60:3a:7c:56:92:d3 (try 1/3)
[   45.182540] wlan0: authenticated
[   45.190692] wlan0: associate with 60:3a:7c:56:92:d3 (try 1/3)
[   45.202769] wlan0: RX AssocResp from 60:3a:7c:56:92:d3 (capab=0x1411 status=0 aid=4)
[   45.243124] wlan0: associated
  1. 通過命令wpa_cli -iwlan0 status,查看wlan相關的信息
bssid=60:3a:7c:56:92:d3
freq=2462
ssid=TP-LINK_104
id=0
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA-PSK
wpa_state=COMPLETED
address=20:0d:b0:1d:56:d0
uuid=5ed4ac07-94e1-5153-8b79-5fd575d8c183
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。