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. log4j个人使用整理
  2. 杂篇-从整理文件发起的杂谈[-File-]
  3. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测
  4. 计算机图形学在数学中的应用,计算机图形学的数学工具与C#实现:数学C
  5. Session的底层实现原理
  6. 阿里云esc服务器和mysql_解决远程链接阿里云esc服务器的mysql数据库
  7. 蓝桥杯2017初赛-打印大X-找规律
  8. docker部署nessus+awvs
  9. FCKeidtor的toolbarset的设置
  10. 3.5 訪问者模式(5.11)
  11. 文件和目录:access函数
  12. 查询系统--基于Solr4.9.0实现
  13. HashMap的工作原理深入再深入
  14. 排序算法 - 快速排序(java)
  15. 从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践
  16. 在Sqlite中通过Replace来实现插入和更新
  17. python应用程序无法正常启动0xc0000142_电脑提示应用程序错误无法正常启动0xc0000142的解决办法...
  18. BOS EAS 实体增加字段,关联核算项目
  19. 王菲 单行道 今天忽然听
  20. 三、C语言的数据类型—浮点型数据

热门文章

  1. 苹果电脑mp3转gif_Mac/OSX上超级好用的视频剪切,视频截图,视频转换GIF动画的工具...
  2. BM00010——|bookmarks|存储基础知识|
  3. oracle根据记录添加bsm,【运维监控系统 PIGOSS BSM 】免费在线试用_软件库_选软件网...
  4. 微信小程序去水印怎么看视频
  5. Oracle ORA-01652: unable to extend temp segment by 256 in tablespace BATCH_TEMP02
  6. ae和php哪个容易学,PS、AI、AE、PR哪个简单可以先学?
  7. TP5100(2A开关降压 8.4V/4.2V锂电池 充电器芯片)
  8. spring5 (一) 属性配置-XML方式
  9. 网页嵌入iframe底部的空白
  10. 用RVI方法,对iOS进行抓包