电脑指南
第二套高阶模板 · 更大气的阅读体验

从 OpenWrt 源码维护中摸出来的路由调优门道

发布时间:2026-04-19 21:31:17 阅读:6 次

上周帮朋友刷了个小米路由器 4A 千兆版,原厂固件跑着跑着就卡顿,连后台都打不开。换上自己编译的 OpenWrt 固件后,CPU 占用稳在 30% 以内,QoS 规则一加,视频会议再也没被下载拖垮过——这背后不是靠玄学,是源码维护经验一点点攒出来的手感。

改 config 配置不如看清楚 driver 是怎么握手的

很多人调无线性能,第一反应是调 htmodecountry,但去年我遇到个怪事:把 5GHz 信道设成 149,信号满格却频繁断连。翻到 package/kernel/ath10k-ctath10k_core.c,发现驱动里有个硬编码的 timeout 值:

if (ar->hw_params.fw_diag && time_after(jiffies, ar->last_rx + HZ / 2)) {
原来默认半秒没收到 ACK 就重置链路。改成 HZ(1 秒)后,弱信号下握手成功率直接翻倍。

补丁不是贴了就完事,得盯住 dmesg 和 logread

有次给 mt76 驱动打了个 RSSI 修正补丁,编译烧录后看似正常,但实际测下来漫游延迟反而变高。dmesg | grep mt76 一扫,发现 mt76x2_mac_work 被反复调度,再查 logread -e 'assoc',才发现 AP 切换时触发了两次重复扫描。最后在 mt76x2_mac.cmt76x2_mac_set_timing 函数里加了防抖判断才压下去。

别迷信「最新版」,老 commit 有时更稳

OpenWrt 23.05 默认用 kernel 6.1,但某款联发科 MT7981 路由器的 USB 3.0 供电不稳,插移动硬盘必掉盘。试了十几个 kernel 补丁都没用,最后回退到 22.03 的 5.10.179,发现它用的是旧版 mtu3 驱动,对 VBUS 检测逻辑更保守,反而兼容性更好。现在我的编译脚本里还留着这一行:

# git checkout 5a2b1c3 -- target/linux/mediatek/files-5.10/drivers/usb/mu3d

源码维护经验说白了,就是知道哪行代码管什么、改了会牵出什么、不改又忍不了什么。路由器不是黑盒子,每次 make menuconfig 多看两眼依赖关系,每次 git blame 多瞄一眼作者注释,时间久了,调优就不是碰运气,而是照着脉络往下摸。