[破事氵] 给我的 AX6 刷入 U-boot 以便于刷入第三方固件

2024-08-02
13分钟阅读时长

背景

我其实一直想给我的 AX6 刷入第三方固件了,奈何我一直以来都很偷懒,总是抱着“又不是不能用”的心态去用这台无线路由器的。并且,处于对第三方固件稳定性可靠性的不信任,我也一直没有寻找合适的固件。AX6 目前的开源无线驱动效果也不如原厂固件,损失无线性能是板上钉钉的事情,这也导致我刷机的积极性不高。但由于一个契机,我来到了上海,不满足于使用运营商提供的弱鸡光猫的无线上网,我决定把这台路由器改造成好用的模样。

刷机是一个多月前的事情了,当时由于各种事情没有进行记录,所以如果本文的记录与实际有偏差,请见谅。

好的,已经是半年前的事情了,现在我需要给另外两台 AX6 和一台 AX3600 刷机,便补完这篇文章。

准备

AX6 官方固件 1.0.16 或 1.0.18

AX6 的 1.0.16 版本可以在 下载。小米官网的Link:http://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/ra69/miwifi_ra69_firmware_a7244_1.0.16.bin

AX6 的 1.0.18 版本可以在 下载。小米官网的Link:http://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/ra69/miwifi_ra69_firmware_45a77_1.0.18.bin

AX3600 官方固件

AX3600 的 1.0.17 版本可以在 下载。小米官网的Link:http://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/r3600/miwifi_r3600_firmware_5da25_1.0.17.bin

注入脚本(Python 脚本)

可以在 下载。

SSH 密码计算工具(Shell 脚本)

可以在 下载。

过渡用 QSDK OpenWrt: xiaomimtd12.bin

可以在 下载。(CRC32: 99e457c6)

分区表文件

可以在 下载。

第三方 U-boot

可以在 下载。

OpenWRT 固件

我们使用了 https://github.com/xiangfeidexiaohuo/AE86Wrt/ 的固件。稳定性待测。

降级

对于 AX6,目前有两个版本的固件能够通过漏洞打开 SSH,分别是miwifi_ra69_firmware_a7244_1.0.16.binmiwifi_ra69_firmware_45a77_1.0.18.bin。对于 AX3600,需要使用 miwifi_r3600_firmware_5da25_1.0.17.bin

降级过程也很简单,直接通过原版固件的在线升级功能进行降级即可,建议清空所有数据。

img

穷途末路,怎么解锁 SSH?(AX6)

网上大部分的教程都需要一台额外的带无线功能的 OpenWrt 路由器,但我刚安顿下来,手上只有笔记本电脑(还是 M1 MacBook)、能开热点的 Android 手机和运营商提供的光猫了。

可是我手上并没有额外的带无线功能的 OpenWrt 路由器啊,而且人也不在家,也根本没有获取的条件。于是我分析了网上这些脚本,发现这玩意开 SSH 之所以需要一台额外的带无线功能的 OpenWrt 路由器,是因为该漏洞利用的是小米路由器跨机备份功能,当无线路由器 A 备份时,需要连接到另一个网关为 169.254.31.1 的小米路由器 B,所以我们可以利用这个特点,将设备设置为静态 IP 地址,并且在 80 端口上开一个可以处理 POST 请求时,注入无线路由器 A 使其打开 SSH (dropbear) 的服务。

但是我手上甚至没有一台能够自定义网段的无线路由器或者其他什么设备了,于是经过思想斗争,冒着光猫爆炸的风险,我决定用光猫试试。

这个方法的要点在于,你需要一台能够向外广播指定 DHCP IP 段的跳板 AP ,从而让小米路由器和 MacBook 在同一个网段下,进行解锁 SSH 的操作。

于是我把光猫的 LAN IPv4 地址设置成了169.254.31.3,并且把 DHCP 网段设置为 169.254.31.1-169.254.31.254

image-20240802下午35757030

光猫的 DHCP 服务要关掉,之前漏了这一点。否则会提示{"msg":"对端路由器不支持此功能","code":1646}

image-20250109下午85548678

而我的笔记本的 IPv4 地址需要手动设置为169.254.31.1,并且在防火墙打开该端口以允许外部访问。建议使用有线网络连接被解锁路由器,不要使用无线网络。

image-20240802下午40009182

注入脚本已经准备好,在本地使用以下命令运行:python3 http_inject.py(记得提前安装依赖包:requestflask)。

