MT7601U-STA驱动程序编译步骤

说明:因为自linux4.2版本以后,mt7601u的驱动已经集成在kernel的linux-4.9.y/drivers/net/wireless/mediatek/mt7601u文件中,hi3516ev200使用的是linux4.9版本,所以我们直接在内核中编译即可;但是在hi3518ev200中使用的是linux-3.4.35,所以我们还需要按照老步骤来自己编译加载驱动(这个步骤就是我们的通用步骤,加载其他驱动也是这种办法)。

1. hi3516ev200加载mt7601u网卡驱动

1.1 配置

开发平台:Ubuntu 20.04
目标平台:Hi3516EV200
目标Linux版本:linux-4.9
交叉编译工具链:arm-himix100-linux-

1.2 设置步骤

(1)首先进入linux4.9的文件夹 执行

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig

然后首先进入Networking support —>Wireless中将cfg80211和mac80211设置为y(注意:不要设置为m,两者是由区别);

为什么需要先进行这个设置? 因为在加载驱动的时候需要有顺序,即一个驱动的几个文件之间是相互依赖的,所以只有先将cfg80211和mac80211驱动加载了,才可以在加载mt7601u的驱动。


(2)再次进入Device Drivers —>Network device support-> Wireless LAN -> MediaTek devices设置为y

(3)保存退出设置然后执行命令行生成uImage镜像文件

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage -j 20

(4) 烧录进入开发板,通过secureCRT拷贝驱动包中mcu/bin/MT7601.bin到/lib/firmware/mt7601u.bin,其中mcu/bin/MT7601.bin不是linux内核中的文件,而是mt7601u驱动包中的文件,此处我们使用的是**[DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2]**驱动文件。

(5)然后reboot重新启动开发板,执行ifconfig -a可以看见eth0、lO、wlan0(这就是mt7601u的网卡名称)不一定是ra0,

然后执行命令ifconfig wlan0 up(开启该网卡),通过ifconfig查看成功开启,具体如下:

Processing /etc/profile... Done/ # random: fast init done
mt7601u 1-1:1.0: EEPROM ver:0c fae:00
ifconfig -a //查看所有网卡
eth0      Link encap:Ethernet  HWaddr 8A:DF:38:C5:14:DC   //以太网与pc端通过网线连接BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)Interrupt:23 lo        Link encap:Local Loopback    //本地回环LOOPBACK  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)wlan0     Link encap:Ethernet  HWaddr 38:01:46:A5:89:9F  //mt7601网卡名称BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)/ # ifconfig wlan0 up
/ # ifconfig
wlan0     Link encap:Ethernet  HWaddr 38:01:46:A5:89:9F  UP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

1.3 出现问题以及解决办法

(1)在进行make menuconfig的时候没有通过交叉编译链,直接通过x86进行配置的kernel,make出来一定是错误的

通过交叉编译链进行配置的话是对arm进行配置,如果通过虚拟机中进行配置的话是对x86架构进行配置;而我们的目标开发板Hi3516ev200属于arm系列,所以得用交叉编译工具链。

直接make menuconfig得来的配置界面.config - Linux/x86_64

通过执行make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- menuconfig 后出现的配置界面,显然是.config - Linux/arm

注意:如果想要直接使得make menuconfig与make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- menuconfig效果一样可以在修改linux 4.9文件中的makefile文件即如下图所示。

(2)没有使用交叉编译工具链所出现的make编译错误

原因:缺少编译的对象,需要加入ARCH=arm

解决办法:执行make ARCH=arm 即可成功运行

(3)缺少MT7601.bin文件,也就是1.2设置步骤中的步骤(4)

解决办法:拷贝驱动包中mcu/bin/MT7601.bin到/lib/firmware/mt7601u.bin

(4)刚开始插入mt7601u的时候开发板没办法识别usb接口出现如下错误

no usb devices; lsusb returns error code 1; /sys/bus/usb/devices: No such file or directory

