目 录CONTENT

文章目录

小米路由器Pro(R3P)刷OpenWRT固件教程(非Breed)

成培培
2026-02-24 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

最近翻出来一个路由器:小米路由器Pro(R3P),还是官方的固件,不过官方已经停止更新了,所以准备拿来折腾一下,刷入immortalwrt系统,过程中发现不少坑,这里记录一下

版本鉴别

这款路由器出厂有两种批次的闪存:Micron和ESMT,NAND出厂就允许存在坏块,但是Micron这批坏块分布相对多,OOB 标记行为和 ESMT 略有不同,所以在刷 OpenWrt 时可能出现一些问题,不太建议拿来刷,ESMT相对来说坏块率较低,所以如果目标是刷 OpenWrt,优先选 ESMT。
查看你的路由器的闪存是哪种批次的命令:dmesg | grep "Manufacturer ID:"
如果显示0x2c就是镁光,0xc8就是ESMT,比较遗憾的是我的就是镁光的。。。
不过也不是说Micron的闪存就不能刷,我们可以通过以下命令看看闪存的坏块情况:dmesg | grep -i block
如果坏块数量很少(比如 5~10 个)就基本安全,如果 30+风险明显增加,我的坏块只有一个,就非常安全。

开启ssh

如果你确认要刷了,得按照以下步骤开启ssh

更新开发板固件

进入MiWIFI官网固件下载地址https://www.miwifi.com/miwifi_download.html,点击ROM,搜索小米路由器Pro,选择开发板下载,直接进入路由器饿管理后台在页面上选择固件包升级即可。

下载开启ssh工具

https://www.miwifi.com/miwifi_open.html
点击开启SSH工具进入,可以下载工具包并且会给你root密码,你可以提前保存下来,按照官网提供的步骤开启ssh

  1. 请将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin;
  2. 断开小米路由器的电源,将U盘插入USB接口;
  3. 按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键;
  4. 等待3-5秒后安装完成之后,小米路由器会自动重启,之后您就可以尽情折腾啦 :)

备份原厂固件

进入ssh命令行模式后,执行cat /proc/mtd,可以看到以下分区信息:

root@XiaoQiang:~# cat /proc/mtd
dev: size erasesize name
mtd0: 0ff80000 00020000  "ALL"
mtd1: 00040000  00020000  "Bootloader"
mtd2: 00040000  00020000  "Config"
mtd3: 00040000  00020000  "Bdata"
mtd4: 00040000  00020000  "Factory"
mtd5: 00040000  00020000  "crash"
mtd6: 00080000  00020000  "crash_syslog"
mtd7: 00040000  00020000  "reserved0"
mtd8: 00400000  00020000  "kernel0"
mtd9: 00400000  00020000  "kernel1"
mtd10: 02800000  00020000  "rootfs0"
mtd11: 02800000  00020000  "rootfs1"
mtd12: 0a580000 00020000  "overlay"

我们需要插入U盘,把以上分区数据备份到U盘里,插入U盘会自动挂载到/extdisks/sda1,我是自动挂载到这里了,你确认下你是不是跟我一样,然后执行以下命令备份:

nanddump -o -f /extdisks/sda1/full_nand_backup.bin /dev/mtd0
nanddump -o -f /extdisks/sda1/mtd1_bootloader.bin /dev/mtd1
nanddump -o -f /extdisks/sda1/mtd4_factory.bin /dev/mtd4
nanddump -o -f /extdisks/sda1/mtd3_bdata.bin /dev/mtd3
nanddump -o -f /extdisks/sda1/mtd2_Config.bin /dev/mtd2
nanddump -o -f /extdisks/sda1/mtd5_crash.bin /dev/mtd5
nanddump -o -f /extdisks/sda1/mtd6_crash_syslog.bin /dev/mtd6
nanddump -o -f /extdisks/sda1/mtd7_reserved0.bin /dev/mtd7
nanddump -o -f /extdisks/sda1/mtd8_kernel0.bin /dev/mtd8
nanddump -o -f /extdisks/sda1/mtd9_kernel1.bin /dev/mtd9
nanddump -o -f /extdisks/sda1/mtd10_rootfs0.bin /dev/mtd10
nanddump -o -f /extdisks/sda1/mtd11_rootfs1.bin /dev/mtd11
nanddump -o -f /extdisks/sda1/mtd12_overlay.bin /dev/mtd12

起始最重要的只有前5个,其他不备份也行,以后恢复得靠这些备份

编译Openwrt

我这里使用的是这个开源项目:
https://github.com/immortalwrt/immortalwrt.git
编译方法我之前写过一篇博客编译x86版本的,过程大同小异
https://www.chengpei.top/archives/openwrtbian-yi
其中编译的目标得改改:

刷入方法

我在恩山论坛看了很多人的帖子,这个路由器大佬没有专门开发Breed,一般都是用的基于R3G修改的,而且由于openwrt分区布局的原因,该breed并无法直接刷入固件,需要使用特殊手法刷入,具体情况可以看这个帖子:https://www.right.com.cn/forum/thread-3208008-1-1.html
我嫌麻烦就不打算动官方的bootloader了,我找到了openwrt官方的一个文档:
https://openwrt.org/toh/xiaomi/mi_router_3_pro#unlocking_installing_openwrt
决定使用官方的方法刷,保留原厂的bootloader,好处是以后恢复原厂固件比较简单,刷入相关的命令:

# 进入u盘(具体看你的u盘是不是被自动挂载到了这里)
cd /extdisks/sda1 #(can be different if you remove and reinsert the usb stick)
# 给固件重命名一个短点的名字,注意必须使用factory包,不能使用其他
mv openwrt-ramips-mt7621-xiaomi_mir3p-squashfs-factory.bin factory.bin # give it a shorter name
# 设置启动系统为sys2
nvram set flag_try_sys1_failed=1 
nvram set flag_try_sys2_failed=0 
nvram set flag_boot_success=0 
nvram commit
# 写入factory固件头4M的数据到kernel1分区
dd if=factory.bin bs=1M count=4 | mtd write - kernel1
# 清除rootfs0、rootfs1、overlay的数据
mtd erase rootfs0
mtd erase rootfs1
mtd erase overlay
# 跳过factory固件前4M数据,把后面的数据写入rootfs0分区
dd if=factory.bin bs=1M skip=4 | mtd write - rootfs0
# 重启
reboot

后面如果不想用openwrt可以执行以下命令切换启动系统为sys1:

fw_setenv flag_try_sys1_failed 0
fw_setenv flag_try_sys2_failed 1
fw_setenv flag_boot_success 0

不过之前原厂系统已经被擦除了,所以切换后还得通过u盘刷回原厂固件,只需要去官网下载固件然后重命名为 miwifi.bin

  • miwifi.bin 复制到 U 盘根目录(必须是 FAT/FAT32)。
  • 关电插 U 盘至路由器 USB。
  • 按住 Reset 再接电源。
  • 保持按住直到状态灯变黄色闪烁,然后等待5 分钟即可

因为原厂 bootloader 有识别 miwifi.bin 并执行自动恢复的机制,这就是保留原厂bootloader的好处

0

评论区