为了写入Bootloader, 要开启SSH, 要开启SSH, 就需要将小米路由器的 ROM 更新为开发版.
在小米的 miwifi 下载页面找到路由器对应的开发版 ROM(R3G ROM 开发版).
ROM 的升级有两种方式
下载工具包时显示的信息
工具包使用方法:小米路由器需升级到开发版0.5.28及以上, 小米路由器mini需升级到开发版0.3.84及以上, 小米路由器3即将支持. 注意:稳定版不支持 请将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下, 保证文件名为miwifi_ssh.bin; 断开小米路由器的电源, 将U盘插入USB接口; 按住reset按钮之后重新接入电源, 指示灯变为黄色闪烁状态即可松开reset键; 等待3-5秒后安装完成之后, 小米路由器会自动重启, 之后您就可以尽情折腾啦 :)
R3G的闪存是128M的NAND, 查看布局
cat /proc/mtd dev: size erasesize name mtd0: 07f80000 00020000 "ALL" mtd1: 00080000 00020000 "Bootloader" mtd2: 00040000 00020000 "Config" mtd3: 00040000 00020000 "Bdata" mtd4: 00040000 00020000 "Factory" mtd5: 00040000 00020000 "crash" mtd6: 00040000 00020000 "crash_syslog" mtd7: 00040000 00020000 "reserved0" mtd8: 00400000 00020000 "kernel0" mtd9: 00400000 00020000 "kernel1" mtd10: 02000000 00020000 "rootfs0" mtd11: 02000000 00020000 "rootfs1" mtd12: 03580000 00020000 "overlay" mtd13: 012a6000 0001f000 "ubi_rootfs" mtd14: 030ec000 0001f000 "data"
具体路径根据自己的U盘路径调整
dd if=/dev/mtd0 of=/extdisks/sda4/ALL.bin dd if=/dev/mtd1 of=/extdisks/sda4/Bootloader.bin dd if=/dev/mtd2 of=/extdisks/sda4/Config.bin dd if=/dev/mtd3 of=/extdisks/sda4/Bdata.bin dd if=/dev/mtd4 of=/extdisks/sda4/Factory.bin dd if=/dev/mtd5 of=/extdisks/sda4/crash.bin dd if=/dev/mtd6 of=/extdisks/sda4/crash_syslog.bin dd if=/dev/mtd7 of=/extdisks/sda4/reserved0.bin dd if=/dev/mtd8 of=/extdisks/sda4/kernel0.bin dd if=/dev/mtd9 of=/extdisks/sda4/kernel1.bin dd if=/dev/mtd10 of=/extdisks/sda4/rootfs0.bin dd if=/dev/mtd11 of=/extdisks/sda4/rootfs1.bin dd if=/dev/mtd12 of=/extdisks/sda4/overlay.bin dd if=/dev/mtd13 of=/extdisks/sda4/ubi_rootfs.bin dd if=/dev/mtd14 of=/extdisks/sda4/data.bin
备份到mtd14可以会提示设备不存在, 可以忽略, mtd0-mtd4备份下来就行了
mtd write /extdisks/sda4/Bootloader.bin Bootloader mtd write /extdisks/sda4/Config.bin Config mtd write /extdisks/sda4/Bdata.bin Bdata mtd write /extdisks/sda4/Factory.bin Factory mtd write /extdisks/sda4/crash.bin crash mtd write /extdisks/sda4/crash_syslog.bin crash_syslog mtd write /extdisks/sda4/reserved0.bin reserved0 mtd write /extdisks/sda4/kernel0.bin kernel0 mtd write /extdisks/sda4/kernel1.bin kernel1 mtd write /extdisks/sda4/rootfs0.bin rootfs0 mtd write /extdisks/sda4/rootfs1.bin rootfs1 mtd write /extdisks/sda4/overlay.bin overlay mtd write /extdisks/sda4/ubi_rootfs.bin ubi_rootfs mtd write /extdisks/sda4/data.bin data
下载breed https://breed.hackpascal.net/ 在下面找到 breed-mt7621-xiaomi-r3g.bin, 当前版本的日期是 2021-12-16. 这个版本有专为R3G准备的"小米R3G设置", "环境变量编辑", "小米 R3G Bdata"配置界面
执行命令
mtd -r write /tmp/breed.bin Bootloader
等重启后, 拔掉电源, 按住路由的reset键开机, 等到路由的灯闪烁的时候, 松开reset键, 在cmd中通过ipconfig查看IP, 当电脑获取到192.168.1.x的IP后, 在浏览器中访问192.168.1.1 就可以进入breed控制台
normal_firmware_md5
这个键值, 因为刷新刷的固件 md5 值与原来的不一致会导致无法开机(删了, 不删是否不能开机未验证)xiaomi.r3g.bootfw
, 值为2关于第三个操作, 如果已经写入了breed到bootloader, 这个是必须的. breed的启动流程如下
对于单文件的第三方固件, 可以在breed中上传刷入
对于R3G的OpenWrt固件, 写入方式比较特殊, 需要说明一下. 具体的方式在官方网站上已经详细说明了https://openwrt.org/toh/xiaomi/mir3g
首先下载固件, 访问 https://firmware-selector.openwrt.org/ , 输入 xiaomi, 选择 Xiaomi Router 3G, 如果没有这个型号, 在右侧的版本中选择旧一个版本试试, 在下载页面下载以下两个文件
openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin openwrt-ramips-mt7621-mir3g-squashfs-rootfs0.bin
这两文件需要在ssh下, 通过mtd写入, 所以如果没有ssh, 需要用breed刷回官方的开发版固件并按前面的步骤开启ssh.
将上面准备的2个OpenWrt文件上传到 /tmp 目录下,执行下面的命令写入固件
cd /tmp # 这个命令用于写入kerenl分区1, 可以不执行, 如果执行这条命令, 那么两个分区都会是同样的内核了 # mtd write openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel0 # 写入第二个kernel分区 mtd write openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1 # 写入rootfs分区 mtd write openwrt-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0 # 如果刷了breed, 不需要运行下面两行, 直接reboot nvram set flag_try_sys1_failed=1 nvram commit reboot
使用kernel1.bin和rootfs0.bin写入, 启动OpenWrt后通过df -h
看到的是正常的文件系统, 可以直接使用, 不需要再刷sysupgrade.bin
如果使用原Bootloader, 切换启动分区是用的flag_try_sys1_failed
和flag_try_sys2_failed
变量,
使用OpenWrt启动
nvram set flag_try_sys1_failed=1 nvram set flag_try_sys2_failed=0 nvram set flag_boot_success=0 nvram commit reboot
恢复官方系统
需要切换回原kernel分区启动
fw_setenv flag_try_sys1_failed 0 fw_setenv flag_try_sys2_failed 1 fw_setenv flag_boot_success 0
通过xiaomi.r3g.bootfw
变量进行控制