GL-MT6000 路由器 Wi-Fi CSI 教程:不买新硬件拿到 256 子载波
作者 Wu Jun · 更新于 2026-11-02 · 约 4 分钟
这篇是完整复现路线:一台 GL-MT6000(MT7986)路由器,不额外买网卡,拿到 80MHz、256 子载波的 CSI。 文中的每一步都在真机上跑过,包括失败与回退。
本文所有性能数字均为本项目可复现的一手实测(E 级):原始抓包、脚本与 SHA-256 校验值一并公开 [1] [2]; mt76 驱动与补丁的出处为上游开源仓库 [3]。

测试用 GL-MT6000(Flint 2)实机。
0. 先看结论
| 项目 | 实测值 |
|---|---|
| 硬件 | GL-iNet GL-MT6000(MT7986A + MT7976) |
| 系统 | OpenWrt SNAPSHOT,Linux 6.18 |
| Wi-Fi 固件 | mt7986_wm.bin 20260515,MD5 3ce21eda…98019 |
| 采集接口 | 独立 AP 接口(如 csi0),5GHz / HE80 / ch44 |
| 短测 | 10 秒 561 条链记录(55 条记录/秒) |
| 长测 | 10 分钟 57,293 条链记录(95.5 条记录/秒),无 >5 秒断流 |
| 每条测量 | 256 子载波,tx 0/1 × rx 0/1/2/3 共 8 条链 |
| 独立快照 | 7,609 个闭合组,约 12.68 次测量/秒;剔除异常后使用 7,583 次(12.64 次/秒) |
| 内存 | daemon 常驻 ≈5.2MB,稳定 |
1. 前置条件与风险
⚠️ 刷机有风险。GL-MT6000 有 U-Boot 恢复通道,但必须先演练回退, 并保留原厂固件与配置备份。以下操作仅供个人技术研究。

