前情提要

月初搬家了,为了保证网络设备最高控制权掌握在自己手里,于是在新房子拉了两条宽带,自己加钱独占一条,两个舍友合租一条。但是因为分家的时候,原来的AX3000分给了我的舍友,自己只剩一个远古时代的AC2100勉强使用。然而MT7621确实已经老了,再加上机器本身因硬件问题并不稳定,半小时一掉线两小时一重启,最后忍无可忍上了这台AX6,以RA69之名62块钱(含邮费)到手,但是原装固件懂得都懂,于是有了这篇文章。

说明

本篇文章适用于 红米 AX6,以及后出的小米 AX3000 / AX9000机型。对于猴米新 AX3000 产品,推荐立即退货。

因红雨在自己折腾的时候并没有截图记录,所以本文图源网络,侵删。

Warning!

本文采取的方式将会使你刷回官方固件的难度大大增加!执行过程中请若未提到请尽量采用有线方式连接你的AX6!否则可能出现包括但不限于路由器变砖,心态爆炸,键盘,鼠标等外设被砸坏,血压升高,眼前一黑等症状。为了您的健康和您的路由器正常工作,请不要采取任何冒险的操作!除非你知道你在做什么并且准备为此承担其可能的后果!

准备

  • 一台搭载了 OpenWrt 系统的无线路由器(下称辅助路由器)
  • 红米 AX6(Redmi RA69)
  • 一台支持网线连接的电脑(下称电脑)

解锁SSH

登入 AX6 后台,检查固件版本。

推荐的版本号为:MiWiFi 稳定版 1.0.16(点此下载),本教程仅保证在该版本下有效

若版本号不匹配,请先升级 / 降级固件。

将电脑与辅助路由器通过有线连接

进入源码目录,假设辅助路由器地址为 192.168.1.1,则:

这里下载wireless.sh。

使用WinSCP将wireless.sh上传到辅助路由器的root目录下。

然后通过 SSH 连接,执行下面的命令(按回车确认)

警告: 执行本脚本会更改您的网络和无线设定,执行之前请务必备份相关数据

sh /root/wireless.sh

返回结果
返回结果

将电脑与辅助路由器的有线连接断开,连接到你的AX6上。

