生命不息, 折腾不止…


本篇由于创作时间过于久远,部分下载链接可能失效,因长期未更新,教程仅供参考。

准备工作

你至少需要以下工具:

  • 路由器本体
  • 网线
  • 一个已格式化为FAT/FAT32格式的U盘, 用来刷开发者固件和ssh激活工具
  • 一根怼 Reset 钮的针
  • Windows用户需要一个SSH软件(例如: putty
  • 小米路由器客户端 , 用来绑定你的小米账号

SSH到路由器

路由器重启后指示灯会变为蓝色, 若变为红色则为刷机失败。

安装开发者固件并开启SSH权限:

  1. MiWiFi下载页面 下载所需要的路由器开发者固件(ROM -> ROM for R3G开发版),命名为 miwifi.bin

  2. 路由器断电, 将下载好的开发者固件放入U盘插入路由器USB接口, 捅住reset扭接上电源后待指示灯为黄色闪烁时松开, 数分钟后路由器会自动重启, 此过程不要乱动路由器。

  3. 小米路由器客户端登陆小米账号绑定路由器设备, 此过程需要路由器联网。

  4. MiWiFi开放平台 登陆小米账号下载ssh激活工具命名为 miwifi_ssh.bin , 记下root密码。

  5. 操作方式同第二步骤, 刷入ssh激活工具。

SSH到路由器:

  • Windows系统用putty, ip为 191.168.31.1 , 用户名: root , 密码为下载激活ssh工具时记下的密码。

  • Unix/Linux系统终端执行: ssh [email protected]

    如果在ssh到路由器时遇到no matching key exchange method found错误,编辑 ~/.ssh/config , 加入下面两行:

    Host *
        KexAlgorithms +diffie-hellman-group1-sha1
    

刷入Bootloader(推荐/可选)

该步骤可选是因为Breed不支持直接刷入Openwrt固件, 可参考 这篇帖子 , 不过为了防止变砖, 还是推荐刷Breed。

Breed原作者为hackpascal, 此处为下载地址 , 文件名为 breed-mt7621-xiaomi-r3g.bin

第一种方法是ssh到路由器后通过 wget 下载breed文件再刷入(需要确保路由器联网), 下载地址为https所以需要加上 --no-check-certificate 参数。

cd /tmp
wget --no-check-certificate https://breed.hackpascal.net/breed-mt7621-xiaomi-r3g.bin -O breed.bin
mtd -r write breed.bin Bootloader

另一种方法是将breed通过U盘拷贝到路由器再刷入。

mkdir /tmp/sdcard
mount /dev/sda1 /tmp/sdcard
mtd -r write /tmp/sdcard/breed.bin Bootloader

路由器刷写完毕后会自动重启, 在写入Breed的过程中不要动路由器

刷机

下载所需固件:

使用Breed的刷机方法

按照hackpascal的说法是:

如果kernel0存在kernel1不存在, 那么启动kernel0 如果kernel1存在kernel0不存在, 那么启动kernel1 如果kernel0和kernel1都存在, 那么检查环境变量 xiaomi.r3g.bootfw 的值, 如果存在且值为 2, 那么启动kernel1, 否则启动kernel0

简单来说就是:路由器有两个内核, 需要在Breed里设置环境变量让路由器启动kernel1。

  1. 刷入Openwrt固件到Kernel1
mtd write openwrt-18.06.2-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1
mtd write openwrt-18.06.2-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0
  1. 路由器断电, 捅住reset按钮后通电, 待指示灯变为蓝色闪烁后用网线连接路由器到电脑, 浏览器打开网址 192.168.1.1 , 进入Breed界面。

  2. 在环境变量编辑里添加 xiaomi.r3g.bootfw 字段, 值为 2 ,保存后重启即可进入Openwrt。

没有刷入Breed的刷机方法

OpenWrt官网提供的教程 是在没有刷入Breed的情况下刷入OpenWrt固件的。

ssh到路由器, 导入固件后刷机。

mtd write openwrt-18.06.2-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1
mtd write openwrt-18.06.2-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0
nvram set flag_try_sys1_failed=1
nvram commit