下面我们就可以解锁 AX6 的 SSH 了。

打开 AX6 的 Web 管理页面,登录后,将stock=后面的字符串deadbeefcafefeeddeadbeefcafefeed拷贝下来,并手工构造一个请求:

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/extendwifi_connect?ssid=CMCC-bef3&password=1145141919810

注意:这可能需要花费一点时间,并且有几率失败,请多尝试几次。

如出现 connect succces!(我没有打错字!) 则代表小米路由器已成功连接到我们的光猫。

routerB connect success

可以继续访问下一个 URL:

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqsystem/oneclick_get_remote_token?username=xxx&password=xxx&nonce=xxx

三个 xxx 随便填,不能为空。

或者这个(未测试)

http://192.168.31.1/cgi-bin/luci/;stok=ee9d9cea23fc167cddf2b5543110d3b3/api/xqsystem/extendwifi_connect_inited_router?ssid=op&password=12345678&admin_username=root&admin_password=password&admin_nonce=xxx

如果正常会显示和上面一样的结果。

此时我们看到有一个 POST 请求输出在控制台的日志中了,说明我们的 AX6 请求了这个接口,也就是说,注入大概成功了。

tg_image_807056879

SSH 密码本身可以通过 SN 算出来,网上也有算密码的教程,在 https://miwifi.dev/ssh 输入路由器的 SN 可以得到 SSH 密码,SN 可以看路由器屁股,也可以进小米路由器后台看。

我们打开终端,通过 SSH 登录 AX6,ssh [email protected],输入我们刚刚获取的密码,即可正常登录。到此为止,解锁 SSH 的全部操作就结束了。

解锁 SSH(万事俱备版)(AX6)

家里有 OpenWrt 的路由器(小米 AC2100),但是我懒得折腾,于是我还是把这台路由器当一个普通的跳板 AP 来使用。

这个方法的要点在于,你需要一台能够向外广播指定 DHCP IP 段的跳板 AP ,从而让小米路由器和 MacBook 在同一个网段下,进行解锁 SSH 的操作。

于是我把跳板 AP 的 LAN IPv4 地址设置成了 169.254.31.2,并且把 DHCP 网段设置为 169.254.31.1-169.254.31.254。

截屏2025-01-11 下午8.28.43.png

跳板 AP 的 DHCP 服务要关掉。不然会提示{"msg":"对端路由器不支持此功能","code":1646}

image-20250109下午85548678

我们把 MacBook 的地址也改成 169.254.31.1。

截屏2025-01-11 下午8.21.20.png

注入脚本已经准备好,在本地使用以下命令运行:python3 http_inject.py(记得提前安装依赖包:requestflask)。

在浏览器中访问:http://169.254.31.1/cgi-bin/luci/api/xqsystem/token 确定是否能正常访问到脚本。

此时你会注意到,上面的操作都是通过无线网络给小米路由器发送指令。下面的操作都是使用有线连接进行操作。我们连接小米路由器的 LAN 接口。

现在我们需要在小米路由器后台让它尝试连接。打开小米路由器的 Web 管理页面,登录后,将stock=后面的字符串deadbeefcafefeeddeadbeefcafefeed拷贝下来,并手工构造一个请求:

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/extendwifi_connect?ssid=KirinAP&password=12345678

注意:这可能需要花费一点时间,并且有几率失败,请多尝试几次。

如出现 connect succces!(我没有打错字!) 则代表小米路由器已成功连接到我们的跳板 AP。

image-20250109下午90547572

可以继续访问下一个 URL,其中 SSID 和密码要和之前的一样。

http://192.168.31.1/cgi-bin/luci/;stok=ee9d9cea23fc167cddf2b5543110d3b3/api/xqsystem/extendwifi_connect_inited_router?ssid=op&password=12345678&admin_username=root&admin_password=password&admin_nonce=xxx

如果正常会显示和上面一样的结果。

此时我们看到有一个 POST 请求输出在控制台的日志中了,说明我们的小米路由器请求了这个接口,也就是说,注入大概成功了。

169.254.31.1 - - [09/Jan/2025 21:06:37] "GET / HTTP/1.1" 404 -
169.254.31.1 - - [09/Jan/2025 21:06:37] "GET /favicon.ico HTTP/1.1" 404 -
ImmutableMultiDict([('username', 'root'), ('password', 'password'), ('nonce', 'xxx')])
169.254.31.2 - - [09/Jan/2025 21:08:45] "POST /cgi-bin/luci/api/xqsystem/token HTTP/1.1" 200 -

