引
OpenWrt 24 版本发布之后,Redmi AX6000 主线版本的 U-Boot 实现已经合并入上游了,因此维护者移除了 hanwckf 版 U-Boot 的 ImmortalWrt 的包的构建。详情可见这条 Commit 。
从 hanwckf 版 U-Boot 切换到 OpenWrt U-Boot 的大致思路是先把路由器刷回原版布局,然后再按照官网步骤刷入 OpenWrt U-Boot 。这个过程需要使用到 tftp
和 uboot
的命令行操作,比较复杂,而且有一定变砖风险。
hanwckf 版 U-Boot 号称「不死 U-Boot」,采用网页上传固件烧录的方式,烧录前还会有兼容性检测,极易上手,而且不容易变砖,相当用户友好。
然而维护者也仅仅只是移除了 Redmi AX6000 的配置文件,项目本身没有太大变更,所以我们可以手动编译一个可在 hanwckf 版 U-Boot 中引导的 OpenWrt 24 。
准备编译环境
OpenWrt 官方维护了一套编译环境,并打成了 Docker 镜像,我们直接使用即可:
docker run -id --name immortalwrt \
-e BUILDWORKER_NAME=immortalwrt \
-e BUILDWORKER_PASSWORD=123456 \
-v ./immortalwrt:/immortalwrt \
ghcr.io/openwrt/buildbot/buildworker-v3.8.0:v9
这里我们使用 -v
参数将宿主机的 ./immortalwrt
目录挂载到容器的 /immortalwrt
目录下,方便我们在宿主机上查看编译产物。
进入容器:
docker exec -it immortalwrt bash
安装基本依赖:
bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)
该镜像中内置了一个叫 buildbot
的非特权用户。如果你的宿主机本身就是 root
用户,那就不存在文件夹以及构建产物权限问题,可以跳过这步。如果你宿主机登录的是非特权用户,需要使用此用户来编译。按 Ctrl + D
退出容器,再输入以下命令使用 buildbot
用户登录容器:
docker exec -it --user buildbot immortalwrt bash
后面就是照着 ImmortalWrt 的 Github 上的 README
来编译了。
编译 OpenWrt
在主目录中克隆项目:
cd /immortalwrt
git clone https://github.com/immortalwrt/immortalwrt
cd immortalwrt
默认是 master
分支,我们根据需要切换到不同版本的分支或标签。比如我这里需要编译 v24.10.1
版本:
git checkout v24.10.1
恢复被删除的 Redmi AX6000 的配置文件:
git revert 9334bf3ec1e21d0bc1b1f8dc480415aea589ebc7 -n
更新软件包:
./scripts/feeds update -a
./scripts/feeds install -a
下载一个现成的构建配置:
wget https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/config.buildinfo -O .config
修改构建配置:
make menuconfig
在 Target Profile
中选择 (Xiaomi Redmi Router AX6000 (custom U-Boot layout))
,在 Subtarget
中选择 Redmi AX6000
。
往下可以看到,这个构建配置中基础的包已经被选中。但是无线网卡相关的驱动没有被勾选,我们这里选中 kmod-mt7915e
,或者你页可以选择不编译它们,而是在安装完之后使用 opkg
命令安装,两者是等价的。
Kernel modules --->
Wireless Drivers --->
{*} kmod-mt7915e
最后一步,编译:
make -j$(nproc)
如果你没有切换到 buildbot
用户,而是使用 root
用户编译,那么上面的命令会编译出错,需要在编译前加上跳过 root
检查:
FORCE_UNSAFE_CONFIGURE=1 make -j$(nproc)
几个小时之后,编译完成。这里我的电脑大约需要一个半小时。构建产物在 bin/targets/mediatek/filogic
目录下,immortalwrt-mediatek-filogic-xiaomi_redmi-router-ax6000-squashfs-sysupgrade.bin
就是固件。
结语
个人感觉,维护者不应该删除 hanwckf 版 U-Boot 的配置文件,毕竟这个 U-Boot 版本的兼容性和稳定性都比 OpenWrt U-Boot 要好很多。虽然我们可以手动编译,但是对于普通用户来说,还是有点复杂的。
特别鸣谢
@alampy 提供的思路。