注意:本部落格來源于朱老師海思項目開車第五季部分,本部落格僅供學習和交流
虛拟機:VMware15.5
系統:Ubuntu18.04
平台:hisi3518ev300
MT7601驅動,包括有station模式和access point模式的:https://pan.baidu.com/s/1i_hPImFTZN-afyHh4f54bQ
提取碼:vcge
工作在sta模式
1.解壓檔案
tar -jxvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
2.修改Makefile
(1)把49行的PLATFORM = SMDK注釋掉
(2)在67行添加:PLATFORM = HISI_3518E
(3)繼續搜尋SMDK,在276行找到,仿照相應的格式,在282空行處添加
ifeq ($(PLATFORM),HISI_3518E)
LINUX_SRC = /home/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y
CROSS_COMPILE = arm-hisiv300-linux-
endif
1.注意修改自己核心源碼樹路徑
2.如果交叉編譯工具鍊沒有export出來的話就要添加絕對路徑。
3.修改./os/linux/config.mk
(1)搜尋一下HAS_WPA_SUPPLICNAT,确認一下
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
(2)搜尋SMDK,然後仿照格式在其下面添加
ifeq ($(PLATFORM),HISI_3518E)
EXTRA_CFLAGS := $(WFLAGS)
endif
4.修改ko檔案的輸出路徑,如果不改則在目前目錄
(1)打開Makefile
(2)修改439行
5.直接make
發現報錯
make[1]: 進入目錄“/home/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y”
CC [M] /home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o
arm-hisiv300-linux-gcc: 錯誤: unrecognized command line option ‘-m64’
arm-hisiv300-linux-gcc: 錯誤: unrecognized command line option ‘-mno-red-zone’
arm-hisiv300-linux-gcc: 錯誤: unrecognized command line option ‘-mcmodel=kernel’
arm-hisiv300-linux-gcc: 錯誤: unrecognized command line option ‘-maccumulate-outgoing-args’
解決:
修改主目錄的Makefile,
在406行,把FREESCALEE8377改成HISI_3518E
在407行,改成ARCH=arm,其他不改
6.make
LD [M] /home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.mod.o
LD [M] /home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.ko
make[1]: 離開目錄“/home/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y”
cp -f /home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.ko /home/nfs_server 2>/dev/null || :
[email protected]-PC:/home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913#
我把導出的目錄修改為/home/nfs_server,是以我的ko檔案導出在/home/nfs_server目錄裡面
[email protected]-PC:/home/nfs_server# ls -l mt7601Usta.ko
-rw-r--r-- 1 root root 909244 10月 24 15:38 mt7601Usta.ko
7.确認
确認子產品的vermagic資訊 。版本是3.4.35的
[email protected]-PC:/home/nfs_server# modinfo mt7601Usta.ko
filename: /home/nfs_server/mt7601Usta.ko
version: 3.0.0.3
description: RT2870 Wireless Lan Linux Driver
author: Paul Lin <[email protected].com>
license: GPL
srcversion: B2632BD2D7AD40A63B72D9E
alias: usb:v148Fp760Bd*dc*dsc*dp*ic*isc*ip*
alias: usb:v148Fp7601d*dc*dsc*dp*ic*isc*ip*
alias: usb:v148Fp6370d*dc*dsc*dp*ic*isc*ip*
alias: usb:v148Fp7650d*dc*dsc*dp*ic*isc*ip*
depends:
vermagic: 3.4.35 mod_unload ARMv5 p2v8
parm: mac:rt28xx: wireless mac addr (charp)
8.改名字
現在insmod裝載驅動得到的網卡是ra0,可以通過修改驅動來改名
進入
vim include/rtmp_def.h
搜尋ra,都改成wlan即可。
最後回到根目錄ls重新make一次獲得新的ko檔案
9.複制RT2870STA.dat
在開發闆上建立路徑
/etc/Wireless/RT2870STA
,把RT2870STA.dat複制到這個檔案夾裡面
cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
其實大部分的步驟在檔案夾的README_STA_usb中是有提及到的,可以一邊參考這裡的步驟一邊對照README_STA_usb進行操作。
工作在ap模式
1.解壓後進入主目錄的Makefile
(1)把PLATFORM=pc注釋掉,在後面新增PLATFORM=HISI_3518E
(2)搜SMDK,在270行,以它的格式為藍本,然後在下面複制一份進行修改,
ifeq ($(PLATFORM),HISI_3518E)
LINUX_SRC = /home/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y
CROSS_COMPILE = arm-hisiv300-linux-
export ARCH=arm
endif
(3)到399行,把FREESCALE8377改成 HISI_3518E,ARCH=arm
2.make
報錯
CC [M] /home/MT7601_driver/ap/MT7601U_LinuxAP_3.0.0.1_20130802/os/linux/../../os/linux/rt_profile.o
/home/MT7601_driver/ap/MT7601U_LinuxAP_3.0.0.1_20130802/os/linux/../../os/linux/rt_profile.c:26:23: 緻命錯誤: rt_config.h:沒有那個檔案或目錄
解決
進入os/linux目錄下,打開config.mk檔案
搜尋SMDK,仿照它的格式,在其下面添加
ifeq ($(PLATFORM),HISI_3518E)
EXTRA_CFLAGS := $(WFLAGS)
endif
3.make
最終獲得的ko檔案在os/linux下,也可以參照上面的方式修改makefile,進而修改ko檔案的輸出路徑
4.修改RT2870AP.dat
在開發闆上建立路徑
/etc/Wireless/RT2870AP
,把RT2870AP.dat複制到這個檔案夾裡面
修改項目
SSID=MT7601AP_WPA(這裡的名字是在pc機上看到的連接配接ssid名)
AuthMode=WPA2PSK(加密方式)
EncrypType=TKIP;AES
WPAPSK=1234567890(這個是密碼)
5.insmod
/mnt # insmod mt7601Uap.ko
rtusb init rt2870 --->
=== pAd = c2f14000, size = 866712 ===
<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x8
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x4
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x5
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x6
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x7
RTMP_COM_IoctlHandle():pAd->BulkOutEpAddr=0x9
NVM is EFUSE
Endpoint(8) is for In-band Command
Endpoint(4) is for WMM0 AC0
Endpoint(5) is for WMM0 AC1
Endpoint(6) is for WMM0 AC2
Endpoint(7) is for WMM0 AC3
Endpoint(9) is for WMM1 AC0
Endpoint(84) is for Data-In
Endpoint(85) is for Command Rsp
usbcore: registered new interface driver rt2870
6.設定ip
/mnt # ifconfig ra0 192.168.3.123
FW Version:0.1.00 Build:7640
Build Time:201302052146____
ILM Length = 45380(bytes)
DLM Length = 0(bytes)
Loading FW....
#
RTMP_TimerListAdd: add timer obj c2fa2cd4!
RTMP_TimerListAdd: add timer obj c2f17f70!
RTMP_TimerListAdd: add timer obj c2f17b5c!
RTMP_TimerListAdd: add timer obj c2f17f3c!
…………(省略一些,太長了,調試資訊)
cfg_mode=9
cfg_mode=9
wmode_band_equal(): Band Equal!
APSDCapable[0]=0
APSDCapable[1]=0
…………(省略一些,太長了,調試資訊)
key length(0) or Type(0)
Key2Str is Invalid key length(0) or Type(0)
Key3Str is Invalid key length(0) or Type(0)
Key4Str is Invalid key length(0) or Type(0)
1. Phy Mode = 14
2. Phy Mode = 14
NVM is Efuse and its size =1d[1e0-1fc]
ERROR!!! MT7601 E2PROM: WRONG VERSION 0xd, should be 12
3. Phy Mode = 14
AntCfgInit: primary/secondary ant 0/1
MCS Set = ff 00 00 00 01
Main bssid = 00:e0:2d:4a:41:7c
<==== rt28xx_init, Status=0
0x1300 = 00064320
RTMPDrvOpen(1):Check if PDMA is idle!
RTMPDrvOpen(2):Check if PDMA is idle!
7.用手機搜一下網絡
根據第四步設定的ssid名字和psk
8.設定pc機的ip位址
ping測試