SSH 密码本身可以通过 SN 算出来,网上也有算密码的教程,在 https://miwifi.dev/ssh 输入路由器的 SN 可以得到 SSH 密码,SN 可以看路由器屁股,也可以进小米路由器后台看。

或者下载这个 Shell 脚本,跑一下:

> calc_pwd_from_sn.sh
SN: 19198/A0U114514
1a2b3c4d

我们打开终端,通过 SSH 登录小米路由器:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]

输入我们刚刚获取的密码,即可正常登录。

BusyBox v1.25.1 (2020-08-19 02:55:57 UTC) built-in shell (ash)

 -----------------------------------------------------
       Welcome to XiaoQiang!
 -----------------------------------------------------
  $$$$$$\  $$$$$$$\  $$$$$$$$\      $$\      $$\        $$$$$$\  $$\   $$\
 $$  __$$\ $$  __$$\ $$  _____|     $$ |     $$ |      $$  __$$\ $$ | $$  |
 $$ /  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ /  $$ |$$ |$$  /
 $$$$$$$$ |$$$$$$$  |$$$$$\         $$ |     $$ |      $$ |  $$ |$$$$$  /
 $$  __$$ |$$  __$$< $$  __|        $$ |     $$ |      $$ |  $$ |$$  $$<
 $$ |  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ |  $$ |$$ |\$$\
 $$ |  $$ |$$ |  $$ |$$$$$$$$\       $$$$$$$$$  |       $$$$$$  |$$ | \$$\
 \__|  \__|\__|  \__|\________|      \_________/        \______/ \__|  \__|

到此为止,解锁 SSH 的全部操作就结束了。

备份

首先备份mtd1和mtd7:

dd if=/dev/mtd1 of=/tmp/mtd1_backup.bin
dd if=/dev/mtd7 of=/tmp/mtd7_backup.bin

备份到/tmp,可以通过scp等命令下载在本地或者其他位置保存起来

扩容,刷入 UBoot

设置 nvram 环境变量,开启必要的选项,输入以下命令:

nvram set flag_last_success=0
nvram set flag_boot_rootfs=0
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram set boot_wait=on
nvram set uart_en=1
nvram set telnet_en=1
nvram set ssh_en=1
nvram commit

接下来 mtd 写入备份的 qsdk 固件,scp 把固件 xiaomimtd12.bin 传到路由器 tmp 目录,输入以下命令:

mtd write /tmp/xiaomimtd12.bin rootfs
root@XiaoQiang:~# mtd write /tmp/xiaomimtd12.bin rootfs
Unlocking rootfs ...

Writing from /tmp/xiaomimtd12.bin to rootfs ...

接下来,断电,重新启动路由器。我们刚刚修改了分区表,写入完成后一定要记得断电重启!

操作完成后我们一定要将路由器断电重启,也就是重新插拔电源。这里有一点要特别注意,只要是涉及分区表的操作,操作完成后一定要断电重启,否则会导致路由器变砖。

我一开始以为刷砖了,因为我的扩展坞的灯一直不亮,把网线插 Windows 主机上也不亮。结果折腾了一会之后,我先用取卡针捅路由器的 Reset 接口,之后等 System 灯常亮后多次闪烁后常亮(—–././././././—–),之后再拔除电源后重新接入电源,就可以了。md 这玩意也玩概率的吗,我最后还是先 disable windows 下的网卡,再 enable,才连接上。

启动起来浏览器 192.168.1.1,进入 qsdk 固件,这已经是 12 分区底包了。

qsdk-openwrt-ui

接下来刷入 Uboot。刷机操作分为两步:

  • 合并分区
  • 刷入引导程序

合并分区通过将扩容分区表刷入到 mtd1 分区,从而把 12、13、14 分区进行合并,合并后的系统分区可达 104 兆,这已经是 AX6 128 兆闪存的极限了。 刷入引导程序是在 mtd7 分区刷入改版的 uboot 引导程序替换官方 uboot 引导程序。

首先上传要刷入的文件,打开 winscp,文件协议选择 scp,主机名为 192.168.1.1,用户名 root,密码为空,成功登录后在路由器系统选择 tmp 文件夹,选择扩容分区表文件 ax6-uboot-mibib.bin 和改版 uboot 文件 ax6-uboot.bin 进行上传。

