2025-03-09技术
为WR30U刷入stock layout(原厂U-Boot)的Openwrt
参考 https://github.com/openwrt/openwrt/pull/12770
原文中也有刷Openwrt U-Boot layout的方法
开SSH的方法有很多,这个方法应该是最方便的。
项目地址 https://github.com/openwrt-xiaomi/xmir-patcher
下载下来之后按说明安装依赖并运行即可。
nanddump -f /tmp/BL2.bin /dev/mtd1
nanddump -f /tmp/Nvram.bin /dev/mtd2
nanddump -f /tmp/Bdata.bin /dev/mtd3
nanddump -f /tmp/Factory.bin /dev/mtd4
nanddump -f /tmp/FIP.bin /dev/mtd5
nanddump -f /tmp/ubi.bin /dev/mtd8
nanddump -f /tmp/KF.bin /dev/mtd12
stock layout(原厂U-Boot)和 Openwrt U-Boot layout 都不支持NMBM,也就是闪存坏快管理,请妥善保管好备份文件。
WR30U的固件是双槽位的,不同的槽位要执行不同的命令
执行下面这条命令
cat /proc/cmdline
根据结果执行相应的命令
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=1
nvram set flag_last_success=1
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=0
nvram set flag_last_success=0
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit
和步骤3一样,不同的槽位要执行不同的命令
ubiformat /dev/mtd9 -y -f /tmp/*-stock-initramfs-factory.ubi
ubiformat /dev/mtd8 -y -f /tmp/*-stock-initramfs-factory.ubi
然后重启路由器就会进入initramfs模式的OpenWrt
这一步在后面的升级步骤中会自动执行,可以忽略,不过手动执行一下也没啥坏处。
如果 fw_setenv
命令无效,就需要执行以下下面这条命令
echo "/dev/mtd1 0x0 0x10000 0x20000" > /etc/fw_env.config
然后设置uboot-env,命令如下
fw_setenv boot_wait on
fw_setenv uart_en 1
fw_setenv flag_boot_rootfs 0
fw_setenv flag_last_success 1
fw_setenv flag_boot_success 1
fw_setenv flag_try_sys1_failed 8
fw_setenv flag_try_sys2_failed 8
fw_setenv mtdparts "nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),34816k(ubi),34816k(ubi1),32768k(overlay),12288k(data),256k(KF)"
使用下面的命令
sysupgrade -n /tmp/*-stock-squashfs-sysupgrade.bin
或者在web管理页面操作也行。
ubiformat /dev/mtd8 -y -f /tmp/ubi.bin