收起左侧

【教程】飞牛 NAS MT7921U USB WiFi 6 网卡驱动完整安装指南(x86)

6
回复
773
查看
[ 复制链接 ]

2

主题

34

回帖

0

牛值

江湖小虾

2026-4-28 11:49:52 显示全部楼层 阅读模式

p

郑重申明:本内容全部基于飞牛里面的小龙虾生成,本人纯技术小白,目前驱动成功了拿来和大家分享。对于操作过程中出现的任何问题本人不负责任。

p>【教程】飞牛 NAS MT7921U USB WiFi 6 网卡驱动完整安装指南(x86)

========================================
📋 帖子信息

标题:【教程】飞牛 NAS MT7921U USB WiFi 6 网卡驱动完整安装指南
作者:wmq7777
日期:2026 年 4 月 28 日
适用系统:飞牛 OS (FNOS) 6.18.18-trim
适用设备:x86_64

========================================
🎯 效果展示

【连接成功】
SSID: NeHome-5G
频率:5200 MHz (5GHz WiFi 6)
信号强度:-53 dBm (优秀)
连接速率:960.7 Mb/s (WiFi 6 80MHz)
实际吞吐:600-700 Mbps

image.png

image.png

【硬件信息】
网卡型号:MediaTek MT7921AU
USB ID: 0e8d:7961
CPU: Intel Core i3-N305 (8 核)
系统:飞牛 OS 6.18.18-trim

========================================
📦 支持的网卡

已验证型号:
✓ MediaTek MT7921AU (USB ID: 0e8d:7961)
✓ MediaTek MT7921BU

检查你的网卡:

lsusb | grep -i "0e8d:7961"

========================================
📥 下载地址

教程包:MT7921U-WiFi6-教程包.tar.gz (12KB)upload 附件:MT7921U-WiFi6-教程包.tar.gz
包含:

  • 自动安装脚本
  • 配置文件
  • 完整教程文档
  • 故障排查指南
  • 性能优化指南

========================================

⚡ 快速安装(3 步搞定)

步骤 1:解压教程包
cd /tmp
tar -xzf MT7921U-WiFi6-教程包.tar.gz
cd MT7921U-WiFi6-教程包

步骤 2:运行自动安装
sudo bash scripts/install.sh

步骤 3:连接 WiFi
sudo bash scripts/wifi-connect.sh "你的 WiFi 名称" "你的 WiFi 密码"

完成!重启后依然有效。

========================================
📖 详细教程

完整教程包含以下内容:

1️⃣ 系统要求检查
2️⃣ 驱动源码下载
3️⃣ 兼容性补丁应用
4️⃣ 驱动编译(5-10 分钟)
5️⃣ 模块安装
6️⃣ WiFi 连接配置
7️⃣ 性能优化(解决断流)
8️⃣ 开机自启配置

详细说明请查看教程包内的 README.md

========================================
⚙️ 性能优化(强烈建议!)

优化 1:禁用 USB Scatter-Gather
echo 'options mt76 disable_usb_sg=Y' | sudo tee /etc/modprobe.d/mt76.conf

优化 2:禁用省电模式
sudo bash scripts/wifi-power.sh

优化 3:测试网络
sudo bash scripts/test-wifi.sh

========================================
📊 性能测试

【信号质量】
-30 ~ -50 dBm: 优秀 ★★★★★
-50 ~ -60 dBm: 良好 ★★★★☆
-60 ~ -70 dBm: 一般 ★★★☆☆

【网速测试】
5GHz 80MHz: 600-700 Mbps (实际吞吐)
2.4GHz: 100-150 Mbps

【稳定性】
大文件传输:稳定 35-40 MB/s
延迟:2-5ms (内网)
丢包率:0%

========================================
🔧 故障排查

问题 1:驱动加载失败
解决:查看 dmesg | tail -30

问题 2:网卡未识别
解决:重新插拔 USB,检查 lsusb

问题 3:传输断流
解决:确认 disable_usb_sg=Y 已生效

问题 4:重启后 WiFi 消失
解决:检查 /etc/modules-load.d/mt7921u.conf

详细故障排查请查看 docs/troubleshooting.md

========================================
📁 教程包内容

MT7921U-WiFi6-教程包/
**── README.md # 完整教程(必读)
**── 快速开始.md # 快速入门
**── 说明.txt # 简要说明
**── scripts/
** **── install.sh # 自动安装脚本
** **── wifi-connect.sh # WiFi 连接脚本
** **── wifi-power.sh # 省电优化脚本
** **── test-wifi.sh # WiFi 测试脚本
**── configs/
** **── mt7921u.conf # 模块加载配置
** **── mt76.conf # 驱动优化配置
** **── 72-wireless.rules # 接口命名规则
**── docs/
**── troubleshooting.md # 故障排查指南
**── performance.md # 性能优化指南