winscp-files

上传完毕后,打开 cmd 登录 ssh:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]

我们能看到如下界面:

qpsk-openwrt-ssh-cli

现在,在过渡 openwrt 系统下输入以下命令查看分区确认 mtd1 和 mtd7 分区是否存在:

cat /proc/mtd

会出现以下分区表(看有没有 14 分区来判断扩容了吗):

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "0:SBL1"
mtd1: 00100000 00020000 "0:MIBIB"
mtd2: 00300000 00020000 "0:QSEE"
mtd3: 00080000 00020000 "0:DEVCFG"
mtd4: 00080000 00020000 "0:RPM"
mtd5: 00080000 00020000 "0:CDT"
mtd6: 00080000 00020000 "0:APPSBLENV"
mtd7: 00100000 00020000 "0:APPSBL"
mtd8: 00080000 00020000 "0:ART"
mtd9: 00080000 00020000 "bdata"
mtd10: 00080000 00020000 "crash"
mtd11: 00080000 00020000 "crash_syslog"
mtd12: 023c0000 00020000 "rootfs"
mtd13: 023c0000 00020000 "rootfs_1"
mtd14: 01ec0000 00020000 "overlay"
mtd15: 00080000 00020000 "rsvd0"
mtd16: 00554000 0001f000 "kernel"
mtd17: 019cb000 0001f000 "ubi_rootfs"
mtd18: 0001f000 0001f000 "rootfs_data"
root@OpenWrt:~#

输入下面两行命令,擦除 mtd1 分区,再写入刚上传的扩容分区表文件:

mtd erase /dev/mtd1
mtd write /tmp/ax6-uboot-mibib.bin /dev/mtd1

完成后再输入下面两行命令,擦除 mtd7 分区并写入刚上传的改版 uboot 引导程序。

mtd erase /dev/mtd7
mtd write /tmp/ax6-uboot.bin /dev/mtd7

改完分区表,拔电源,一定要断电重启(不然直接砖!!!!!!!!!!!!!!!!)然后按住 reset 按钮插电源,直接进入 uboot 引导刷机(因为合并完现在没系统)

本地电脑 ip 设置成静态 192.168.1.2-255。

浏览器登陆 192.168.1.1,可以看到如下界面:

uboot-ui

刷完记得改回自动获取 IP。

这样我们就完成了所有的过程。

参考文献

附录:AX3600,解锁竟是如此简单?

ax3600 扩容以及刷入uboot,转自tb6750217大佬

分享给需要的朋友

-----------------------------------------------------------------------------


特别说明:每行命令都单独输入,仔细确认返回的信息,保证没有错误信息
保险起见:拔掉所有网线,只连接一条ax3600路由LAN口到电脑的网线
*已经是openwrt,刷回小米固件重新操作即可*

第1步:解锁ssh
https://www.right.com.cn/FORUM/f ... ht=3600%BF%AA%2Bssh

请备份mtd9!!!
在小米 AX3600 上执行
mkdir /tmp/syslogbackup/
dd if=/dev/mtd9 of=/tmp/syslogbackup/mtd9
浏览器请求该地址下载备份 http://192.168.31.1/backup/log/mtd9

第2步:12分区刷QSDK底包固件
设置env开启必要的选项,ssh下打以下命令
nvram set flag_last_success=0
nvram set flag_boot_rootfs=0
nvram set boot_wait=on
nvram set uart_en=1
nvram set telnet_en=1
nvram set ssh_en=1
nvram commit

第3步:mtd写入备份的qsdk固件,scp把固件xiaomimtd12.bin传到路由器tmp目录,ssh命令打以下:
mtd write /tmp/xiaomimtd12.bin rootfs

第4步:拨电源重新启动路由器
启动起来浏览器192.168.1.1,成功从12分区启动

-----------------刷Uboot-----------------
如何验证已进入mtd12分区:
ssh输入下面的命令,返回值 0是12分区,1则是13分区
如果第一句提示:not found,请换用第二句
nvram get flag_last_success
fw_printenv -n flag_boot_rootfs

如果当前在13分区,ssh输入以下命令切换至mtd12分区,输入完成后等待重启,或者等灯灭后重新拔插电重启
fw_setenv flag_last_success 0
fw_setenv flag_boot_rootfs 0
reboot

