手里那块老旧的MT7601U芯片USB网卡在Windows上即插即用,换到Ubuntu 22.04却成了"砖头"?别急着下单新设备,这很可能是内核API变更导致的兼容性问题。作为从Ubuntu 14.04时代就开始折腾各种冷门硬件的"老司机",我完整经历了Linux内核从3.x到5.x的演进过程,今天就来分享针对现代内核的实战解决方案。
首先把USB网卡插入电脑,打开终端执行:
bash复制lsusb | grep -i mediatek
典型输出应包含类似ID 148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapter的信息。如果看到148f:7601这个供应商/产品ID组合,就能确定是MT7601U芯片。
注意:部分国产网卡可能显示为"水星"或"迅捷"品牌,但核心芯片相同
原始驱动代码发布于2013年,针对的是Linux 3.x内核。现代内核主要存在三方面变化:
int变为kuid_t/kgid_t结构体kmalloc等函数的参数规范变更register_netdev等API的调用方式更新不建议使用原始3.0.0.4版本,推荐采用社区维护的补丁版:
bash复制wget https://github.com/kuba-moo/mt7601u/archive/refs/heads/master.zip
unzip master.zip
cd mt7601u-master
对比原始驱动,主要修改集中在以下几个文件:
| 文件路径 | 修改内容 | 内核版本影响 |
|---|---|---|
| os/linux/rt_linux.c | 处理kuid_t类型转换 | ≥3.5 |
| common/rtusb_dev.c | 更新USB设备注册逻辑 | ≥4.0 |
| include/os/rt_linux.h | 调整内存分配宏定义 | ≥5.0 |
bash复制sudo apt update
sudo apt install build-essential linux-headers-$(uname -r) dkms
创建DKMS配置文件/usr/src/mt7601u-1.0/dkms.conf:
code复制MAKE="make -C /lib/modules/${kernelver}/build M=${dkmsTree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules"
CLEAN="make -C /lib/modules/${kernelver}/build M=${dkmsTree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean"
BUILT_MODULE_NAME[0]="mt7601u"
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless"
PACKAGE_NAME="mt7601u"
PACKAGE_VERSION="1.0"
REMAKE_INITRD=yes
然后执行:
bash复制sudo dkms add mt7601u/1.0
sudo dkms build mt7601u/1.0
sudo dkms install mt7601u/1.0
如果DKMS方式失败,可尝试传统编译:
bash复制make
sudo cp src/mt7601u.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
sudo depmod -a
sudo modprobe mt7601u
编译错误:error: implicit declaration of function
#include <linux/uaccess.h>加载失败:Unknown symbol in module
sudo dkms autoinstall重新构建依赖连接不稳定:频繁断线
sudo ifconfig wlan0 mtu 1400编辑/etc/modprobe.d/mt7601u.conf:
code复制options mt7601u disable_usb_sg=1
options mt7601u sw_encryption=1
options mt7601u beacon_int=100
然后执行:
bash复制sudo systemctl restart NetworkManager
内核升级后驱动失效?试试这个自动化脚本update-mt7601u.sh:
bash复制#!/bin/bash
VERSION=$(uname -r)
sudo dkms remove mt7601u/1.0 -k $VERSION
sudo dkms install mt7601u/1.0 -k $VERSION
sudo modprobe -r mt7601u && sudo modprobe mt7601u
保存后添加执行权限:
bash复制chmod +x update-mt7601u.sh
sudo mv update-mt7601u.sh /usr/local/bin/
现在每次内核更新后,只需执行sudo update-mt7601u.sh即可自动重建驱动。