========================================
💡 技术细节

【驱动模块】
mt76.ko - 核心驱动 (8.8MB)
mt76-usb.ko - USB 支持 (1.6MB)
mt792x-lib.ko - MT792x 核心 (3.9MB)
mt792x-usb.ko - MT792x USB (763KB)
mt7921u.ko - MT7921U 驱动 (804KB)

【兼容性修复】
✓ LINUX_VERSION_CODE 宏定义
✓ asm/unaligned.h 路径
✓ hrtimer_init API 兼容

【编译环境】
内核:6.18.18-trim
编译器:GCC 12.2.0
源码:openwrt/mt76 (GitHub)

========================================
🎓 常见问题

Q: 支持 2.4GHz WiFi 吗?
A: 支持!MT7921U 是双频网卡。

Q: 支持 WiFi 7 路由器吗?
A: 支持!向后兼容 WiFi 7。

Q: 能当 AP 热点用吗?
A: 理论上支持,需要额外配置 hostapd。

Q: 传输速度能达到多少?
A: 5GHz 约 600-700 Mbps,2.4GHz 约 100-150 Mbps。

Q: 其他 NAS 系统能用吗?
A: 理论上可以,需要类似的内核环境。

之前失误,没把编译好的固件上传,现在把/lib/modules/6.18.18-trim/updates/wireless/目录下的mt76文件夹备份分享,供大家学习研究。因限制大小,这里使用度盘

链接: https://pan.baidu.com/s/1GfF9_Dife5Vi84DL_xGniQ?pwd=1234 提取码: 1234

收藏
送赞 3
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

2

回帖

0

牛值

江湖小虾

2026-5-7 18:01:52 显示全部楼层

能分享一下你编译的固件吗?编译好久提示失败

我了个大叉,真没有啊,在哪个目录下?我上传出来一份  详情 回复
2026-5-9 08:36
压缩包里没有吗??下载链接的部分  详情 回复
2026-5-9 08:31

2

主题

34

回帖

0

牛值

江湖小虾

2026-5-9 08:31:58 楼主 显示全部楼层
wooboo 发表于 2026-5-7 18:01
能分享一下你编译的固件吗?编译好久提示失败

压缩包里没有吗??下载链接的部分

2

主题

34

回帖

0

牛值

江湖小虾

2026-5-9 08:36:59 楼主 显示全部楼层
wooboo 发表于 2026-5-7 18:01
能分享一下你编译的固件吗?编译好久提示失败

我了个大叉,真没有啊,在哪个目录下?我上传出来一份

1

主题

3

回帖

0

牛值

江湖小虾

OpenWrt怎么你的固件是这个 还不能直接用 源码编译会报错 Exec format error,内核 ABI、符号表不匹配。
用CODEX 重新改签名文件头信息 重新编译了  详情 回复
1 小时前

1

主题

3

回帖

0

牛值

江湖小虾

帅呢想毁容 发表于 2026-6-13 11:04
OpenWrt怎么你的固件是这个 还不能直接用 源码编译会报错 Exec format error,内核 ABI、符号表不匹配。 ...

用CODEX 重新改签名文件头信息 重新编译了

1

主题

3

回帖

0

牛值

江湖小虾

FNOS 安装 MT7921U USB WiFi 6 驱动说明

这份文档整理的是本次在飞牛 OS 上实际跑通的方案,目标是给 MT7921U / MT7921AU / MT7921BU 这类 USB WiFi 6 网卡安装驱动。
参考飞牛社区帖子:https://club.fnnas.com/forum.php?mod=viewthread&tid=623681
适用环境:

  • 系统:fnOS 1.1.3107
  • 内核:6.18.18-trim
  • 架构:x86_64
  • 实测设备:MT7921U

这次成功的关键不是“直接用论坛现成 .ko”,而是:

  • openwrt/mt76 源码
  • FNOS 6.18.18-trim 的 headers 打兼容补丁
  • 在本机重新编译

先说结论

https://club.fnnas.com/forum.php?mod=viewthread&tid=62368l里论坛分享的预编译包 mt76_backup.tar.gz 在这台机器上不能直接用。

虽然它表面上也是给 6.18.18-trim,但直接安装后会报:

modprobe: ERROR: could not insert 'mt7921u': Exec format error
mt76: disagrees about version of symbol module_layout

所以正确做法是重新编译,而不是直接复制旧 .ko

支持的 USB ID