登入路由器后台,获取 STOK(http://192.168.31.1/cgi-bin/luci/;stok=xxx 其中的 xxx 即为 STOK)

然后访问下面的 URL(STOK,ssid和pwd替换后均不含尖括号):

http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/xqsystem/extendwifi_connect_inited_router?ssid=<ssid>&password=<pwd>&admin_username=root&admin_password=admin&admin_nonce=xxx

其中 <stok>为上一步获得到stok值, <ssid>为辅助路由器的wifi名 <pwd>为辅助路由器的wifi密码 ,请根据实际情况填写。

等待一会,当浏览器显示 code 0 则表示 破解SSH成功, root密码查看5GHz频段WiFi密码即可得到。

图例
图例

SSH解锁后不要重启!重启就白解锁了!

扩容刷机

解锁ssh后,如果我们想刷入OpenWRT固件,那么可以选择不扩容,将A/B分区其中一个刷为OpenWRT,或者合并mtd13和mtd14(RootFS_1和OverLay)以获得60MB的空间写入固件,或者采取本文所记载的方式,合并mtd12(RootFS),mtd13(RootFS_1),mtd14(OverLay),以获取100+MB的空间写入固件。

下文提到的“路由器”均为你的AX6,辅助路由器解锁完成SSH之后就完成了它的使命了,可以丢在一边了。

使用ssh连接你的路由器,逐一执行如下命令:

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

使用WinSCP将QSDK底包上传到/tmp目录。

底包下载地址 : openwrt-redmi_ax6-squashfs-nand-factory.ubi

然后执行以下命令:

ubiformat /dev/mtd12 -y -f /tmp/openwrt-redmi_ax6-squashfs-nand-factory.ubi
nvram set flag_last_success=0
nvram set flag_boot_rootfs=0
nvram commit
reboot

若在执行ubiformat命令时,出现 “please, first detach mtd12 (/dev/mtd12) from ubi0”,则将mtd12改成mtd13,后面命令里的0改为1。

修改完成的命令如下:

ubiformat /dev/mtd13 -y -f /tmp/openwrt-redmi_ax6-squashfs-nand-factory.ubi
nvram set flag_last_success=1
nvram set flag_boot_rootfs=1
nvram commit
reboot

等待AX6重启后浏览器输入 10.0.0.1 即可进入openwrt底包后台(用户名密码均为root)。

使用WinSCP登录路由器,将ax6-uboot.bin 和 ax6-uboot-mibib.bin 上传至 /tmp 目录。

这两个文件可以在这里获得

执行以下命令:

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

命令执行完成后直接拔掉电源!否则会变砖头!

将电脑IP手动设置为 192.168.1.100,连接路由器的LAN口到电脑的RJ45接口上, 按住Reset重置孔的同时插入电源, 等待System LED变成黄灯后松开 Reset, 浏览器打开 192.168.1.1 即可进入 U-Boot。

(可以在浏览器提前打开192.168.1.1,再按住Reset插入电源,Uboot的Web界面出现后立刻松手,TTL可以发现这个Uboot是利用Reset连续被按下五秒钟触发中断的,所以其实不一定非要等到LED变黄,自己多把握几次就知道差不多是多久了。)

界面如图:

Uboot界面
Uboot界面

选择上面刷过一次的QSDK底包再次刷入即可。

将电脑网络设置还原为自动获取IP和DNS, 等路由蓝灯常亮后 浏览器 输入 10.0.0.1 进入OpenWrt底包后台,利用Web界面刷入你准备好的sysupgrade固件即可,等待开机即可正常使用。

Q/A

Q:为什么要刷两遍QSDK?

A:因为小米官方固件采用的是A/B系统方案,RootFS和RootFS_1对应着A系统和B系统,每次更新会刷新另一个分区的数据,比如在A分区系统更新就会把固件写入到B分区,更新结束之后会自动重启到另一个分区。第一次刷写的QSDK就是把QSDK底包刷写到了非活动状态的另一个分区中,再通过命令把启动分区切换到被刷入QSDK的分区中实现底包刷写的。刷这一遍是因为在小米官方固件下,mtd相关的命令(刷写Uboot时使用的mtd write/erase)是无法使用的。所以需要刷一遍这个底包来让这两条命令可用。

在Uboot下刷的第二遍QSDK底包是因为在刷Uboot过程中,刷入的位于mtd1的mibib文件修改了设备本身的分区表,将原来的RootFS,RootFS_1,OverLay三个小分区合并成了一个大的RootFS。原来刷入的QSDK因为分区表改变了自然无法正常启动。这次刷入是为了把这个底包刷入到这个大的RootFS分区中,之后刷sysupgrade固件的时候就会直接把固件写入QSDK所在的大分区中了。就是“扩容刷机”中的“扩容”

总结一下就是第一次刷是解锁一些命令的使用权,第二次是为了向扩容后的分区写入OpenWRT。

Q:AX3600解锁的时候不是一条链接就搞定了吗?为什么AX6这么费劲?

A:小米全系列Wifi6除了最先出的AX3600之外固件都对原来的方式做了修复,原来的方式已经失效了。不信你可以自己去试试。

Q:我解锁完SSH之后5G密码并没有改变,我该去哪里获取我的SSH密码?

A:https://www.oxygen7.cn/miwifi/,点击链接进入网页,使用你路由器的SN码就可以算出你的默认SSH密码,但是你没解锁成功的话,算出来了你也连不上。

Q:你折腾AX6干啥,这机器纯fw。

A:给我爪巴!

/Author:Skrshadow "901A"/