在海鲜市场花五十块收了一台二手的千兆路由器,型号是小米 AX3000T。卖家的描述只有一句"能开机,无线正常",照片拍得模糊,看不出什么。
我买它就是为了刷 OpenWrt。出租屋这边的宽带是千兆,运营商送的那台光猫路由无线太弱,隔一堵墙就掉到两格。想着换个能跑插件的机器,做分流和去广告。
结果刷到一半,它就不开机了。
事情是怎么搞砸的
AX3000T 这台的刷机流程不复杂,先降级到有漏洞的固件,拿到 SSH,再刷一个过渡的 uboot,最后从 uboot 里刷 OpenWrt 的 sysupgrade 镜像。
我前面几步都很顺。问题出在最后一步。
刷写的时候我等了大概三分钟,屏幕上没有任何输出。我以为卡住了,就顺手按了 Ctrl+C。按完之后才想起来,刷写阶段中断是最危险的操作。
再重启,只有电源灯亮,网口一个都不亮。网线插上去,电脑那边显示"未连接"。这就是俗称的砖。
先判断是哪种砖
路由器变砖分两种。
一种是 bootloader 还在,只是固件坏了。这种好救,进 uboot 或者 breed 重新刷一遍固件就行。
另一种是 bootloader 也没了,或者被写坏了。这种就得拆机上编程器,把 flash 芯片吹下来用 CH341A 之类的工具重新写。
我这台属于哪种,得看串口输出。
拆机找串口
背面四颗螺丝,其中一颗藏在脚垫下面。撬开脚垫就能看到。
外壳是卡扣的,用撬片沿着缝慢慢撬,别用蛮力,塑料很脆。我撬的时候断了一个卡子,不影响使用,但心里膈应。
打开之后,主板上有四个焊盘排成一排,旁边印着丝印:VCC GND TX RX。这就是 TTL 串口。
这种机器一般用的是 3.3V 电平,千万别接 5V。5V 接上去,主控就真的废了。
接线上的一点经验
USB 转 TTL 的线我用的是 CH340,十几块钱一根。接线的时候要注意交叉:
|
|
VCC 不要接。路由器自己供电,你接了 VCC 反而可能因为两路电源打架出问题。
我第一次接的时候 TX 和 RX 接反了,串口里一片空白,什么都没有。换了顺序之后立刻就有输出了。
用 PuTTY 或者 picocom 连
Windows 上用 PuTTY,选 Serial,波特率 115200,8N1,没有流控。
Linux 上我更习惯 picocom:
|
|
接好之后给路由器上电,串口里应该立刻刷出一堆东西。
如果什么都没出,检查三件事。TX/RX 是不是接反了,GND 有没有接,波特率对不对。有些机器是 57600,可以试试。
看到的输出说明什么
我这台上电之后,串口输出是这样的:
|
|
到 U-Boot 这里就停了,然后开始倒计时。这说明 bootloader 还活着,属于第一种砖,有救。
如果连 BootROM 都没有,那才是第二种,得吹芯片。
倒计时的时候赶紧按任意键,能进 uboot 的命令行。进不去的话,多试几次,这个时间窗口很短,只有三秒左右。
在 uboot 里恢复
进去之后先看看环境变量:
|
|
能看到 ipaddr、serverip、bootcmd 这些。bootcmd 一般是 nand read ... 之类的,说明它要从 flash 里读固件。
现在的思路是,让路由器从网络加载一个临时固件到内存里跑起来,再从内存里把正确的固件写进 flash。
先把路由器和电脑用网线直连,电脑的 IP 设成 192.168.1.2,路由器在 uboot 里的默认 IP 一般是 192.168.1.1。
|
|
能 ping 通,网络这块就没问题。
然后电脑上起一个 TFTP 服务。Windows 上用 tftpd64,Linux 上用 tftpd-hpa,把准备好的 initramfs 镜像放到服务目录里。
|
|
这个命令会把镜像从电脑拉到内存地址 0x46000000。传输过程中能看到进度条。
拉完之后:
|
|
如果一切顺利,路由器会从内存里启动 OpenWrt。这时候它是完全跑在内存里的,断电就没了,但至少系统起来了,能进 LuCI。
从内存系统里刷回 flash
进 LuCI 之后,找到系统,备份与升级,刷写固件。选那个正式的 sysupgrade 镜像,不是 initramfs。
刷完之后机器会重启,这次从 flash 启动,就是正常的 OpenWrt 了。
如果 LuCI 进不去,也可以用命令刷:
|
|
-n 是不保留配置,第一次刷的时候建议加上,避免旧配置干扰。
几个必须提前准备的东西
这次能救回来,很大程度上是因为我提前下了固件。
救砖的时候你往往没有网络,尤其是你只有一条宽带、路由器又坏了的时候。所以刷机之前一定要把这些东西下好放在本地:
原厂固件。万一 OpenWrt 用不惯或者有功能问题,能刷回去。
uboot 或者 breed。这个是你救砖的唯一入口。
initramfs 镜像。就是前面那个从内存启动的镜像,每个型号都有对应的版本,不能混用。
TFTP 服务端软件。Windows 上 tftpd64 免安装,放 U 盘里备用。
这些东西加起来也就几百兆,但关键时刻能救命。
型号一定不能搞错
我下载固件的时候特意核对了三遍型号。AX3000T 有好几个版本,早期的是 MT7981,后来的换了芯片,固件完全不通用。刷错版本,大概率是彻底砖。
看型号的方法是,拆机看主控芯片上的丝印,或者用串口在 uboot 里敲 version。别信包装盒,二手机器的包装经常和机器对不上。
刷完之后
现在这台机器跑着 OpenWrt 23.05,做了几件事。
宽带拨号放在它上面,光猫改成桥接。无线开了 5G 的 160MHz,实测隔一堵墙还能跑到六百多兆。
装了几个插件,一个是广告过滤,一个是分流。分流的规则我配得比较简单,国内直连,国外走代理。
还有一个挺实用的,我把它接进了家里的 Tailscale,出门在外能直接访问局域网里的设备。
一点反思
这次变砖,纯粹是我自己手贱。
刷写的时候没有任何输出是正常的,很多固件刷写过程就是不打印东西。我应该做的是等,至少等十分钟。三分钟就按 Ctrl+C,太急了。
后来我给自己定了个规矩。任何刷写操作,只要开始了,就去泡杯茶,回来再看。宁可多等,不要中断。
还有一点,拆机之前先看拆机视频。AX3000T 的卡扣位置很刁钻,我第一次撬的时候差点把外壳掰裂。看了视频之后才知道要往哪个方向用力。
现在
这台五十块的路由器,现在是我家里网络的核心。跑了几个月,稳定性比运营商送的那台好太多。
中间重启过两次,一次是升级固件,一次是停电。除此之外没出过问题。
有时候觉得挺有意思的,花五十块钱,搭进去一个晚上,学到的比买台新的多得多。这种折腾的乐趣大概就在这儿,虽然过程很狼狈,但最后它亮起来的那一刻,确实挺爽的。