本次编译出的 mt7921u.ko 支持这些 ID:

  • 0e8d:7961
  • 3574:6211
  • 0846:9060
  • 0846:9065
  • 35bc:0107

插上网卡后可先检查:

lsusb

重要提醒

1. modprobe 可能不是没安装,而是不在 PATH

FNOS 上 登录 用户默认 PATH 里没有 /usr/sbin,所以你会看到:

modprobe: command not found

这不一定代表系统没装 kmod。直接用完整路径即可:

/usr/sbin/modprobe mt7921u
/usr/sbin/modinfo mt7921u
/usr/sbin/depmod -a

2. 这套方案是给 6.18.18-trim

如果以后飞牛 OS 升级内核,比如不是 6.18.18-trim 了,需要重新编译一遍,不能直接沿用旧模块。

先确认:

uname -r

安装前检查

uname -r
uname -m
ls /usr/src/ | grep linux-headers
docker version

预期:

  • uname -r6.18.18-trim
  • uname -mx86_64
  • 存在 linux-headers-6.18.18-trim
  • Docker 可用

本次实际成功的最小方案

和常见教程相比,这次没有去编整套 mt76 全家桶,而是只编 MT7921U 真正需要的那几个模块:

  • mt76.ko
  • mt76-usb.ko
  • mt76-connac-lib.ko
  • mt792x-lib.ko
  • mt792x-usb.ko
  • mt7921-common.ko
  • mt7921u.ko

这样可以避开 mt7603mt7615mt76x0mt76x2 那些不相关模块的兼容性报错。

安装步骤

步骤 1:准备源码目录

cd /tmp
rm -rf mt76-build
git clone --depth 1 https://github.com/openwrt/mt76 mt76-build
cd mt76-build

步骤 2:打兼容补丁

这次实际需要的补丁点有 3 个:

  1. mt76.hlinux/version.hLINUX_VERSION_CODE
  2. 把旧路径 asm/unaligned.h 改成 linux/unaligned.h
  3. ieee80211_txq_aql_pending() 改成旧 headers 也支持的 ieee80211_txq_get_depth()

执行:

cd /tmp/mt76-build

python3 <<'PY'
from pathlib import Path

p = Path('mt76.h')
text = p.read_text()
needle = '#define __MT76_H\n\n'
insert = '#define __MT76_H\n\n#include <linux/version.h>\n#ifndef LINUX_VERSION_CODE\n#define LINUX_VERSION_CODE KERNEL_VERSION(6,18,18)\n#endif\n\n'
if '#include <linux/version.h>' not in text:
    text = text.replace(needle, insert, 1)
p.write_text(text)
PY

find . -type f \( -name "*.c" -o -name "*.h" \) -exec sed -i 's|<asm/unaligned.h>|<linux/unaligned.h>|g' {} +

python3 <<'PY'
from pathlib import Path

p = Path('tx.c')
text = p.read_text()
old = """\t\tif (ieee80211_txq_aql_pending(phy->hw, txq))\n\t\t\treturn 0;\n"""
new = """\t\t{\n\t\t\tunsigned long frame_cnt, byte_cnt;\n\n\t\t\tieee80211_txq_get_depth(txq, &frame_cnt, &byte_cnt);\n\t\t\tif (frame_cnt || byte_cnt)\n\t\t\t\treturn 0;\n\t\t}\n"""
if old not in text:
    raise SystemExit('tx.c patch target not found')
text = text.replace(old, new, 1)
p.write_text(text)
PY

说明:

  • 常见教程里提到的 hrtimer 补丁,这次没有用到
  • 因为我们没有编 mt76x02_usb_core.c 那条无关分支

步骤 3:用 Docker 编译

宿主机没有现成 gcc,所以这次用 Docker 编译,避免往系统里装一堆编译工具。

cd /
sudo docker run --rm \
  -v /tmp/mt76-build:/src \
  -v /usr/src/linux-headers-$(uname -r):/kbuild \
  -w /src \
  gcc:12-bookworm \
  bash -lc 'set -e; make -C /kbuild M=/src \
    CONFI**T7601U=n CONFI**T7603E=n CONFI**T7615_COMMON=n CONFI**T7615E=n \
    CONFI**T7663S=n CONFI**T7663U=n CONFI**T7663_USB_SDIO_COMMON=n \
    CONFI**T76_SDIO=n CONFI**T76x02_LIB=n CONFI**T76x02_USB=n \
    CONFI**T76x0_COMMON=n CONFI**T76x0E=n CONFI**T76x0U=n \
    CONFI**T76x2_COMMON=n CONFI**T76x2E=n CONFI**T76x2U=n \
    CONFI**T7915E=n CONFI**T7921E=n CONFI**T7921S=n \
    CONFI**T7996E=n CONFI**T7925_COMMON=n \
    CONFI**T76_USB=m CONFI**T76_CONNAC_LIB=m CONFI**T7921_COMMON=m \
    CONFI**T792x_LIB=m CONFI**T792x_USB=m CONFI**T7921U=m \
    modules -j$(nproc)'

