Arm飞牛手动编译mt7601u无线网卡模块(针对Linux 6.12.41-trim内核)

最近购买了一块明创控能 IOT-MKC3568-Main-v1.1开发板(基于RK3568-EVB1-DDR4-V10设计),但是这个开发板没有任何资料支持,连明创控能的官网都无法访问。经过一段时间的逆向研究,初步适配了Arm版本的飞牛v1.0.0固件,但开发板上的两个网口目前还处于无法使用的状态,设备树的适配仍在缓慢推进。

1
2
3
4
5
6
7
8
9
10
dutyc@MKC3568:/$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: end1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
3: end0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether _ brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether _ brd _
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
# 可以看到end0和end1都是未连接状态

于是决定先插上USB无线网卡初步测试飞牛的功能完整性(我的网卡为MT7601U芯片方案)。可惜arm飞牛并没有编译MT7601U模块,看来只能自行编译了。

注意:由于开发板网口无法使用,编译时需要下载源码,此时要依赖互联网连接。不用着急,用数据线将开发板的USB-HOST口和手机连接,通过安卓手机的USB网络共享功能就可以让开发板实现联网,兼容性不错

通过串口连接进入arm飞牛的控制台,查看内核信息:

1
2
3
4
5
6
root@MKC3568:/# uname -a
Linux MKC3568 6.12.41-trim #1 SMP PREEMPT Wed Dec 31 02:09:11 UTC 2025 aarch64 GNU/Linux

root@MKC3568:/# sudo modprobe mt7601u
modprobe: FATAL: Module mt7601u not found in directory /lib/modules/6.12.41-trim
# 可以看到并没有编译MT7601U模块

Linux内核从 v4.2开始已将mt7601u驱动合并进主线,位于:drivers/net/wireless/mediatek/mt7601u/,但飞牛系统提供的内核镜像未包含无线驱动模块。

下载内核源码

我们需要使用完全匹配6.12.41的内核源码。

1
2
3
4
5
6
7
mkdir /home/kernel
cd /home/kernel

# 克隆时直接指定tag v6.12.41(深度为1,只下载该版本)
git clone --depth=1 --branch v6.12.41 https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git

cd linux

为什么使用内核源码中的驱动?

[!NOTE]

选择与当前运行内核同版本的内核源码编译 mt7601u 驱动,是为了保证模块的 vermagic、配置和符号表与系统完全一致,从而避免加载失败。主线代码经过充分测试,与内核其他组件兼容性最佳,还能直接复用 /proc/config.gz 的配置,省去手动调整依赖的麻烦。日后内核升级时,只需用相同方法重新编译对应版本即可,维护十分方便。而第三方 GitHub 仓库中的驱动往往包含未经验证的补丁,不仅容易引发兼容性问题,也难以跟随内核同步更新。

配置编译环境

确认当前系统中存在/proc/config.gz默认配置文件,这个文件很关键,飞牛的内核有-trim后缀。

1
2
root@MKC3568:/home/kernel/linux# ls /proc/config.gz
/proc/config.gz

我们这一次是在arm平台上原生编译,不需要交叉编译器。

首先安装编译工具链

1
2
apt update
apt install -y build-essential flex bison libssl-dev libelf-dev bc

设置编译参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 设置编译架构(必须设置!否则可能编译出错误架构的模块)
export ARCH=arm64
export CROSS_COMPILE=

# 使用系统当前的内核配置
zcat /proc/config.gz > .config

# 添加正确的 LOCALVERSION
echo 'CONFIG_LOCALVERSION="-trim"' >> .config

# 强制启用MT7601U驱动为模块
echo 'CONFIG_MT7601U=m' >> .config

# 自动处理依赖和新选项
make olddefconfig

准备构建环境

1
make modules_prepare

编译mt7601u模块

1
KBUILD_MODPOST_WARN=1 make M=drivers/net/wireless/mediatek/mt7601u modules

[!NOTE]

为什么加 KBUILD_MODPOST_WARN=1

make modules_prepare 只准备了头文件,不会生成完整的 Module.symvers(需要完整编译内核才会生成),因此直接编译外部模块会因找不到符号验证文件而报错。但 mt7601u 是独立模块,不依赖其他内核模块,且源码和 .config 与当前内核完全匹配,那些 “未定义符号” 实际都存在于内核中。加上 KBUILD_MODPOST_WARN=1 可将错误降级为警告,从而正常生成 .ko 文件。

验证并安装模块

最终编译会得到drivers/net/wireless/mediatek/mt7601u/mt7601u.ko模块。

我们验证一下模块的vermagic

1
modinfo drivers/net/wireless/mediatek/mt7601u/mt7601u.ko | grep vermagic

正常应该输出:

1
vermagic: 6.12.41-trim SMP preempt mod_unload aarch64

我们的系统内核就是6.12.41-trim,完全匹配。

如果你意外获得了6.12.41 SMP preempt mod_unload aarch64(缺少-trim后缀),请重新进行编译流程,确保系统当前的内核配置被正确继承。

然后就可以安全地安装并加载驱动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 创建目标目录(如果还没创建)
sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u/

# 2. 备份原有模块(如果有的话)
sudo cp /lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko ~/mt7601u-6.12.41-trim.ko.bak 2>/dev/null || true

# 3. 复制新编译的模块
sudo cp drivers/net/wireless/mediatek/mt7601u/mt7601u.ko \
/lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u/

# 4. 更新模块依赖
sudo depmod -a

# 5. 安装固件(两个位置都放,确保兼容)
sudo mkdir -p /lib/firmware/mediatek/
sudo wget -O /lib/firmware/mediatek/mt7601u.bin \
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/mediatek/mt7601u.bin
sudo cp /lib/firmware/mediatek/mt7601u.bin /lib/firmware/

# 6. 加载驱动
sudo modprobe mt7601u

现在我们可以插入网卡看看能否正常使用:

1
2
3
root@MKC3568:/home/kernel/linux# dmesg | tail -20
mt7601u 1-1:1.0: ASIC revision: 76010001 ...
mt7601u 1-1:1.0: Firmware Version: 0.1.00

通过ip link show可以看到无线接口wlx90de80624b0c

连接Wi-Fi

飞牛默认使用NetworkManager,可以使用nmcli连接WiFi:

1
sudo nmcli dev wifi connect "你的Wi-Fi名称" password "你的Wi-Fi密码"

设置开机自动加载模块

1
echo "mt7601u" | sudo tee /etc/modules-load.d/mt7601u.conf

异常处理

在飞牛收到新版本的OTA推送后,可能出现更新卡一半进度条的情况,只能被迫重启。重启后发现自行编译并加载的mt7601u模块消失了。不必紧张,我们重新加载模块即可。

我们编译后的模块应该还在内核源码中的drivers/net/wireless/mediatek/mt7601u/mt7601u.ko位置。

再次重复之前的操作:

1
2
3
4
5
6
sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u/
sudo cp drivers/net/wireless/mediatek/mt7601u/mt7601u.ko \
/lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u/
sudo depmod -a
# 加载驱动
sudo modprobe mt7601u

建议:将编译好的模块备份到安全位置(如/home/backup/目录),以便快速恢复。

希望以上内容可以帮助到你!


Arm飞牛手动编译mt7601u无线网卡模块(针对Linux 6.12.41-trim内核)
https://blog.lecreate.asia/2026/02/07/2026020701/
作者
LECREATE
发布于
2026年2月7日
许可协议