# 小米 AX3000T openwrt 刷机 —— 从入坑到刷回原厂

# 前言

作者于前端时间购入一台 AX3000T 作为 Mesh 网络节点,后续发现由于没有弱信号剔除导致设备连到 AX3000T 之后就回不到主节点了
所以想刷入 openwrt 来解决这个问题(最后也没解决)

本文需要硬件设施:

  • AX3000T 路由器
  • 一个有以太网口的电脑
  • 一根网线
  • 一个卡针 (或者牙签)

软件设施放在下面的蓝奏盘里了,有需要可以自行取用:
蓝奏盘链接 提取码 c8a1

# 启用 SSH

# 降级固件 (非必需)

如果你的 AX3000T 手动升级了固件到 1.0.47 以上 (不含),此时需要降级到 1.0.47 这个脆弱的版本来启用 SSH
openwrt 文档中说可以手动上传固件后改 URL,但作者测试无法降级,会提示找不到固件或不完整,因此只能使用小米官方的救砖工具降级

1.0.47 固件链接:小米官方 CDN
工具见上方网盘

打开工具后用网线连接路由器和电脑 (理论上路由器任意一个网口即可),然后启动工具,选择下载的 ROM,点击下一步

工具此时会让你选择网卡,如果你安装了 VMWare / Hyper-V 可能存在很多个虚拟网卡,注意选择物理网卡 (一般名称为以太网)

点击下一步,此时给路由器断电,用卡针按住 RESET 键,按住后插电,继续按住,等到路由器橙灯快速闪烁为止,此时工具会自动刷入 ROM,等待路由器变为蓝灯快速闪烁 10 秒后断电重启

# 启用 SSH

注意:下面的代码需要用 cmd 而不是 powershell 运行,运行时出现 curl 参数错误则代表你使用的是 powershell
本文不处理没有 curl 的情况,请自行必应解决

登录到小米路由器后台,此时的 URL 应该类似于这样:

http://192.168.31.1/cgi-bin/luci/;stok=123456789qwertyuiop/web/home#router

将 stok 后面的部分 ( 123456789qwertyuiop 这一块) 复制下来,后续使用 <stok> 代替这段文本
在 cmd 内执行如下命令:

curl -X POST http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/misystem/arn_switch -d "open=1&model=1&level=%0Anvram%20set%20ssh_en%3D1%0A"
curl -X POST http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/misystem/arn_switch -d "open=1&model=1&level=%0Anvram%20commit%0A"
curl -X POST http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/misystem/arn_switch -d "open=1&model=1&level=%0Ased%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%22debug%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%0A"
curl -X POST http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/misystem/arn_switch -d "open=1&model=1&level=%0A%2Fetc%2Finit.d%2Fdropbear%20start%0A"

每行执行完后都会输出 {code:0} ,四条均输出此内容则 SSH 开启成功,此时可以使用 SSH 终端登入,为便于后续文件操作,此处使用 MobaXterm (可从前文网盘下载) 进行登入

# 获取 SSH 密码

登入小米路由器主页后,右下角会有一个 SN ,将下方黑体字内容全部复制后输入 miwifi.dev 右侧的 SN 中,点击 calc,随后点击 copy 复制密码并保存

# 登入 SSH

因终端而异,提示两点:

  1. 登入用户名为 root
  2. 出现一个提示框时选带 ACCEPT 的

# 刷入 U-Boot

第一步是刷入 UBoot,便于刷入真正的 openwrt 和防止刷错固件之后被迫售后,同时备份原厂固件便于恢复

# 备份原厂固件

登入 SSH 后,输入 cat /proc/mtd 确定需要备份的内容,如果为 mtd0-mtd12 可直接使用下文命令,否则请自行参照下文修改:

通常来说,因为路由器的 ROM 通常较小,而备份过程相当于把固件体积 x2,因此 ROM 大概率会爆掉,如果你在备份过程中 SSH 异常中止参照上文重新获取 stok 后激活 SSH 即可
当然,为了防止上文情况出现和造成严重后果,备份文件通常放在 /tmp 中并且备份完成一个就要下载下来后删除,防止 ROM 空间不足或者不足重启后无法自动修复
如果你懒得看上面那段文字:下文的每行执行完之后就把对应的 bin 下载下来后删掉,不要用终端的多行命令偷懒