原因1:没有生成dev设备,因为在/etc/fstab中缺少几句话,所以没办法生成dev设备,其中最主要的是

sysfs  /sys  sysfs defaults,nodev,nosuid 0 0
tmpfs        /dev        tmpfs   defaults    0   0 //临时文件生成,可以没有这句话


原因2:usb物理设备的线太长了(自己接的线),可能会导致信号不是很好,所以出现检测不到usb的情况

解决办法:重新找线长度最好10厘米左右就可以。

(5)由于网卡名字错误,所以出现以下错误

解决办法:ra0 没有这个网卡名称(ra0)是3518中的称呼;通过ifcnfig -a查看名称为wlan0,执行ifconfig wlan0 up

(6)由于linux内核版本不同而造成的现象,因为刚开始移植mt7601u的驱动的时候使用的是3516的板子内核时linux4.9版本(那会不知道该驱动已经嵌入内核中),而**[DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2]**该驱动适配的是linux3.4版本,所以由于linux内核版本的不同在进行编译驱动的时候造成了错误

解决办法:要么你去看懂两个不同版本的内核去修改内核中的函数;要么另辟蹊径比如:我们知道了提示在Linux-4.2以后的版本中已经集成MT7601U芯片的驱动了(drivers/net/wireless/mediatek目录下);如果必须要求在低版本的linux内核上驱动,那么就只能退而求其次,使用官方提供的驱动程序在低版本的内核上进行编译。

2. hi3518ev200加载mt7601驱动

2.1 配置以及参考链接

参考连接:https://blog.csdn.net/Turix/article/details/103848634?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161509908316780271549685%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161509908316780271549685&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v1~rank_blog_v1-1-103848634.pc_v1_rank_blog_v1&utm_term=mt7601

配置:开发平台:Ubuntu 18.04
目标平台:Hi3518EV200
目标Linux版本:linux-3.4.35
交叉编译工具链:arm-hisiv300-linux-

​ MT7601U-STA驱动程序源码(见参考链接):[DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2]

2.2 设置步骤

(1)修改Mikefile文件首先修改目标平台编译配置信息:



其中LINUX_SRC 中的src表示的是source 需要查看的是你的kernel即linux系统的路径source(来源)

CROSS_COMPOLE表示的是交叉编译工具链,此处也可以为交叉编译链的路径。

(2).修改config.mk文件

/os/linux/config.mk文件中针对选中平台的编译添加编译配置,在末尾追加如下配置代码:

ifeq ($(PLATFORM),HI3518)EXTRA_CFLAGS := $(WFLAGS) -I$(RT2870xx_DIR)/include
export EXTRA_CFLAGS
endif至于为什么是这个代码也不是特别懂


(3)开启/Makefile文件中的OSABL = YES 作用是可以生成其他两个.ko文件,如果没有开启只能生成一个.ko文件即mt7601Usta.ko、开启之后会生成另外两个mtutil7601Usta.ko、mtnet7601Usta.ko

(4)修改DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux中两个文件的根据目标内核版本的不同,需要修改Makefile.4.util(针对Linux 2.4) 或者Makefile.6.util(针对Linux 2.6) 文件中的错误:将24行中的“rt_rbus_pci_util.o”修改为“rt_rbus_pci_drv.o”

(5)执行make,最后在编译信息中可以看到生成的3个.ko文件(编译中打印的信息显然是makefile文件打印的,因为程序都没有烧写入开发板,怎么会打印信息),图如步骤(3)所示。

(6)将驱动对应的dat文件拷贝对应目录,因为/etc/Wireless/RT2870STA/RT2870STA.dat 该文件找不到导致的。就没问题了执行如下命令:

/etc # mkdir Wireless
/etc # ls
Wireless    fstab       init.d      mtab        passwd-     protocols   udev
fs-version  group       inittab     passwd      profile     services
/etc # cd Wireless/
/etc/Wireless # mkdir RT2870STA
/etc/Wireless # ls
RT2870STA  //创建文件夹cp RT2870STA.dat  /etc/Wireless/RT2870STA/RT2870STA.dat

(7)将生成的.ko文件通过nfs服务器拷贝入开发板的文件系统中,然后执行如下命令

insmod mtutil7601Usta.ko  //注意顺序不可以改变因为 不同的.ko文件之间有以来关系
insmod mt7601Usta.ko
insmod mtnet7601Usta.koifconfig ra0 up

最后的结果如下:

Jan  1 00:00:03 login[752]: root login on 'ttyS000'
Welcome to HiLinux.
None of nfsroot found in cmdline.
~ # history
-sh: history: not found
~ # ifconfig eth0 192.168.1.12
~ # PHY: himii:01 - Link is Up - 100/Full
mount -t nfs -o nolock 192.168.1.10:/e/nfs /mnt
~ # cd /
/ # ls
bin            init           mknod_console  root           usr
boot           lib            mnt            sbin           var
dev            linuxrc        nfsroot        share
etc            lost+found     opt            sys
home           mkimg.rootfs   proc           tmp
/ # cd mnt
/mnt # ls
1.txt           hello           mt7601u_driver
a.out           mpp             sample_venc
/mnt # cd mt7601u_driver/
/mnt/mt7601u_driver # ls
MT7601.bin         mt7601Usta.ko      mtutil7601Usta.ko
RT2870STA.dat      mtnet7601Usta.ko
/mnt/mt7601u_driver # insmod mtutil7601Usta.ko
/mnt/mt7601u_driver # insmod mt7601Usta.ko
mt7601Usta: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
/mnt/mt7601u_driver # insmod mtnet7601Usta.ko
rtusb init rtusbSTA --->
===>rt2870_probe()!
--> RTMPAllocAdapterBlock
packet> data offset = 152
packet> len offset = 80
packet> cb offset = 24=== pAd = c29ad000, size = 834416 ===--> RTMPAllocTxRxRingMemory
<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
NumEndpoints=8
BULK IN MaxPacketSize = 512
EP address = 0x84
BULK IN MaxPacketSize = 512
EP address = 0x85
BULK OUT MaxPacketSize = 512
EP address = 0x 8
BULK OUT MaxPacketSize = 512
EP address = 0x 4
BULK OUT MaxPacketSize = 512
EP address = 0x 5
BULK OUT MaxPacketSize = 512
EP address = 0x 6
BULK OUT MaxPacketSize = 512
EP address = 0x 7
BULK OUT MaxPacketSize = 512
EP address = 0x 9
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
STA Driver version-3.0.0.3
-->MT7601_Init():
Chip specific bbpRegTbSize=0!
Chip VCO calibration mode = 0!
NVM is EFUSE
Efuse Size=0x1d [Range:1e0-1fc]
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
Allocate a net device with private data size=0!
Allocate net device ops success!
The name of the new ra interface is ra0...
RtmpOSNetDevAttach()--->
<---RtmpOSNetDevAttach(), ret=0
<===rt2870_probe()!
usbcore: registered new interface driver rtusbSTA
/mnt/mt7601u_driver #

2.3 出现问题以及解决办法

(1)这个是驱动文件中出现错误了

解决办法:1)有可能是解压缩出现了问题,重新解压然后重新弄即可

2)有可能是上述步骤中出现了错误,可以重新再来一遍

(2)当把上述步骤弄完之后rt28xx_open return fail,是因为缺少步骤6拷贝文件原因:/etc/Wireless/RT2870STA/RT2870STA.dat 该文件找不到导致的。因为第一个错误而造成后边的错误


解决办法:重新执行步骤6

(3)由于没有关注依赖关系,而造成失败

解决办法:insmod .ko文件的时候是要有顺序的,它们之间是有相互的依赖关系的,按顺序执行.ko文件即可