背面接口:DC 12V 供电、WAN 2.5G 与 LAN1–LAN3。
需要的准备:
- 原厂回退固件(
.bin)+ 配置备份; - 一条网线 + 能设置静态 IP 的电脑;
- 构建环境(Linux + Docker,或直接使用现成镜像);
- 目标客户端设备(手机即可),用于产生 CSI 测量流量。
2. 路线图
① 只读调研原厂 → ② 编译带 CSI 补丁的 OpenWrt → ③ 刷机
→ ④ 配置独立 AP 接口 → ⑤ 开启 CSI(frame-type + MAC 过滤)
→ ⑥ 用 daemon 收 UDP → ⑦ 验证数据完整性 → ⑧ 长稳与工程化
3. 编译要点(mt76 CSI 补丁)
CSI 能力来自三个部分,缺一不可:
| 组件 | 作用 |
|---|---|
9000-mt7915-csi-implement-csi-support.patch |
在内核 mt76 驱动里加 CSI 控制与上报(nl80211 vendor 命令 + debugfs) |
mt76-vendor 工具 |
下发 CSI 控制命令(启停、MAC 过滤、frame-type) |
mt76-csi-daemon + LuCI 页面 |
持续采集、UDP/ubus/REST 输出与可视化 |
这三部分都建立在 OpenWrt 开源的 mt76 驱动之上 [3]。
刷入任何镜像前,先执行六项预刷机审计:目标板标识、sysupgrade 哈希、原厂回退哈希、Wi-Fi 固件、CSI 内核符号和用户态自启动。
固件版本很关键:MT7986 需要 20260515 版 Wi-Fi 固件(旧版本里 CSI 上报路径没有调用者, 表现为"使能成功但永远没有数据")。
# 校验刷进去的固件版本(在路由器上执行)
md5sum /lib/firmware/mediatek/mt7986_wm.bin
# 期望:3ce21edabe201608e7bec0dd16898019
dmesg | grep -i "WM Firmware"
# 期望:Build Time: 20260515…
4. 刷机与首启配置
- 断电按住 Reset 上电进入 U-Boot(电脑静态 IP
192.168.1.2,访问192.168.1.1); - 上传 sysupgrade 镜像并等待重启;
- 首启用 LAN 直连,配置 LAN 网段(例如
192.168.9.1/24,避免与上游冲突)。
踩坑:如果电脑的 Wi-Fi 网关和上游路由器都在
192.168.1.0/24, 访问 U-Boot 页面时必须绑定有线网卡(curl --interface ethX),否则会走错出口。
5. 开启 CSI(最关键的一步)
CSI 有两个必须同时满足的条件,缺一个就"永不落盘":
# ① 设置 frame-type 过滤(0,34 = 目标帧类型),否则固件不上报
mt76-vendor <iface> set csi ctrl=1,0,0,34
# ② 把目标设备加入 MAC 过滤表(只上报过滤表里的站点)
mt76-vendor <iface> set csi ctrl=1,0,0,0 macaddr=<client-mac>
# 验证(debugfs)
cat /sys/kernel/debug/ieee80211/phy1/mt76/csi_stats
# CSI enable: 1
# mac: <client-mac>, interval: 0
要点:
mt76-vendor的第一个参数是接口名(如csi0),不是 phy 名;- CSI 是接收端测量:目标设备要持续有流量(ping / iperf / 视频都行);
- 用独立 AP 接口(本文记为
csi0)承接 CSI 客户端,避免影响家用 Wi-Fi 配置。
6. UDP 数据格式(自己写解析器必备)
daemon 默认把每条链记录以 UDP 发出(主机字节序,小端):
| 偏移 | 字段 | 说明 |
|---|---|---|
| 0 | ts (uint32) |
微秒时间戳(实测 600s 对应 599,931,160 µs) |
| 4 | ta[6] |
发送端 MAC |
| 10 | rssi (int8) |
dBm |
| 11 | snr (uint8) |
dB |
| 12 | data_bw |
带宽编码 |
| 13 | pri_ch_idx |
主信道索引 |
| 14 | rx_mode |
接收模式 |
| 15 | pad |
对齐 |
| 16 | data_num (uint16) |
子载波数(本项目 = 256) |
| 18 | tx_idx (uint16) |
发送链编号 |
| 20 | rx_idx (uint16) |
接收链编号 |
| 22 | chain_info (uint16) |
bit15 = 本条是本次测量的最后一条链 |
| 24… | int16 I/Q 交错 | 每子载波 4 字节(I、Q 各 2) |
# 最小解析示例(UDP payload;抓包文件前面还有 10 字节记录头)
import struct
HDR = struct.Struct("<I6sbBBBBBHHHH") # ts, ta, rssi, snr, bw, ch, mode, pad, num, tx, rx, chain
ts, ta, rssi, snr, bw, ch, mode, _pad, n, tx, rx, chain = HDR.unpack_from(buf, 0)
iq = struct.unpack_from(f"<{n*2}h", buf, HDR.size)
7. 验证与长稳
# 10 秒快测
scripts/csi_capture_session.sh 10
# 10 分钟长稳
scripts/csi_capture_session.sh 600
判定标准(本项目实测通过):
- 记录率稳定(10 分钟平均 95.5 条链记录/秒,57,293 条原始记录);
- 按
chain_infobit15 得到 7,609 个测量组,独立快照率约 12.64Hz [1]; - 无超过 5 秒的断流;
- 每条测量 256 子载波、链数完整(4 或 8);
- daemon 内存不增长(≈5.2MB)。
8. 五个必修的坑
- 没有 frame-type 过滤 → 零数据(最常见);
- 忘记加 MAC 过滤 → 抓到别的设备或什么都抓不到;
- 固件版本不对 → 使能成功但没有上报;
- CSI 抢了家用 SSID 的带宽/速率 → Wi-Fi 突然变慢(见排障文章);
- 依赖公网做测试 → 结果不可复现:内网自建文件/流量源,才能测出真实链路性能。
9. 下一步
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- E 级 · 本项目实测
本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
Router CSI Lab · 2026
okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) · 本地原始母片 SHA-256 为 00373f83…95e2;公开下载的是去标识派生文件,SHA-256 为 527466ce…a440,两者不可混用。 - E 级 · 本项目实测
Router CSI Toolkit — 采集/分析/守护脚本(MIT,公开仓库)
Router CSI Lab · 2026
github.com/jjjwu/router-csi-toolkit · 核实: GitHub API 于 2026-11-02 核实公开仓库、抓包质量预检、成功 CI 与 v0.1.3 Release;归档 SHA-256 为 59f144c0…adea7 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。 - C 级 · 官方资料
openwrt/mt76 — mac80211 driver for MediaTek Wi-Fi chipsets
OpenWrt project / MediaTek
github.com/openwrt/mt76 · 核实: GitHub API 2026-10-11 (stars 890, last push 2026-10-08) · 本项目使用的开源 mt76 驱动上游;CSI 能力的补丁正是在这一代码库之上编排。