我有一台吃灰多年的小米路由器3,请工程师扩容升级内存,并刷了PB-Boot,以及恩山 @醉老仙 的OpenWRT固件(基于Lean大神的源码编译),作为主力路由器使用。7x24小时稳定运行一个多月,跑插件完全没问题。
不过,这版固件不支持IPv6。虽然仅有IPv4也不影响上网,但运营商IPv6的资源就白白浪费了。我猜想是编译过程中没有开启IPv6支持,因此打算用L大的源码,自己编译一个可用PB-Boot刷入的固件。
下载Lean的源码
L大的源码已经官方支持小米路由器3,所以可以放心编译。
下载最新的源码,并同步软件源:
1 |
|
增加PB-Boot支持
PB-Boot是PandoraBox所属的路由器Bootloader,需要使用专用格式的固件。但是L大的源码树默认不支持编译小米路由器3的PB-Boot固件。
幸运的是,GitHub网友 MortalM 成功编译出了PB-Boot固件,并分享了自己的做法,在此表示衷心的感谢!
请按照以下提示来修改target/linux/ramips/image/mt7620.mk
,以生成PB-Boot格式的固件(带-
的行表示删除,+
表示增加):
1 |
|
附:原理介绍
小米路由器3的PB-Boot镜像格式是:两份内核,一份UBI格式的rootfs。其中,两处内核区域的大小都是固定的,如果大小不足,就要用空位来补足。每个内核区域前会附上U-Boot的文件头。
笔者用binwalk
工具分析了醉老仙的PB-Boot固件,就是上述格式,后来才从MortalM的分享中得知该如何生成。
配置固件
在L大源码的根目录下,运行以下命令打开配置菜单:
1 |
|
然后依次进行以下设置:
目标设备设置
- Target system:
MediaTek Ralink MIPS
- Subtarget:
MT7620 based boards
- Target profile:
Xiaomi Mi Router R3
打开IPv6支持
具体可参考我这篇文章:《OpenWRT启用IPv6与DHCPv6支持》
开始编译
设置完成后,运行以下命令编译:
1 |
|
编译完成的固件位于bin/targets/ramips/mt7620/openwrt-ramips-mt7620-xiaomi_miwifi-r3-squashfs-pb-boot.bin
,可直接在PB-Boot下刷入。
问题解决:固件刷写后亮黄灯无限重启的问题
笔者在写这篇教程之前,曾经尝试按照小米路由器3的默认设置编译固件,并通过LuCI的固件升级刷入。但是,重启后始终无法进入系统,表现为:先亮黄灯,眼看要变成蓝灯,结果灯光瞬间熄灭,变回黄灯,无限循环。
根据网友MortalM所提的GitHub issue,无限重启的原因有:
- 缺少面向MT7620的NAND驱动程序
- 编译完成后没有清理缓存
社区大佬在收到issue之后,第二天就为MT7620适配了NAND驱动程序,这时就可以正常编译并运行了。但在笔者这边,问题依旧,即便我同步的是2023年5月最新的代码。
看来,问题就是出在没有清理编译上。笔者常常用一套源码树编译两个以上型号的路由器,却没有清理编译缓存。因此,或多或少产生一些文件的冲突,造成编译出的小米路由器3固件无限重启。另外,简单地在配置菜单中切换设备,而不仔细检查设置项,也有可能导致冲突。
对策很简单,运行以下命令,彻底清理编译缓存与配置:
1 |
|
然后再重新配置并编译,即可:
1 |
|
如果仍有问题,则更新一下代码树和软件源:
1 |
|
拓展阅读
- 本文作者: 爱拼安小匠
- 本文链接: https://anclark.github.io/2023/05/12/OpenWRT/OpenWRT_MiWifi3_PB-Boot/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0(署名-非商用-禁止演绎 3.0) 许可协议。转载请注明出处!