不买新硬件:用 GL-MT6000 路由器拿到 256 子载波 CSI
2026-10-11 · 约 4 分钟
这篇是完整复现路线:一台 GL-MT6000(MT7986)路由器,不额外买网卡,拿到 80MHz、256 子载波的 CSI。 文中的每一步都在真机上跑过,包括失败与回退。
本文所有性能数字均为本项目可复现的一手实测(E 级):原始抓包、脚本与 SHA-256 校验值一并公开 [2] [3]; mt76 驱动与补丁的出处为上游开源仓库 [1]。
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 条链 |
| 内存 | daemon 常驻 ≈5.2MB,稳定 |
广告位(上线后接入 AdSense/Ezoic)
1. 前置条件与风险
⚠️ 刷机有风险。GL-MT6000 有 U-Boot 恢复通道,但必须先演练回退, 并保留原厂固件与配置备份。以下操作仅供个人技术研究。
需要的准备:
- 原厂回退固件(
.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 驱动之上 [1]。
固件版本很关键: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 条原始记录 [2]);
- 无超过 5 秒的断流;
- 每条测量 256 子载波、链数完整(4 或 8);
- daemon 内存不增长(≈5.2MB)。
8. 五个必修的坑
- 没有 frame-type 过滤 → 零数据(最常见);
- 忘记加 MAC 过滤 → 抓到别的设备或什么都抓不到;
- 固件版本不对 → 使能成功但没有上报;
- CSI 抢了家用 SSID 的带宽/速率 → Wi-Fi 突然变慢(见排障文章);
- 依赖公网做测试 → 结果不可复现:内网自建文件/流量源,才能测出真实链路性能。
9. 下一步
- 独家排障:CSI 上线后 Wi-Fi 变慢的真相
- 工具、脚本与 10 分钟原始数据集
- 实战手册(PDF):把本文的每一步、脚本与排障流程打包成可离线执行的版本。
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- 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 能力的补丁正是在这一代码库之上编排。 - E 级 · 本项目实测
本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
Router CSI Lab · 2026
csi.okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) - E 级 · 本项目实测
Router CSI Toolkit — 采集/分析/守护脚本(MIT)
Router CSI Lab · 2026
csi.okwujun.pw/zh/tools/ · 核实: 仓库打包含 SHA-256,脚本在真机运行
本页含联盟链接(rel="sponsored"),你通过链接购买不会增加成本,本站可获得少量佣金。