← 返回文章流

二手路由器刷机刷成砖,我用一根 TTL 线把它救回来了

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

来自 昭鸢笺作者主页
在原博客阅读全文 (新标签页打开)

以上内容来自博客订阅源,版权归原作者。关注作者后可以在 关注列表 第一时间查看作者文章。

一起聊聊 0

尊重不同观点

还没有评论。欢迎分享第一个想法。

RSS SUBSCRIPTIONS

选择 RSS 订阅

把博客汇的文章添加到你常用的阅读器。

关注文章 RSS 订阅本订阅需要登录后使用