Redmi AX5 内存告急?如何提取 Nwrt 的 QCAWIFI 驱动拯救低配软路由
Redmi AX5 内存告急?如何提取 Nwrt 的 QCAWIFI 驱动拯救低配软路由
Redmi AX5 路由器外观图,仅有 128MB 内存,属于低配设备。
最近在搞软路由固件开发的时候,遇到了一个非常典型的“硬件瓶颈”问题。手里这台 Redmi AX5,只有 128MB 的内存(NAND),这在现在动辄 512GB、1GB 内存的软路由圈子里算是“老古董”配置了。
本来想自己从源码编译一个精简版的 OpenWrt,结果没想到踩到了一个大坑:开源的 WiFi 驱动太吃内存了,直接导致系统起不来。 但是,反过来用现成的 Nwrt 固件,它的无线却是好的。这就说明,Nwrt 里面用的那个闭源的 QCAWIFI 驱动才是拯救这台小内存设备的救命稻草。
今天就借着这个求助案例,聊聊怎么分析这个问题,以及如何尝试把 Nwrt 里能用的驱动“扣”出来给自己用。
一、 痛点分析:为什么开源驱动起不来?
在 Redmi AX5 这种 Qualcomm 方案的路由器上,WiFi 驱动主要有两条路:
-
开源驱动(ath10k):这是 OpenWrt 主线推崇的,优点是开源、可定制性强。但缺点也很明显,对于老芯片或者特定厂商的魔改版,兼容性未必最好,且固件文件加载后会占用不少 RAM 和存储空间。在 128MB 内存的小车上,这就叫“小马拉大车”,挤占了系统启动所需的资源,直接导致 Kernel Panic 或无限重启。
-
闭源驱动(QCAWIFI / QSDK):芯片厂商高通提供的原厂闭源包,通常针对芯片做了极致优化,内存占用相对可控,性能也更稳。Nwrt 之所以能在这台机器上跑起来,就是因为它用了闭源方案。
这就陷入了一个两难:自己编的太重跑不动,别人编的(Nwrt)能跑但太臃肿,连 Overlay 分区都被塞满了,想装个插件都没地儿。
二、 核心思路:不做“裁缝”,做“搬运工”
使用 binwalk 解包固件后的文件系统结构,需重点关注 lib/modules 和 lib/firmware 目录。
要在不把整个 Nwrt 源码吃透的情况下解决驱动问题,我们不建议大家去死磕 Nwrt 的源码仓库(很多私人仓库不仅难找而且包含很多魔改补丁,合并难度极大)。更高效的思路是 “提取与移植”。
既然 Nwrt 的固件能跑,那它的文件系统里肯定包含正确的 .ko 驱动文件和配套的固件 firmware。我们要做的就是把这些“零件”拆下来,装到你自己的精简固件里。
三、 实操步骤:如何提取 Nwrt 驱动
这就到了大家最关心的“干货”环节,假设你已经下载好了 Nwrt 适合 Redmi AX5 的固件包(通常是 .bin 或 .trx 文件),接下来的操作可以分为这几步:
1. 解包固件
固件本质上是一个压缩包。我们需要用 binwalk 这种工具把它拆开。
在 Linux 环境下执行:
binwalk -e Nwrt-redmi-ax5-firmware.bin
解包后,你会看到一个包含 squashfs-root 的目录,这就是固件的文件系统结构。
2. 定位关键文件
进到解包后的目录,重点找以下两样东西:
-
驱动模块(.ko 文件):通常在
lib/modules\<kernel_version>路径下。你需要找带有ath、qca或wifi字样的 ko 文件。常见的如ath10k_pci.ko或者高通私有的qcawifi.ko等。 -
Board 文件与固件: 闭源驱动极度依赖特定的 Board-2.bin 或 firmware.bin。这些通常在
lib/firmware tath10k t或lib/firmware目录下。千万注意:Board 文件必须匹配你当前的硬件版本(比如 Redmi AX5 可能是 IPQ5018 或类似的芯片方案),拷错文件会导致 WiFi 无法开启甚至变成砖。
3. 解决依赖地狱
这是最难的一步。闭源驱动 .ko 文件依赖内核中的其他符号。如果你把它放到你自编译的 OpenWrt 里,很可能出现 Unknown symbol 错误。
解决方案:
- 同级内核原则:尽量保证你编译的 OpenWrt 内核版本与 Nwrt 使用的内核版本一致(比如都是 5.4 或 5.10)。你可以通过
uname -r查看 Nwrt 的内核版本。 - 全盘拷贝:如果不确定依赖哪个模块,可以尝试将 Nwrt
modules目录下相关的所有 ko 文件一股脑拷贝过来。只要存储空间允许(你说 Overlay 没了,那你得先清理固件本身),先保证能跑起来再说。
4. 精简 Nwrt 固件本身(替代方案)
如果你实在搞不定驱动的依赖关系,那就不必强行自己编译。你可以尝试对 Nwrt 官方固件进行“减肥”。
- 剔除不需要的默认插件(如去广告、多媒体解码等)。
- 使用
opkg remove卸载不必要的软件包。 - 如果你手头有源码,可以进入
make menuconfig,把 System -> Target Devices 下的选项勾选得更精简一点,把不需要的 LuCI 组件全关掉。
四、 总结
对于小内存软路由(如 128MB 的 Redmi AX5)来说,硬件天花板是无法逾越的,但软件层面的优化能救命。
当开源驱动因为内存溢出(OOM)导致系统崩溃时,回退到闭源的 QCAWIFI 驱动是唯一可行的技术路径。与其全网去求一个可能并不公开的 Nwrt 源码仓库,不如直接利用现有的固件资源进行“逆向工程”——提取驱动和固件,手动移植到你的工程中。
希望这个思路能帮到正在为 Overlay 空间和内存焦虑的你。

评论已关闭