注意:本博客来源于朱老师海思项目开车第五季部分,本博客仅供学习和交流
虚拟机: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行
cp -f $(RT28xx_DIR)/os/linux/mt$(MODULE)sta.ko /自己修改的输出路径 2>/dev/nul l || :
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 || :
root@czp-PC:/home/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913#
我把导出的目录修改为/home/nfs_server,所以我的ko文件导出在/home/nfs_server目录里面
root@czp-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的
root@czp-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 <paul_lin@ralinktech.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测试