(4)内核污染

解决办法:可以不必管,不会造成太大的影响 参考的是《01_嵌入式Linux应用开发完全手册_韦东山全系列视频文档全集V2.8》文档P390页

MT7601U-STA驱动程序编译步骤相关推荐

  1. RTL8188EUS驱动程序编译步骤

    说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8188无线网卡传输数据.本文记录自己对编译操作的步骤,以期望帮助到其它的初学者. RTL8188简介 嵌入式应用中可供选择的WIFI ...

  2. RTL8188CUS驱动程序编译步骤

    说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8188无线网卡传输数据.本文记录自己对编译操作的步骤,以期望帮助到其它的初学者. RTL8188介绍 嵌入式应用中可供选择的WIFI ...

  3. RTL8192EU驱动程序编译步骤

    说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8192无线网卡传输数据.本文记录自己对编译操作的步骤,以期望帮助到其它的初学者. RTL8192介绍 嵌入式应用中可供选择的WIFI ...

  4. RTL8192CUS驱动程序编译

    说明 RTL8192CUS的驱动程序和RTL8188CUS是通用的!! 曾使用RTL8192CUS的驱动程序成功驱动RTL8188CUS,所以将过程记录在了RTL8188CUS的博文中. 相关博文请参 ...

  5. 【转】LINUX内核编译步骤详细介绍

    from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...

  6. LINUX内核编译步骤详细介绍

    LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf  Linux-2.6.18.2.tar.bz2 -C /usr/ ...

  7. FFmpeg简介及在vc2010下编译步骤

    FFmpeg是一个开源的多媒体库,最新版本是2.4.3,它的License是LGPL或GPL.FFmpeg可以用来记录.转换数字音频.视频,并能将其转换为流的开源计算机程序.它包括了音/视频编码库li ...

  8. OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤

    OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. SSL是SecureSock ...

  9. 简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 (2014-10-24 10:19:17) 标签: module linux 分类:Linux/Unix 本文将直接了当的带你进入linux的模块编译 ...

最新文章

  1. Sklearn的train_test_split用法
  2. PAT甲级 -- 1079 Total Sales of Supply Chain (25 分)
  3. myisam数据表根据frm文件恢复数据表
  4. LeetCode 1246. 删除回文子数组(区间DP)
  5. 【Python】Windows下Python3虚拟环境搭建
  6. 在线生成抽象话的网页源码
  7. ubuntu下环境变量详解 bashrc, profile, environment
  8. C++Lambda表达式作为参数
  9. matlab 点太多,matlab输出参数太多
  10. 日语学习软件推荐——五十音图APP:AI纠正你的日语发音
  11. 图片验证码识别教程技术原理分析
  12. 数据结构习题集1-8:总结篇
  13. C语言基础知识点复习
  14. 湖北经济学院计算机,湖北经济学院
  15. 【JAVA进阶篇】字符串的详细介绍
  16. GDP越高就越幸福吗?用Python分析《世界幸福指数报告》后我们发现…
  17. ubuntu conf误删除的问题
  18. dspace安装及应用
  19. 论文中写伪代码的工具
  20. 7段均衡器最佳参数_均衡器参数详解(精)

热门文章

  1. 2022-2028全球车顶升降系统行业调研及趋势分析报告
  2. 【现货】AP6317 同步3A锂电充电芯片 带短温度保护
  3. 1695. 果壳游戏
  4. C语言的cos(x)函数
  5. oracle根据记录添加bsm,【运维监控系统 PIGOSS BSM 】免费在线试用_软件库_选软件网...
  6. i31005g1和锐龙r5 3500u哪个好
  7. 从茅台和可乐,看看企业“护城河”
  8. 太诱电容不同系列区别
  9. android u盘广播路径,android6.0 外部存储设备插拔广播以及获取路径(U盘)
  10. RockChip3126-8.1SDK去掉相机快门拍照声