de-brick ax3000t AP
写入 Openwrt 固件的时候一不小心弄错了分区,结果砖了。
变砖过程
手头的小米 AX3000T 路由器官方固件是 1.0.64 版本,国内好多论坛上都说要降级到 1.0.47 版本才可以
获取 ssh 权限,进而写入 OpenWRT 固件。但阅读了官网说明
发现现在不用降级了,直接运行一个脚本即可。接下来按照官方文档,备份了原始固件,使用 nc 将固件
复制到主机,主机运行:$ nc -lp 1234 | tar xvf -
,路由器运行:# tar cf - *.bin | nc 192.168.31.xx 1234
。
路由器的 nc 好像不支持 -l
参数,因此 OpenWRT 的固件通过 tftp 传递过去,然后即可用 ubiformat
写入到闪存中。
问题就出在这里,写入闪存的时候要根据内核参数 firmwware=?
来决定写入哪个分区,并设置相应的
启动参数。结果我把这个弄反了,重启之后路由器在网络上没有任何响应,各种按 reset 的组合都试了
一遍,也没有任何有效的结果。
修复工具
为了能获得状态信息,只好打开路由器后盖(很紧,费了很大力气才打开),接上 UART 转接线。从串口信息
可以看到启动到 BL3 就停住了,无法执行后续的程序。同样根据官方文档指出的一个论坛文章,
使用一个 mtk_uartboot
工具,可以通过串口下载执行指定
的固件。除了论坛中指出的固件下载位置,其它固件可以在 OpenWRT 的固件快照页面 下载。具体使用的命令为:
$ mtk_uartboot -s /dev/ttyUSB0 --aarch64 -p bl2-mt7981-bga-ddr3-ram.bin -f openwrt-mediatek-filogic-xiaomi_mi-router-ax3000t-ubootmod-bl31-uboot.fip
执行完命令后用 minicom 查看路由器的串口消息,发现固件一直尝试从 tftp 下载后续固件,将相应固件 放到 tftp 目录后即可正常启动。
此时如果重启的话路由器依然无法启动,必须重新使用 ubiformat
命令将固件写入正确的分区。由于此时
没有 tftp 命令,最后通过 wget 将新固件下载并写入。
此时的文件系统里也没有 nvram 命令,不知道写错的启动参数是否还需要修改。