dd if=/dev/mtd1 of=/tmp/BL2.bin
dd if=/dev/mtd2 of=/tmp/Nvram.bin
dd if=/dev/mtd3 of=/tmp/Bdate.bin
dd if=/dev/mtd4 of=/tmp/Factory.bin
dd if=/dev/mtd5 of=/tmp/FIP.bin
dd if=/dev/mtd6 of=/tmp/crash.bin
dd if=/dev/mtd7 of=/tmp/crash_log.bin
dd if=/dev/mtd8 of=/tmp/ubi.bin
dd if=/dev/mtd9 of=/tmp/ubi1.bin
dd if=/dev/mtd10 of=/tmp/overlay.bin
dd if=/dev/mtd11 of=/tmp/date.bin
dd if=/dev/mtd12 of=/tmp/KF.bin

每条命令执行完成后会输出带有 inout 字样的提示,备份可能会需要一些时间,此过程中不要断开 SSH 和电源

# 刷入 UBoot

此部分正式进入刷机,在进行下面的任何步骤之前确定你的备份保存完好,他人提供的备份有相当高概率使路由器变砖,务必保存好自己的备份

本文直接使用网盘内的 SSH 终端说明,其他客户端请自行探索
点开左侧绿色文件夹,进入 tmp,将 UBoot 固件拖入其中,等待上传完成

网上的一些资源仅提供了收费的 UBoot,本文不提供这些 UBoot 的链接。作者自行编译了一份开源的 UBoot 放在了前文网盘中,可以直接下载使用。有 Ubuntu 系统或 WSL 环境的可以自行编译。

ls 确定存在后,执行下列命令刷入:

mtd write mt7981_ax3000t-fip-fixed-parts-multi-layout.bin FIP

等待刷入完成后,此时 UBoot 刷入完成

# 刷入 openwrt

# 刷入固件

理论上很难刷出问题,作者前后刷入了 6 次各种固件并失败 2 次仍然能正常进入 UBoot 并刷回原厂。
当然,上文前提是不故意作,例如刷入 SoC 不正确的固件和刷入不支持 AX3000T 的固件,如果真成砖了可参考后文的刷回原厂,刷写 3 次仍然未修复建议返厂维修

网盘中有 QWRT 和 immortalwrt 两种固件,作者已测试可刷入,但注意:

  • 网盘中的 QWRT 不能使用 WPA3 加密

此时使用网线连接到 UBoot (如果你把网线拔了)
然后先断路由器电,用卡针按住 RESET 约 3 秒后插电,继续按住,等到路由器灯由橙色变蓝色后松开
此时手动配置电脑网卡为手动分配 IP 模式:

  • ip: 192.168.1.2
  • 子网掩码: 255.255.255.0
  • 网关: 192.168.1.1
  • 首选 DNS: 填一个能用的国内 DNS,例如 114.114.114.114 ,不建议开启加密

点击确定后,浏览器访问 192.168.1.1 ,应该进入 UBoot 界面

双网卡或无线 + 有线请断开可访问互联网的那个网络,这个网址会和部分家庭网关冲突,可能导致无法访问

选择固件后 mtd layout 根据固件选择,QWRT 选 QWRT,immortalwrt 选 immortalwrt-w112
点击 upload 后耐心等待,路由器会变为橙灯,随后橙灯快速闪烁,再变为蓝色灯
此时网卡可调整为 DHCP (自动) 了

# 如果橙灯慢速闪烁

如果观察到路由器的橙灯慢速闪烁 (约 5 秒一次),此时请等待半分钟,如果仍然保持此状态,可以按照前文重新进入 UBoot 了。
这个闪烁意味着固件刷入失败,UBoot 会提示 UPDATE FAILED,建议更换固件并选择正确的 mtd layout 后重试

# 进入 openwrt 后台

不同固件不同,大部分是 192.168.1.1 ,自定义固件会有 10.0.0.1192.168.8.1 等,建议查看固件说明
如果和家庭网关冲突,请断开家庭网络,使用网线连接到 openwrt 后修改 LAN IP 来解决此问题

# 刷回原厂

网上的一些教程是先 UBoot 刷入 ubi.bin (之前备份的原厂固件) 后再解锁 SSH 恢复 UBoot,但作者实验发现 UBoot 刷入 ubi.bin 大概率会刷入失败,因而采用先恢复 UBoot 后使用小米救砖工具刷入固件的方法

# 恢复原厂 UBoot

接下来的操作中涉及上传文件的,上传后务必使用 ls 确认文件存在再刷入

找到前文的备份文件中的 FIP.bin ,使用 SSH 工具上传到 /tmp 目录下,随后:

mtd write FIP.bin FIP

# 恢复原厂固件

等待命令完成 (15-30 秒左右) 后断电重启,此时按照前文的降级方法刷入原厂 1.0.47 固件 (可能需要多次刷入)
如果刷入成功,橙灯会常亮一会,然后橙灯闪烁,此时可以按照正常新路由器的方法,连接到无密码默认 SSID 中进入开始使用了
此时可以正常升级和使用路由器了