麒麟操作系统无法驱动MT7601U芯片USB网卡的处理

MT7601U是USB网卡常见采用的方案,在4.x以下,该驱动需要手动编译,在4.0以后kernel已经集成了MT7601U的驱动,但目前已知在4.15及更高版本的内核中驱动有bug导致硬件无法识别(原文链接:https://github.com/kuba-moo/mt7601u/issues/72)
麒麟V10 SP1桌面内核5.x,插入网卡dmesg报错如下:

[  693.151175] mt7601u 1-2:1.0: ASIC revision: 76010001 MAC revision: 76010500
[  693.193318] mt7601u 1-2:1.0: Firmware Version: 0.1.00 Build: 7640 Build time: 201302052146____
[  696.700844] mt7601u 1-2:1.0: Vendor request req:02 off:0a44 failed:-110
[  700.576649] mt7601u 1-2:1.0: Vendor request req:07 off:09a8 failed:-110
[  704.067687] mt7601u 1-2:1.0: Vendor request req:02 off:09a8 failed:-110
[  707.554951] mt7601u 1-2:1.0: Vendor request req:07 off:0734 failed:-110
[  711.072891] mt7601u 1-2:1.0: Vendor request req:42 off:0230 failed:-110
[  714.595344] mt7601u 1-2:1.0: Vendor request req:07 off:0080 failed:-110
[  718.113453] mt7601u 1-2:1.0: Vendor request req:02 off:0080 failed:-110
[  721.633104] mt7601u 1-2:1.0: Vendor request req:02 off:0080 failed:-110
[  721.633156] mt7601u: probe of 1-2:1.0 failed with error -110
[  721.633206] usbcore: registered new interface driver mt7601u

处理办法,修改驱动源码包中的mcu.c,注释L450,重新编译内核模块,将原模块加入blacklist并设置新模块的开机加载
1.下载源码包,麒麟源中不提供linux-source包,从社区拉一个同版本的即可
解压到/usr/src

root@localhost:~# tar -xvzf /home/kylin/linux-5.10.1.tar.gz -C /usr/src

2.修改源文件

root@localhost:~# cd /usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u/
root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# vim mcu.c
449         //mt7601u_vendor_reset(dev);

3.编译内核模块

root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# make -C /lib/modules/$(uname -r)/build/ M=$(pwd) modules

4.修改权限,复制到modules目录

root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# chmod +x mt7601u.ko
root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# cp mt7601u.ko /lib/modules/5.10.0-5-generic/mt7601ufix.ko

5.重建依赖关系,手动加载模块

root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# depmod -a
root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# modprobe mt7601ufix 
modprobe: ERROR: could not insert 'mt7601ufix': Permission denied

执行过程中可能会出现无法访问的报错,因为在麒麟桌面系统提供了类似selinux的文件标记安全机制,在图形化界面-安全中心把所有控制选项关闭掉
在这里插入图片描述

root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# modprobe mt7601ufix 
root@localhost:/usr/src/linux-5.10.1/drivers/net/wireless/mediatek/mt7601u# lsmod | grep "7601"
mt7601u               118784  0
mac80211              962560  1 mt7601u
cfg80211              843776  2 mt7601u,mac80211

重新插拔网卡,应该可以看到硬件识别,环缓冲区没有报错
在这里插入图片描述
后续如果需要替换原驱动,需要在驱动的配置文件加入blacklist,新驱动的开机自启,将配置文件添加到/etc/modules-load.d即可


版权声明:本文为m0_37407903原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。