注意:一定要确保切到了12分区,再进行往下的操作

A,将ax3600-mibib.bin和uboot-xiaomi-ax3600.bin文件,上传至路由tmp目录下

B,ssh输入以下命令查看分区确认mtd1和mtd7分区是否存在,不用管分区个数
cat /proc/mtd

会出现以下详细列表:
root@lede:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "0:sbl1"
mtd1: 00100000 00020000 "0:mibib"
mtd2: 00300000 00020000 "0:qsee"
mtd3: 00080000 00020000 "0:devcfg"
mtd4: 00080000 00020000 "0:rpm"
mtd5: 00080000 00020000 "0:cdt"
mtd6: 00080000 00020000 "0:appsblenv"
mtd7: 00100000 00020000 "0:appsbl"
mtd8: 00080000 00020000 "0:art"
mtd9: 00080000 00020000 "bdata"
mtd10: 00080000 00020000 "crash"
mtd11: 00080000 00020000 "crash_syslog"
mtd12: 023c0000 00020000 "rootfs"
mtd13: 023c0000 00020000 "rootfs_1"
。。。

C,确认无误后开始刷写,ssh依次输入以下,完成后拔掉电源

mtd erase /dev/mtd1
mtd write /tmp/ax3600-mibib.bin /dev/mtd1
mtd erase /dev/mtd7
mtd write /tmp/uboot-xiaomi-ax3600.bin /dev/mtd7

D, 进入Uboot刷写固件
再次插入电源并同时使用卡针或任何物件按住AX3600路由器Reset孔5秒,蓝色闪几下,黄灯亮一下

电脑网络设置为手动填写,IPv4: 192.168.1.10,子网掩码: 255.255.255.0,网关: 192.168.1.1
浏览器输入 192.168.1.1 进入不死 Uboot

注意:Uboot只支持factory固件的刷入!


关于3600刷了uboot返回小米固件参考教程:
https://www.right.com.cn/forum/f ... ypeid%26typeid%3D44


-----------------------------------------------------------------
AX6#AX3600解锁刷机&双系统教程蓝奏云:

https://wws.lanzoui.com/b02c8pkle
密码:2mjy

1. 登录小米路由后台,获取stok后面的值

stok=b6a8d01231481afb59efe631995c2a6e

2. 获取SSH

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B

<STOK> 替换为上一步的值,替换完成后复制到浏览器打开。

如果浏览器反馈显示 {“code”:0} 内容,则表示 操作成功

3. 修改默认 SSH 密码为 admin

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B

<STOK> 替换为第一步的值,替换完成后复制到浏览器打开。

如果浏览器反馈显示 {“code”:0} 内容,则表示 操作成功

4. 备份

现在应该可以通过 ssh 连接到 小米 AX3600 了,终端里执行(密码是 admin)

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]

应该会显示如下内容:


BusyBox v1.25.1 (2020-02-19 10:57:26 UTC) built-in shell (ash)

 -----------------------------------------------------
       Welcome to XiaoQiang!
 -----------------------------------------------------
  $$$$$$\  $$$$$$$\  $$$$$$$$\      $$\      $$\        $$$$$$\  $$\   $$\
 $$  __$$\ $$  __$$\ $$  _____|     $$ |     $$ |      $$  __$$\ $$ | $$  |
 $$ /  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ /  $$ |$$ |$$  /
 $$$$$$$$ |$$$$$$$  |$$$$$\         $$ |     $$ |      $$ |  $$ |$$$$$  /
 $$  __$$ |$$  __$$< $$  __|        $$ |     $$ |      $$ |  $$ |$$  $$<
 $$ |  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ |  $$ |$$ |\$$\
 $$ |  $$ |$$ |  $$ |$$$$$$$$\       $$$$$$$$$  |       $$$$$$  |$$ | \$$\
 \__|  \__|\__|  \__|\________|      \_________/        \______/ \__|  \__|


root@XiaoQiang:~# 

在小米 AX3600 上执行:

mkdir /tmp/syslogbackup/
dd if=/dev/mtd9 of=/tmp/syslogbackup/mtd9

浏览器请求该地址下载备份 http://192.168.31.1/backup/log/mtd9

备份 mtd1 和 mtd7

在小米 AX3600 上执行:

dd if=/dev/mtd1 of=/tmp/syslogbackup/mtd1
dd if=/dev/mtd7 of=/tmp/syslogbackup/mtd7