编译成功后应生成这些文件:

/tmp/mt76-build/mt76.ko
/tmp/mt76-build/mt76-usb.ko
/tmp/mt76-build/mt76-connac-lib.ko
/tmp/mt76-build/mt792x-lib.ko
/tmp/mt76-build/mt792x-usb.ko
/tmp/mt76-build/mt7921/mt7921-common.ko
/tmp/mt76-build/mt7921/mt7921u.ko

步骤 4:安装到系统模块目录

KVER=$(uname -r)
TARGET=/lib/modules/$KVER/updates/wireless/mt76

sudo mkdir -p "$TARGET"

sudo install -m 644 /tmp/mt76-build/mt76.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt76-usb.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt76-connac-lib.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt792x-lib.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt792x-usb.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt7921/mt7921-common.ko "$TARGET/"
sudo install -m 644 /tmp/mt76-build/mt7921/mt7921u.ko "$TARGET/"

sudo chown -R root:root "$TARGET"
sudo /usr/sbin/depmod -a

步骤 5:加载驱动

sudo /usr/sbin/modprobe -r mt7921u mt7921_common mt792x_usb mt792x_lib mt76_usb mt76_connac_lib mt76 2>/dev/null || true
sudo /usr/sbin/modprobe mt7921u

步骤 6:验证

看模块信息:

/usr/sbin/modinfo mt7921u

看是否已加载:

lsmod | grep -E 'mt76|mt7921u|mt792'

看驱动文件是否在:

find /lib/modules/$(uname -r)/updates/wireless/mt76 -maxdepth 1 -type f

如果一切正常,lsmod 应该至少能看到:

  • mt7921u
  • mt792x_usb
  • mt7921_common
  • mt792x_lib
  • mt76_usb
  • mt76_connac_lib
  • mt76

步骤 7:插上 USB 网卡后检查

lsusb
ip link show
sudo dmesg | tail -n 100

如果识别成功,lsusb 里应出现你的无线网卡 ID,ip link show 里会出现 wl*wlan* 接口。

常见问题

1. modprobe: command not found

直接用:

/usr/sbin/modprobe mt7921u

2. Exec format error

如果你是直接用了别人分享的 .ko,很容易遇到这个错。
通常说明模块和你当前 FNOS 内核 ABI 不匹配,需要按这份文档重新编译。

3. asm/unaligned.h: No such file or directory

说明源码和你当前 headers 不兼容,需要把:

#include <asm/unaligned.h>

改成:

#include <linux/unaligned.h>

4. LINUX_VERSION_CODE / KERNEL_VERSION 报错

说明 mt76.hlinux/version.h,需要补:

#include <linux/version.h>
#define LINUX_VERSION_CODE KERNEL_VERSION(6,18,18)

5. ieee80211_txq_aql_pending 未定义

说明 openwrt/mt76 当前源码比 FNOS 的 mac80211 头文件更新,需要改成 ieee80211_txq_get_depth() 的兼容写法,这份文档里的补丁已经处理。

6. 驱动已加载,但没有无线接口

先确认网卡是否真的插上了:

lsusb

这次安装完成后,我们检查到的系统状态就是:

  • 驱动模块已加载
  • 但当时 NAS 上并没有插着兼容的 MT7921U USB 网卡
  • 所以不会出现 wlan 接口

安装后清理临时文件

如果确认驱动已经装好,可以清理:

sudo rm -rf /tmp/mt76-build

如果你还想顺手清理 Docker 拉下来的编译镜像:

sudo docker image rm gcc:12-bookworm

当前已安装的驱动检查命令

/usr/sbin/modinfo mt7921u
lsmod | grep -E 'mt76|mt7921u|mt792'
find /lib/modules/$(uname -r)/updates/wireless/mt76 -maxdepth 1 -type f

不建议的做法

  • 不建议直接复制论坛预编译的 mt76_backup.tar.gz
  • 不建议只复制单个 mt7921u.ko
  • 不建议在内核升级后继续沿用旧 .ko

备注

本次成功方案的核心是“补兼容点 + 本机重编”,不是“改模块签名”。

之前确认过本机内核:

CONFI**ODULE_SIG_FORCE is not set

所以这次能成功,靠的是模块和 6.18.18-trim 的符号版本、vermagic、依赖链对上,而不是靠签名放行。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则