GL-MT6000 CSI 实验日志:10 月跑了什么、失败了什么
作者 Wu Jun · 更新于 2026-10-31 · Wi-Fi CSI, 实验日志, GL-MT6000, MT7986, OpenWrt · 约 9 分钟
这份日志记录 Router CSI Lab 在 2026 年 10 月的真实实验过程:如何建立可回退镜像、第一次拿到 CSI、 怎样验收 10 分钟抓包、遇到哪些性能故障,以及最后怎样把数据整理成可公开、可校验的数据集。 它不是“成功学教程”,而是一份可以对照复现的工程记录。所有数字均来自项目内实测, 采集数据、脚本和 DOI 已公开 [1] [2] [3]。
实验目标与设备
目标很明确:在消费级路由器上拿到稳定、可长期运行的 Wi-Fi CSI,并验证它是否能支撑后续的感知实验。
- 设备:GL.iNet GL-MT6000(MT7986A + MT7976)
- 系统:OpenWrt SNAPSHOT(Linux 6.18)+ mt76 CSI 补丁
- 射频:5GHz、HE80、channel 44、256 子载波、2 Tx × 4 Rx(8 条链)

日志中实际使用的零售版 GL-MT6000。照片只能证明硬件来源;CSI 结论仍必须由下方引用的原始抓包、 解析器与命令验证。
先把“回退”做出来
刷机成功不等于实验可维护。构建阶段同时准备了三条证据链:
- 以社区 CSI OpenWrt 分支和当前 mt76 上游为代码来源 [4] [5];
- 对最终镜像做解包预检,确认
mt7915e含 CSI 符号,镜像内有 daemon、初始化脚本和 LuCI; - 单独保存 GL.iNet 官方回退固件并重新计算哈希,而不是只记下载 URL [6]。
刷机时不保留原厂配置,避免把 LAN、WAN、无线接口和防火墙配置跨系统带入。预检项目、镜像结构与 回退步骤见 GL-MT6000 刷机前校验。
时间线
| 日期 | 发生了什么 |
|---|---|
| 2026-10-10 | 完成第一次 10 分钟连续采集:57,293 条记录、600 秒、平均 95.5 条/秒、无大于 5 秒的空档 |
| 2026-10-11 | 整理采集/分析脚本,站点与首批复现教程上线 |
| 2026-10-13 | 对发送端 MAC 做脱敏(57,293 处 → 0),重新分片并生成 manifest 与 SHA-256 |
| 2026-10-17 | 数据集发布到 Zenodo,获得 DOI 10.5281/zenodo.23434789 |
| 2026-10-29 | 完成站点结构与内容整改(作者信息、数据集页、工具页、实验日志) |
| 2026-10-31 | 将已脱敏的 15 秒真机来源短片、双语字幕和文字稿接入本页素材说明 |
第一次看到 CSI,不等于采集已经合格
首次端到端测试只跑 60 秒,目标是确认“设备、驱动、固件、抓包主机”四层确实连通,而不是立刻做感知算法。 当次得到 2,777 条 CSI 链记录,全部是 256 子载波、完整 I/Q,说明 MT7986 新固件与 mt76 CSI 路径已经在 真实路由器上跑通。
随后才进行 600 秒连续采集。验收结果如下:
| 指标 | 实测值 | 为什么必须记录 |
|---|---|---|
| 外层链记录 | 57,293 | 它是一次抓包的总行数,不是独立时间采样数 |
| 抓包时长 | 599.924 秒 | 用真实时间戳计算,不用文件名或预期时长代替 |
| 平均链记录率 | 95.5 条/秒 | 8 条链可能属于同一测量,不能直接当 95.5Hz |
| 完整测量组 | 7,609 | 按 chain_info bit15 闭合 |
| 链数组成 | 6,714 个八链组、895 个四链组、1 个单链组 | 真实抓包并不总是整齐的 8 链 |
| 独立测量率 | 约 12.68 组/秒 | 感知算法真正可用的时间采样率量级 |
| 过滤后分析组 | 7,583 组 / 约 12.64 组/秒 | 再剔除 25 个零值占比异常组 |
| 子载波完整性 | 57,289 条 256 子载波 + 4 条 64 子载波 | 异常格式必须显式计数 |
| 最大时间空档 | 2.373 秒 | 长空档会影响频谱、呼吸和多普勒结论 |
| 超过 5 秒的空档 | 0 | 这是本次 10 分钟采集的稳定性验收线 |
| RSSI / SNR 均值 | -31.3 dB / 53.29 dB | 只能描述该次链路条件,不能外推到其他房间 |
这也是项目后来专门做抓包质量审计和 长空档频谱敏感性分析的原因:热图看起来正常,不代表采样轴和链分组正确。
故障注入:daemon 死掉后能不能自己回来
长稳测试不能只看“没有崩”,还要主动制造故障。2026-10-11 的手动演练终止了 CSI daemon:
procd在约 5 秒后拉起新进程;- 客户端仍保持关联,daemon 重新跟踪到目标接口;
- debugfs 回到
CSI enable: 1,REST 帧计数重新增长; frames_total从 0 开始,这是进程内计数器的预期行为,不代表历史抓包丢失。
watchdog 还会检查 daemon 进程、CSI 接口和 debugfs 使能状态。没有客户端时帧数为 0 不能被误判为故障, 因为 CSI 只有在关联客户端和有效流量存在时才会产生测量。
实拍素材来源与隐私审查
开箱照片和视频只作为设备来源证据,不作为测量结果。它们可以证明这里确实使用了一台零售版设备, 也能帮助读者辨认接口;但它们不能证明子载波数量、采样率、丢包率或感知准确率。
原始素材包含精确位置元数据、私人桌面、手部、普通家庭物品,以及一张设备铭牌近照。铭牌画面同时出现 二维码、MAC、序列号和默认 Wi-Fi 信息,因此整张排除;只模糊一个字段或在二维码周围做很窄的裁切, 仍然不足以消除设备身份风险。
| 原始素材 | 处理决定 | 公开派生文件 |
|---|---|---|
| 8 分 50 秒竖屏开箱视频 | 原片不公开;只使用两段经过裁切、静音的短画面 | 15 秒 H.264 短片,480 × 480,无音轨、无 GPS/EXIF |
| 背部接口近照 | 旋转并裁掉铭牌、杂物区域 | 复现教程中的 gl-mt6000-rear-ports.jpg |
| 设备铭牌近照 | 高风险:二维码、MAC、序列号、默认 Wi-Fi | 不公开 |
| 3 分 45 秒横屏细节视频 | 信息密度低,且出现私人桌面 | 不公开 |
| 手持接线照片 | 桌面杂乱,接口信息与现有图片重复 | 不使用 |
0:00–0:03 打开外箱,露出 GL.iNet Flint 2 零售包装。0:03–0:07 展示包装正面与 GL-MT6000 型号标识。 0:07–0:12 取出主机,展开四根可调天线。0:12–0:15 查看盒内线缆。
公开的安全版图片经过重新编码,避免相机型号与位置元数据随文件进入站点。 短片只放在本页的素材来源说明中,不放进核心复现教程,也不自动播放:它无法证明 CSI 结果,却会增加与技术步骤无关的媒体负担。 播放器首先只加载海报和媒体元数据,视频正文由读者点击后加载;中英双语字幕与完整文字稿同时提供。 原始文件始终留在 Git 版本库之外。
这项审查本身也是证据链的一部分,而不是装饰。读者可以把公开照片与硬件表对照,再用公开校验值和解析器 核验抓包。下面保留失败实验同样是这个原则:可信的实验日志既要写成功,也要写没有走通的路径。
“WAN 只有 100 兆”其实找错了链路
刷机后最初怀疑 WAN 从千兆降到百兆。实际读取结果:
- 光猫到 MT6000 WAN 始终协商为 1000Mbps 全双工,RX/TX 错误计数为 0;
- 路由器本机多线程下载约 391Mbps,同时 CPU 仍有约 87% idle;
- 真正只跑百兆的是连接构建机的一个 LAN 口,对端网卡只通告
100baseT/Full; - 无线慢则是另一个独立问题,不能用有线口协商结果解释。
这条排查链说明:“测速慢”至少要先拆成 WAN 协商、路由转发、LAN 链路、无线 PHY、客户端省电和空口占用六层。 完整命令、字节对账与实验矩阵见 CSI 上线后 Wi-Fi 变慢。
两个真实踩到的坑
坑 1:固件 ATF 让速率回不来
现象:客户端空闲一段时间后,下行被钉在 MCS0,持续下载也恢复不了;其他客户端看起来正常。
定位:先用“路由器本机下载、LAN 下载、AP 发送字节对客户端接收字节”排除宽带和重传风暴,再检查 mt76 debugfs。相同客户端、相同信道下做了前后对照:
vow_atf |
空闲后 6 次下载(Mbps) | 观察 |
|---|---|---|
1(固件默认) |
9.5 / 7.3 / 9.5 / 7.4 / 9.6 / 7.2 | 连续 36 秒满载也不恢复 |
0 |
7.8 / 8.8 / 20 / 146 / 387 / 393 | 约 15–20 秒逐步爬回 |
0 + 重新关联 |
369 / 374 / 376 / 390 / 409 / 397 | 6/6 直接恢复到约 400Mbps |
结论:这是固件层的速率恢复问题,不是信号差,也不是客户端故障。修复需要开机脚本 + watchdog 持久化, 因为 debugfs 在驱动重载后会复位。
坑 2:80MHz BSS 里的 40MHz 客户端
现象:某个只协商 40MHz 的客户端在 80MHz BSS 中周期性塌陷;其他 80MHz 客户端正常。
定位:把射频切到 HE40 后,同一客户端连续 6 次下载为 384 / 375 / 328 / 416 / 411 / 419Mbps,塌陷消失;切回 HE80 后又出现 7–10Mbps。
结论:这是“40MHz 老客户端 + 80MHz BSS”的触发组合,而不是某个 SSID 单独损坏。可以把射频切到客户端 原生宽度,或把老客户端隔离到独立射频。由于没有继续读取固件内部速率控制状态,本文不把结论进一步 归因到具体寄存器。
被实验排除的假设
| 假设 | 对照实验 | 结果 |
|---|---|---|
| CSI 抓包本身拖慢无线 | 关闭 CSI 的 2.4GHz 仍复现 | 排除为唯一原因 |
| AQL 导致 | 关闭 aql_enable 后仍塌陷 |
排除 |
| U-APSD 导致 | 短期一度正常,后续 VHT80 复现 | 不是根治项 |
| HE 与老网卡不兼容 | 改成 VHT80 仍塌陷 | 排除协议名本身 |
| 上行也受限 | Mac 上行约 188Mbps,AP 接收速率正常 | 问题主要在下行 |
| 所有客户端都受影响 | 80MHz 手机持续稳定 | 与 40MHz 特定客户端相关 |
数据是怎么变成数据集的
- 原始抓包先做 MAC 脱敏:只改写 payload 里的发送端 MAC,时间戳、RSSI 与 I/Q 不动;
- 按 8 MiB 切成 8 个分片,生成每片与整包的 SHA-256;
- 写
REASSEMBLE.md,确保下载者能合并并校验; - 打包分析图与元数据,发布到 Zenodo,采用 CC BY 4.0。
整包 SHA-256 为 527466ceb8b5f835e55ff348f02808736b947db39e7baac1f34e375de146a440。
解析与复现步骤见数据集解析实战。
这批数据能证明什么,不能证明什么
可以支持:
- GL-MT6000 + MT7986 + mt76 CSI 路径可以在真实设备上捕获 256 子载波 I/Q;
- 在记录的频段、信道、链路和 10 分钟窗口内,系统能维持可量化的记录率与时间连续性;
- 已知异常组、四链组和长空档必须进入解析与质量门控;
vow_atf与 40/80MHz 客户端组合在本环境中有可重复的性能影响。
不能单独支持:
- 跌倒、呼吸、心率、姿态或身份识别的准确率;
- 跨房间、跨受试者或跨固件版本的能力迁移;
- 把 95.5 条链记录/秒当成 95.5Hz;
- 把本页性能数值当成所有 MT6000 或所有客户端的固定吞吐承诺。
公开抓包已完成 MAC 去标识,但仍保留外层绝对时间戳、活动节律和 session 内关联,因此它是伪匿名数据, 不是“无法重新识别的匿名数据”。
最小复现顺序
# 1. 确认分析主机能看到 UDP,不要先跑长任务
tcpdump -ni any udp port 8888
# 2. 先抓 10 秒,检查文件非空和分析摘要
router-csi-toolkit/scripts/csi_capture_session.sh 10
# 3. 10 秒合格后才抓 10 分钟
router-csi-toolkit/scripts/csi_capture_session.sh 600
验收时必须同时保存命令、固件版本、接口、信道、带宽、链记录率、独立测量组率、4/8 链组成和最大空档。 只保存一张“漂亮热图”不足以证明数据可复现。
得到的教训
- 先固定环境,再比较算法:频段、带宽、信道、固件版本任何一个变化,CSI 分布都会变;
- 先看时间戳与帧率,再调模型:帧率抖动会制造假谱峰,很多"算法问题"其实是采集问题;
- 把故障注入纳入长稳:daemon 自动恢复、无客户端时零帧和计数器归零都要提前定义;
- 性能问题分层排查:WAN、LAN、PHY、客户端省电与 CSI 采集是不同层,不能凭一个测速结果归因;
- 保留失败记录:ATF 与 40MHz 这两个坑,比任何成功截图都更能说明实验是否真实;
- 数据要可校验:没有 SHA-256 与重组说明的"数据集",别人无法确认自己拿到的是完整版本。
接下来
- 补更多场景:不同距离、不同姿态、不同房间;
- 把实验日志变成固定栏目,每完成一批采集就更新;
- 继续扩写复现教程与工具文档,减少"只有结论、没有过程"的页面。
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 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 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。 - E 级 · 本项目实测
Router CSI Lab — GL-MT6000 (MT7986) Wi-Fi CSI dataset, 10 s sample + 10 min capture
Router CSI Lab · 2026
doi:10.5281/zenodo.23434789 · 核实: CC BY 4.0;SHA-256 已发布;Zenodo DOI 10.5281/zenodo.23434789 · 数据集已获 Zenodo DOI(10.5281/zenodo.23434789),可直接引用。 - D 级 · 预印本/百科
ossiemarks/openwrt — feature/csi-mt7915 CSI stack
ossiemarks
github.com/ossiemarks/openwrt/commit/aed26e5f95963cd725d9ff097c713af8c24afd35 · 核实: Public commit page fetched 2026-10-29; community project, not peer-reviewed. · 本项目构建所用的社区 OpenWrt CSI 分支。其存在不证明 MT7986 能出帧,后者必须由本项目实机数据验证。 - 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 能力的补丁正是在这一代码库之上编排。 - C 级 · 官方资料
GL.iNet download center — GL-MT6000 firmware
GL.iNet
dl.gl-inet.com/router/mt6000/stable · 核实: Official download page fetched 2026-10-29; used only to establish the vendor rollback source, not to claim a checksum without a downloaded file. · GL-MT6000 官方固件下载入口。回退镜像的实际哈希必须对下载文件重新计算。