小米路由器 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(太平洋夏令时间)。请注意固件和方法的时效性。

刷机准备:

  1. 获取 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 文件名。

刷机步骤:

步骤 1: 获取 SSH 权限 (仅支持原厂固件 1.0.47)

  1. 获取 stok: 电脑连接到 AX3000T 的 LAN 口或 WiFi (确保 IP 在 192.168.31.x 网段)。打开浏览器,登录路由器管理后台 (http://192.168.31.1)。登录成功后,复制浏览器地址栏 URL 中 stok= 后面的那段字符 (类似 abcdef1234567890abcdef1234567890)。
  2. 执行命令: 打开电脑的命令行终端 (如 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"
  3. 连接 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 设备号 (mtd8mtd9) 和文件名是否正确!
  • 执行 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 布局

警告: 此部分风险更高,涉及刷写引导加载器和修改分区布局,仅在您明确需要且已备份分区时才操作!

  1. 准备: 确认您已完成基础刷机(步骤 5),当前运行在 ChaWrt 系统上,并已下载 ChaWrt 提供的 ubootmod 系列文件。将 <ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb 文件上传到 /tmp
  2. 刷入 U-Boot Mod Recovery/Initramfs: (注意:这会覆盖当前系统所在分区 mtd8)
    ubiformat /dev/mtd8 -y -f /tmp/<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
    reboot
  3. 安装 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
  4. 格式化 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
  5. (可选 - 牺牲约 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
  6. 刷写 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
    此步出错或断电将导致设备变砖!
  7. 刷入 U-Boot Mod Sysupgrade:<ChaWrt对应的ubootmod-squashfs-sysupgrade文件名>.itb 上传到 /tmp
    sysupgrade -n /tmp/<ChaWrt对应的ubootmod-squashfs-sysupgrade文件名>.itb
  8. 路由器重启后,即完成 U-Boot 布局更换。

恢复到原厂固件:

方法一: 从通用 U-Boot 布局恢复 (主要方法)

  1. 启动到 Recovery/Initramfs: SSH 连接到 ChaWrt 系统,将 <ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb 上传到 /tmp,执行强制刷写:
    sysupgrade -F -n /tmp/<ChaWrt对应的ubootmod-initramfs-recovery文件名>.itb
  2. 格式化 UBI 和 Nvram: 重启进入 recovery/initramfs 后,SSH 连接 (192.168.1.1)。
    ubidetach -p /dev/mtd8; ubiformat /dev/mtd8 -y; ubiattach -p /dev/mtd8
    mtd erase Nvram
  3. 安装 kmod-mtd-rw:
    opkg update && opkg install kmod-mtd-rw
    insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1
  4. 刷回原厂备份 (!!! 极高风险 !!!): 将之前备份的原厂 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)
    确保使用的是正确的备份文件!此步风险极高!
  5. 重启: 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 的最新官方文档或社区指南。刷机有风险,操作需谨慎。

⚠️ **GitHub.com Fallback** ⚠️