浏览器请求该地址下载备份 http://192.168.31.1/backup/log/mtd1 / http://192.168.31.1/backup/log/mtd7

5. 12分区刷入过渡用 QSDK OpenWrt 底包固件

这是 AX3600 原版分区表:

root@XiaoQiang:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "0:SBL1"
mtd1: 00100000 00020000 "0:MIBIB"
mtd2: 00300000 00020000 "0:QSEE"
mtd3: 00080000 00020000 "0:DEVCFG"
mtd4: 00080000 00020000 "0:RPM"
mtd5: 00080000 00020000 "0:CDT"
mtd6: 00080000 00020000 "0:APPSBLENV"
mtd7: 00100000 00020000 "0:APPSBL"
mtd8: 00080000 00020000 "0:ART"
mtd9: 00080000 00020000 "bdata"
mtd10: 00080000 00020000 "crash"
mtd11: 00080000 00020000 "crash_syslog"
mtd12: 023c0000 00020000 "rootfs"
mtd13: 023c0000 00020000 "rootfs_1"
mtd14: 01ec0000 00020000 "overlay"
mtd15: 00080000 00020000 "rsvd0"
mtd16: 0041e000 0001f000 "kernel"
mtd17: 015cc000 0001f000 "ubi_rootfs"
mtd18: 01876000 0001f000 "data"

设置env开启必要的选项,ssh下打以下命令

nvram set flag_last_success=0
nvram set flag_boot_rootfs=0
nvram set boot_wait=on
nvram set uart_en=1
nvram set telnet_en=1
nvram set ssh_en=1
nvram commit

接下来,mtd12写入备份的qsdk固件,scp把固件xiaomimtd12.bin传到路由器tmp目录,ssh命令打以下:

mtd write /tmp/xiaomimtd12.bin rootfs

接下来,拨电源重新启动路由器,启动起来浏览器192.168.1.1,成功从12分区启动

6. 扩容,刷入uboot

如何验证已进入mtd12分区:

ssh输入下面的命令,返回值 0是12分区,1则是13分区

如果第一句提示:not found,请换用第二句

nvram get flag_last_success
fw_printenv -n flag_boot_rootfs

如果当前在13分区,ssh输入以下命令切换至mtd12分区,输入完成后等待重启,或者等灯灭后重新拔插电重启

fw_setenv flag_last_success 0
fw_setenv flag_boot_rootfs 0
reboot

注意:一定要确保切到了12分区,再进行往下的操作

  1. 将ax3600-mibib.bin和uboot-xiaomi-ax3600.bin文件,上传至路由tmp目录下

  2. ssh输入以下命令查看分区确认mtd1和mtd7分区是否存在,不用管分区个数

    cat /proc/mtd
    

    会出现以下详细列表:

    root@lede:~# cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 00100000 00020000 "0:sbl1"
    mtd1: 00100000 00020000 "0:mibib"
    mtd2: 00300000 00020000 "0:qsee"
    mtd3: 00080000 00020000 "0:devcfg"
    mtd4: 00080000 00020000 "0:rpm"
    mtd5: 00080000 00020000 "0:cdt"
    mtd6: 00080000 00020000 "0:appsblenv"
    mtd7: 00100000 00020000 "0:appsbl"
    mtd8: 00080000 00020000 "0:art"
    mtd9: 00080000 00020000 "bdata"
    mtd10: 00080000 00020000 "crash"
    mtd11: 00080000 00020000 "crash_syslog"
    mtd12: 023c0000 00020000 "rootfs"
    mtd13: 023c0000 00020000 "rootfs_1"
    。。。
    
  3. 确认无误后开始刷写,ssh依次输入以下,完成后拔掉电源

    mtd erase /dev/mtd1
    mtd write /tmp/ax3600-mibib.bin /dev/mtd1
    mtd erase /dev/mtd7
    mtd write /tmp/uboot-xiaomi-ax3600.bin /dev/mtd7
    
  4. 进入Uboot刷写固件

    再次插入电源并同时使用卡针或任何物件按住AX3600路由器Reset孔5秒,蓝色闪几下,黄灯亮一下

    电脑网络设置为手动填写,IPv4: 192.168.1.10,子网掩码: 255.255.255.0,网关: 192.168.1.1

    浏览器输入 192.168.1.1 进入不死 Uboot

    注意:Uboot只支持factory固件的刷入!