小米路由器 AX3000T 刷入 ChaWrt 固件教程 - liudf0716/chawrt GitHub Wiki
小米路由器 AX3000T 刷入 ChaWrt 固件教程
硬件规格: (仅供参考)
- SoC: MediaTek MT7981B (双核 A53)
- 闪存: ESMT F50L1G41LB 128MB (SPI-NAND)
- 内存: NT52B128M16JR-FL 256MB
- 以太网: 4 个 10/100/1000 Mbps 端口
- 交换芯片: MediaTek MT7531AE
- WiFi: MediaTek MT7976C
- 按钮: Reset (重置), Mesh (组网)
- 电源: DC 12V 1A
!!! 极度重要警告 !!!
- 刷机具有极高风险,可能导致设备永久损坏(变砖)!请务必仔细阅读、理解所有步骤后再操作。
- 本教程基于 OpenWrt 的刷机流程修改而来,用于指导刷写 ChaWrt。所有提及的固件文件名必须替换为您从 ChaWrt 项目获取的、适配 小米 AX3000T 的对应文件!
- 获取 SSH 权限的方法仅在指定的原厂固件版本 (1.0.47) 上测试通过,其他版本可能无效或需要不同方法。
- 开始前必须备份所有列出的原始分区!这是设备变砖后尝试恢复的基础!
- 因操作不当导致的任何设备损坏,需自行承担责任。
- 当前时间: 2025年4月26日星期六下午5:53:49(太平洋夏令时间)。请注意固件和方法的时效性。
刷机准备:
-
获取 ChaWrt 固件文件:
- 从 ChaWrt 官方或可信社区渠道,下载为 小米 AX3000T 适配的全套 ChaWrt 固件文件,通常包括:
-
initramfs-factory.ubi
文件 (用于首次刷入临时系统) -
sysupgrade.bin
文件 (用于刷入最终的 ChaWrt 系统 - 适用于原厂 U-Boot 布局) - (可选,若需更换 U-Boot)
ubootmod-initramfs-recovery.itb
文件 - (可选)
ubootmod-preloader.bin
文件 - (可选)
ubootmod-bl31-uboot.fip
文件 - (可选)
ubootmod-squashfs-sysupgrade.itb
文件
-
- 下文中将使用
<占位符文件名>
表示您需要替换为实际的 ChaWrt 文件名。
- 从 ChaWrt 官方或可信社区渠道,下载为 小米 AX3000T 适配的全套 ChaWrt 固件文件,通常包括:
刷机步骤:
步骤 1: 获取 SSH 权限 (仅支持原厂固件 1.0.47)
-
获取 stok: 电脑连接到 AX3000T 的 LAN 口或 WiFi (确保 IP 在
192.168.31.x
网段)。打开浏览器,登录路由器管理后台 (http://192.168.31.1
)。登录成功后,复制浏览器地址栏 URL 中stok=
后面的那段字符 (类似abcdef1234567890abcdef1234567890
)。 -
执行命令: 打开电脑的命令行终端 (如 CMD, PowerShell, Terminal),将下面命令中的
*******
替换为您刚刚复制的stok
值,然后逐条执行:curl -X POST "http://192.168.31.1/cgi-bin/luci/;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=*******/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=*******/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=*******/api/misystem/arn_switch" -d "open=1&model=1&level=%0A%2Fetc%2Finit.d%2Fdropbear%20start%0A" curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=*******/api/misystem/arn_switch" -d "open=1&model=1&level=%0Apasswd%20-d%20root%0A"
-
连接 SSH: 如果命令执行成功,现在应该可以使用 SSH 客户端连接到
192.168.31.1
,用户名为root
,密码为空。
步骤 2: 备份原厂分区 (!!! 必须执行 !!!)
- 通过 SSH 连接到路由器。
- 执行以下命令备份重要分区到
/tmp
目录:nanddump -f /tmp/BL2.bin /dev/mtd1 nanddump -f /tmp/Nvram.bin /dev/mtd2 nanddump -f /tmp/Bdata.bin /dev/mtd3 nanddump -f /tmp/Factory.bin /dev/mtd4 nanddump -f /tmp/FIP.bin /dev/mtd5 nanddump -f /tmp/ubi.bin /dev/mtd8 # 备份当前固件分区 nanddump -f /tmp/KF.bin /dev/mtd12
-
极其重要: 使用 SCP 工具 (如 WinSCP, FileZilla 或
scp
命令行) 将/tmp
目录下所有备份好的.bin
文件下载到你的电脑上,并妥善、永久地保存在安全的地方!
步骤 3: 检查当前固件分区
- 在 SSH 中执行命令,查看当前是从哪个分区启动的:
cat /proc/cmdline
- 记下输出中是包含
firmware=0
还是firmware=1
。
步骤 4: 刷入 ChaWrt Initramfs 并设置引导
- 将你下载的 ChaWrt 的
initramfs-factory.ubi
文件(必须替换为实际文件名!)通过 SCP 上传到路由器的/tmp
目录。 -
根据第 3 步的结果,执行对应的命令组:
-
如果
cat /proc/cmdline
显示firmware=0
(当前在 mtd8/ubi):ubiformat /dev/mtd9 -y -f /tmp/<ChaWrt对应的initramfs-factory文件名>.ubi # 刷写到 mtd9 nvram set boot_wait=on nvram set uart_en=1 nvram set flag_boot_rootfs=1 # 设置下次从 mtd9 启动 nvram set flag_last_success=1 # 标记当前分区(mtd8)成功 nvram set flag_boot_success=1 nvram set flag_try_sys1_failed=0 nvram set flag_try_sys2_failed=0 nvram commit reboot
-
如果
cat /proc/cmdline
显示firmware=1
(当前在 mtd9/ubi1):ubiformat /dev/mtd8 -y -f /tmp/<ChaWrt对应的initramfs-factory文件名>.ubi # 刷写到 mtd8 nvram set boot_wait=on nvram set uart_en=1 nvram set flag_boot_rootfs=0 # 设置下次从 mtd8 启动 nvram set flag_last_success=0 # 标记当前分区(mtd9)成功 (原文为0) nvram set flag_boot_success=1 nvram set flag_try_sys1_failed=0 nvram set flag_try_sys2_failed=0 nvram commit reboot
-
如果
- 仔细检查
ubiformat
命令中的 MTD 设备号 (mtd8
或mtd9
) 和文件名是否正确! - 执行
reboot
后,路由器将重启并尝试从刚刚刷入 ChaWrt initramfs 的分区启动。
步骤 5: 刷入 ChaWrt Sysupgrade (完成基础刷机)
- 路由器从 initramfs 启动后,其 IP 地址通常变为
192.168.1.1
。 - 将电脑 IP 地址改为
192.168.1.x
(如192.168.1.2
),子网掩码255.255.255.0
。 - 将 ChaWrt 的
sysupgrade.bin
文件(必须替换为实际文件名!)通过 SCP 上传到路由器的/tmp
目录。 - 通过 SSH 连接到路由器 (
192.168.1.1
,用户root
)。 - 执行
sysupgrade
命令刷入最终系统:sysupgrade -n /tmp/<ChaWrt对应的sysupgrade文件名>.bin
-
-n
参数表示不保留配置刷写。
-
- 或者,可以通过浏览器访问
http://192.168.1.1
的 LuCI 界面,在 系统 -> 备份/升级固件 页面上传sysupgrade.bin
文件进行升级(选择不保留配置)。 - 刷写完成后路由器会自动重启。
- 至此,使用原厂 U-Boot 布局的基础刷机过程完成。
可选部分: 更换为 ChaWrt/OpenWrt 通用 U-Boot 布局
警告: 此部分风险更高,涉及刷写引导加载器和修改分区布局,仅在您明确需要且已备份分区时才操作!
-
准备: 确认您已完成基础刷机(步骤 5),当前运行在 ChaWrt 系统上,并已下载 ChaWrt 提供的
ubootmod
系列文件。将<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
文件上传到/tmp
。 -
刷入 U-Boot Mod Recovery/Initramfs: (注意:这会覆盖当前系统所在分区 mtd8)
ubiformat /dev/mtd8 -y -f /tmp/<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb reboot
-
安装 kmod-mtd-rw: 重启进入 recovery/initramfs 环境后,SSH 连接 (
192.168.1.1
)。opkg update && opkg install kmod-mtd-rw insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1
-
格式化 UBI 并创建 U-Boot Env 卷:
ubidetach -p /dev/mtd8; ubiformat /dev/mtd8 -y; ubiattach -p /dev/mtd8 ubimkvol /dev/ubi0 -n 0 -N ubootenv -s 128KiB ubimkvol /dev/ubi0 -n 1 -N ubootenv2 -s 128KiB
-
(可选 - 牺牲约 10MB 空间) 添加恢复分区: 将
<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
再次上传到/tmp
。ubimkvol /dev/ubi0 -n 2 -N recovery -s 10MiB ubiupdatevol /dev/ubi0_2 /tmp/<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
-
刷写 ChaWrt U-Boot (!!! 极高风险 !!!): 将
<ChaWrt对应的ubootmod-preloader文件名>.bin
和<ChaWrt对应的ubootmod-bl31-uboot文件名>.fip
上传到/tmp
。此步出错或断电将导致设备变砖!mtd write /tmp/<ChaWrt对应的ubootmod-preloader文件名>.bin BL2 mtd write /tmp/<ChaWrt对应的ubootmod-bl31-uboot文件名>.fip FIP
-
刷入 U-Boot Mod Sysupgrade: 将
<ChaWrt对应的ubootmod-squashfs-sysupgrade文件名>.itb
上传到/tmp
。sysupgrade -n /tmp/<ChaWrt对应的ubootmod-squashfs-sysupgrade文件名>.itb
- 路由器重启后,即完成 U-Boot 布局更换。
恢复到原厂固件:
方法一: 从通用 U-Boot 布局恢复 (主要方法)
-
启动到 Recovery/Initramfs: SSH 连接到 ChaWrt 系统,将
<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
上传到/tmp
,执行强制刷写:sysupgrade -F -n /tmp/<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
-
格式化 UBI 和 Nvram: 重启进入 recovery/initramfs 后,SSH 连接 (
192.168.1.1
)。ubidetach -p /dev/mtd8; ubiformat /dev/mtd8 -y; ubiattach -p /dev/mtd8 mtd erase Nvram
-
安装 kmod-mtd-rw:
opkg update && opkg install kmod-mtd-rw insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1
-
刷回原厂备份 (!!! 极高风险 !!!): 将之前备份的原厂
BL2.bin
,FIP.bin
,ubi.bin
文件上传到/tmp
。确保使用的是正确的备份文件!此步风险极高!mtd write /tmp/BL2.bin BL2 mtd write /tmp/FIP.bin FIP mtd write /tmp/ubi.bin ubi # 将原厂固件写回主 ubi 分区 (mtd8)
-
重启:
reboot
。等待路由器恢复到原厂系统。
方法二: 从原厂 U-Boot 布局的 ChaWrt 恢复 (简化方法 - 谨慎使用)
- 此方法仅恢复固件分区,不恢复引导加载器。
- SSH 连接到 ChaWrt 系统。将备份的原厂
ubi.bin
上传到/tmp
。 -
确认当前启动分区,刷写到另一个分区。 例如,如果当前在
firmware=0
/ubi
(mtd8),则执行:ubiformat /dev/mtd9 -y -f /tmp/ubi.bin
- (源文档末尾的
ubiformat /dev/mtd7
命令可能不适用于此设备或场景,mtd7
通常不是主固件分区,不建议使用,除非有明确来源说明。)
- (源文档末尾的
-
修改 Nvram 以便下次从刷回的分区启动 (参考步骤 4 的
nvram set
命令,设置flag_boot_rootfs
指向刚刷写的分区)。 - 重启:
reboot
。
最后提醒: 请始终优先参考 ChaWrt 项目针对 AX3000T 的最新官方文档或社区指南。刷机有风险,操作需谨慎。