• 小米路由器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
    

    等重启后, 拔掉电源, 按住路由的reset键开机, 等到路由的灯闪烁的时候, 松开reset键, 在cmd中通过ipconfig查看IP, 当电脑获取到192.168.1.x的IP后, 在浏览器中访问192.168.1.1 就可以进入breed控制台

    配置 breed

    • 在小米 R3G 设置中, 删除normal_firmware_md5这个键值, 因为刷新刷的固件 md5 值与原来的不一致会导致无法开机(删了, 不删是否不能开机未验证)
    • 在环境变量编辑中, 添加一个环境变量, 变量名为 xiaomi.r3g.bootfw, 值为2

    关于第三个操作, 如果已经写入了breed到bootloader, 这个是必须的. breed的启动流程如下

    1. 如果 kernel0 存在, 那么启动 kernel0
    2. 如果 kernel0 不存在, kernel1 存在, 那么启动 kernel1
    3. 如果 kernel0 和 kernel1 都存在, 则检查环境变量 xiaomi.r3g.bootfw 的值, 如果存在且值为2, 那么启动 kernel1, 否则启动 kernel0
    4. 在下面通过mtd写入OpenWrt后, 如果不写这个环境变量, 会从kernel0启动, 然后无法进入系统, 重启, 再次从kernel0启动, 这样一直循环.

    写入固件

    第三方固件

    对于单文件的第三方固件, 可以在breed中上传刷入

    OpenWrt 20.02.2

    对于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

    切换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变量进行控制

    参考

  • 相关阅读:
    Java Arrays 的基础知识
    Java 基础知识
    C
    165. 小猫爬山 (dfs)
    164. 可达性统计
    数码 美团资格赛(整数分块)
    1079 中国剩余定理(模板)
    5814: 余数之和(整数分块)
    Greedy Sequence(主席树-区间小于每个数的最大值)
    XKC's basketball team(单调栈+二分)
  • 原文地址:https://www.cnblogs.com/milton/p/16163521.html
Copyright © 2020-2023  润新知