小米路由器3G R3G 刷入Breed和OpenWrt 20.02.2 的記錄


小米 R3G 參數

  • Architecture: MIPS
  • Vendor: Mediatek
  • Bootloader: U-Boot
  • System-On-Chip: MT7621 family
  • CPU/Speed: mipsel_24kc @ 880MHz 2 core
  • Flash: 128MB ESMT NAND
  • RAM: 256MB - NT 5C C 128M16 FP-DI,DDR3-1600-11-11-11
  • Wireless: MT7603/MT7612 2.4GHz/5GHz 802.11an+ac
  • Ethernet: 1000 Mbit/s / vlan support
  • USB: 1x 3.0

路由器刷入開發版ROM並開啟SSH

為了寫入Bootloader, 要開啟SSH, 要開啟SSH, 就需要將小米路由器的 ROM 更新為開發版.

在小米的 miwifi 下載頁面找到路由器對應的開發版 ROM(R3G ROM 開發版).

ROM 的升級有兩種方式

  1. 登陸路由器后台在線升級
  2. 如果前一個方式不行, 可以將其拷貝到U盤根目錄, 並命名為 miwifi.bin, 隨后斷開電源, 插上U盤, 並按住 reset 按鈕后插入電源, 等到指示燈變為黃色閃爍(10-15秒)后松開 reset 鍵, 之后路由器將更新 ROM 並重啟進入正常狀態(指示燈變為藍色常亮).

獲取SSH權限

  1. 先注冊小米賬號.
  2. 安裝MiWiFi手機APP, 連上路由器WIFI后綁定路由器, 綁定教程請參見 https://zhidao.baidu.com/question/2011024461729333668.html
  3. 綁定后, 登陸 http://d.miwifi.com/rom/ssh, 點擊"下載工具包"
  4. 下載工具包的鏈接旁邊有root密碼, 需要記一下

下載工具包時顯示的信息

工具包使用方法:小米路由器需升級到開發版0.5.28及以上, 小米路由器mini需升級到開發版0.3.84及以上, 小米路由器3即將支持. 注意:穩定版不支持
請將下載的工具包bin文件復制到U盤(FAT/FAT32格式)的根目錄下, 保證文件名為miwifi_ssh.bin;
斷開小米路由器的電源, 將U盤插入USB接口;
按住reset按鈕之后重新接入電源, 指示燈變為黃色閃爍狀態即可松開reset鍵;
等待3-5秒后安裝完成之后, 小米路由器會自動重啟, 之后您就可以盡情折騰啦 :)

開啟 SSH

  1. 將下載的工具包bin文件復制到U盤(FAT/FAT32格式)的根目錄下, 保證文件名為miwifi_ssh.bin;
  2. 斷開小米路由器的電源, 將U盤插入USB接口;
  3. 按住reset按鈕之后重新接入電源, 指示燈變為黃色閃爍狀態(10-15秒)即可松開reset鍵
  4. 等待3-5秒后安裝完成之后, 小米路由器會自動重啟, 藍燈常亮
  5. 登錄ssh的密碼, 在剛才下載工具包的界面上

如果ssh連接遇到錯誤

Unable to negotiate with 192.168.31.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

需要手動指定oKexAlgorithms

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 root@192.168.31.1

備份

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

下載breed https://breed.hackpascal.net/ 在下面找到 breed-mt7621-xiaomi-r3g.bin, 當前版本的日期是 2021-12-16. 這個版本有專為R3G准備的"小米R3G設置", "環境變量編輯", "小米 R3G Bdata"配置界面

使用winscp

  1. 使用 winscp 登入路由器
  2. 將剛才下載的breed-mt7621-xiaomi-r3g.bin上傳到路由器的/tmp文件夾下, 並改個簡單點的文件名 breed.bin

使用scp命令

scp -oKexAlgorithms=+diffie-hellman-group1-sha1 "somewhere/breed-mt7621-xiaomi-r3g.bin" root@192.168.31.1:/tmp/

執行命令

mtd -r write /tmp/breed.bin Bootloader

寫入完成后會自動重啟, 注意, 這時候直接重啟是肯定回不去原來小米路由器的系統的, 因為Breed里還有個參數沒設置.

看燈變紫色后直接拔掉電源, 拿牙簽回形針之類的東西頂住reset孔加電, 看到燈快速閃爍的時候再松開reset孔. 這時候路由器就已經進入了Breed系統. 在電腦的命令行cmd中通過ipconfig查看IP, 能看到電腦獲取到192.168.1.x之類的IP. 在瀏覽器中訪問192.168.1.1 就可以進入breed控制台.

配置 breed

  1. 在小米 R3G 設置中, 刪除normal_firmware_md5這個鍵值, 因為刷新刷的固件 md5 值與原來的不一致會導致無法開機(刪了, 不刪是否不能開機未驗證)
  2. 在環境變量編輯中, 添加一個環境變量, 變量名為 xiaomi.r3g.bootfw, 值為2. 這個必須要設置, 否則進不去原來的小米系統.
  3. 然后拔電再加電重啟路由器, 之后就會進入小米系統, 因為還需要在ssh下寫入OpenWrt.

參數說明 xiaomi.r3g.bootfw

如果寫入 Breed 到 bootloader, 這個參數是必須的. Breed的啟動流程如下

  1. 如果 kernel0 存在, 那么啟動 kernel0
  2. 如果 kernel0 不存在, kernel1 存在, 那么啟動 kernel1
  3. 如果 kernel0 和 kernel1 都存在, 則檢查環境變量 xiaomi.r3g.bootfw 的值, 如果存在且值為2, 那么啟動 kernel1, 否則啟動 kernel0

如果通過mtd寫入了OpenWrt 到Kernel1, 但是不寫這個環境變量, Breed就會從kernel0啟動, 無法進入系統, 然后重啟, 再次從kernel0啟動, 這樣一直循環下去.

寫入固件

因為小米R3G的存儲使用的是NAND, 和普通的路由器不一樣, 所以寫入方式不太一樣.

單文件固件

對於單文件的第三方固件, 包括官方的固件, 可以和以往的固件一樣, 啟動到 Breed 界面下, 在界面中直接上傳刷入.

OpenWrt 20.02

對於 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文件, 按之前的方法通過winscp或者scp命令上傳到 /tmp 目錄下,執行下面的命令寫入固件

cd /tmp
# 寫入第二個kernel分區, 如果寫入第一個目標是 kernel0
mtd write openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1
# 寫入rootfs分區
mtd write openwrt-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0
# 直接reboot
reboot

使用kernel1.bin和rootfs0.bin寫入, 啟動OpenWrt后通過df -h看到的是正常的文件系統, 可以直接使用, 不需要再刷sysupgrade.bin

切換OpenWrt和原生固件

原Bootlaoder

如果使用原Bootloader, 切換啟動分區是用的flag_try_sys1_failedflag_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分區啟動

  1. 將官方固件放在U盤根目錄下, fat32格式, 文件改名為 miwifi.bin 接上路由器
  2. ssh連接路由器執行
fw_setenv flag_try_sys1_failed 0
fw_setenv flag_try_sys2_failed 1
fw_setenv flag_boot_success 0
  1. 路由器斷電, 按住 reset 鍵, 加電, 等待黃色燈閃爍, 松開即可
  2. 啟動后進入官方系統

使用Breed作為Bootloader

通過xiaomi.r3g.bootfw變量進行控制

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM