OpenWrt / ImmortalWrt 编译 （TP-LINK WDR-4320）
打扫房间时找出一个老古董路由器，TP-LINK WDR-4320，几年前用的，里面跑的还是 OpenWrt 19.07。硬件配置： CPU：高通 AR9344 RAM：128MiB ROM：8MiB（这台之前已经更换为了 16MiB 的 Flash） 网口：千兆 * 4 WiFi：IEEE 802.11b/g/n (750Mbps) USB：USB2.0 * 2 这配置放到 2024 年已经过时了，连 WiFi5（802.11ac）协议都不支持，好在 4 个千兆口 + 2 个 USB 口放在内网挂载个硬盘、共享个打印机还是够用的。里面跑的 OpenWrt 19.07 也太旧了，顺便升级到目前最新的 OpenWrt 23.05，因为这台机器的 Flash 芯片之前改过，原厂的 8MiB 太小换成了 16MiB 的，而官方的固件只认 8MiB，想要认全 16MiB 只能自己编译固件，那就再编译一次 OpenWrt 23.05 吧，顺便记录一下编译要点。源码这次选择的 ImmortalWrt，是 OpenWrt 的一个分支，比较之下 ImmortalWrt 算是和上游兼容性比较好又对国内用户使用比较友好的一个分支了，相比原版的 OpenWrt，细节上对国内用户可能感觉更顺手一些。拉取源码之后有几个地方需要修改一下，之前 OpenWrt 19.07 使用的设备树还是 ar71xx，现在已经弃用了，换成了 ath79，所以修改固件大小的方式和之前旧版也有所不同。修改文件：target/linux/ath79/image/generic-tp-link.mk修改文件：target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi如下图内容，因为官方 OpenWrt 是不支持 WDR4320 的，但支持 WDR4310 和 WDR4300，这几款硬件都是一样的所以通用，这里需要魔改一下 WDR4310 的配置文件，将 WDR4310 修改为 WDR4320，当然不改也不影响实际使用（逼死强迫症）。因为源码中没有 WDR-4320 的型号，既然上面改了，所以这里还需要手动拷贝一份 WDR-4320 的配置文件。然后再 make menuconfig 应该就可以找到刚刚添加的 WDR-4320 的型号了。然后再根据自己需要调整一下，比如修改一下默认的 LAN 地址，防止接在其他设备下时 IP 冲突，有 BT 下载需求的用户可能需要 UPNP 功能。我个人比较喜欢简洁的固件，其它需求比如 Docker、Python 之类的习惯用到时再手动安装，现在就可以开始编译固件了。根据你自己的硬件性能 make j=7 V=s 开始编译，因为需要下载一些文件，所以速度跟网络环境也有关，大概几个小时后如果如上图所示，就说明编译成功了，可以在 bin 文件夹下找到生成的固件文件。接下来路由器进入 Breed 环境开始刷写固件：刷写完成后会自动重启，大概 2 分钟后就可以手动进入 luci 后台了这里可以看到编译的固件已经成功的认出了 16MiB 的容量（固件自身就占用了 8MiB 多，所以如果是 8MiB 的 Flash 基本就没什么空间装其他软件包了，甚至固件自身也需要再精简一些内容）。