网页救砖指南(仅适用XG-040G-MD)
给普通用户看的操作手册:怎么把这台路由器换成带浏览器救砖功能的 U-Boot,以及换好之后怎么用它。跟着步骤做,不需要懂 U-Boot 或 Linux。
ubi 变体
master-XG-040G-MD
( ( ( OpenWrt ) ) ) 的,看存档版教程操作日常救砖;想升到 0.1.1,看下方「路径 C」。
打开 0.1.0 存档教程 →
下载最新 ubi-auto 固件
只列出 master-XG-040G-MD 分支最近一次自适应内存 ubi 构建。其它实验分支不会出现在这里。点文件名直接下,文件名不用改,网页会按名字做核对。
准备工作
如果系统还能正常进 OpenWrt 后台,SSH 上去执行 cat /proc/mtd:看到 bl2 和 ubi 这两个分区名,说明已经是这个 U-Boot 了,直接看「日常使用」;看到 bootloader / ubootenv,或者 nsb_1 / data,说明还没换过,走「首次迁移」。系统进不去就直接按「首次迁移」的步骤操作,安全。
- 网线一根 + 一台电脑或手机全程只用来连这台路由器,不需要能上外网。固件已在页面上方列出,先下好。
- USB 转 TTL 串口模块仅首次迁移3.3V 电平的那种(不是 RS232),淘宝搜「USB TTL CH340」一类都行,带 3 根杜邦线。之后日常用网页就不再需要它了。
- 支持 Xmodem 发送的串口终端软件仅首次迁移Windows 上 MobaXterm、SecureCRT、Xshell 都自带「发送文件 → Xmodem」;macOS / Linux 可以用
minicom,或者装lrzsz后在screen里用sx命令发送。串口参数固定115200 8N1。 - 建议先做一次整机 flash 备份仅首次迁移首次迁移会清空原厂分区,其中
ri(MAC/序列号)和bosa(光模块校准数据)是这台机器独有的、没有第二份。备份方法见原厂备份文档(本仓库docs/backup-and-restore.md),几分钟就能做完,别省这一步。
首次迁移 · 接串口
先不要插网线。只有这一次需要打开机壳接串口,传完两个引导文件之后,剩下的和以后的每一次都只用浏览器。
找到串口调试口,接好线
拆开机壳,主板上电解电容旁边有一排焊盘,标着 Tx Rx GND,如下图红色箭头所示(图中「内存」箭头只是顺带标出芯片位置,跟接线无关,不用管):
接线是「交叉」的 —— 模块的 TX 接主板的 Rx,模块的 RX 接主板的 Tx,GND 接 GND,不同批次的板子位置可能略有出入,以实物丝印为准:
模块
调试口
打开串口终端软件
新建一个串口连接,端口选 USB-TTL 模块对应的那个(Windows 是 COMx,macOS/Linux 是 /dev/tty.usb… 或 /dev/ttyUSB0),参数填:
| 波特率 | 数据位 | 校验 | 停止位 | 流控 |
|---|---|---|---|---|
| 115200 | 8 | 无 | 1 | 无 |
这时候先别急着连接路由器电源 —— 打开软件、连好线、参数填好就行,下一步再上电。
长按机身 reset 键并同时上电
长按机身 reset 键并同时上电,不要松开。终端软件里很快会滚出一串启动日志,留意其中一闪而过的 Press x —— 看到就立刻按键盘上的 x。
依次发送两个文件
按 x 之后屏幕会刷出一串 C(xmodem 请求校验的标志),这时用终端软件的「发送文件」功能,协议选 Xmodem,发送 preloader.bin:
Press x 这一行传完 preloader.bin 后路由器会自动重启一次,很快会刷出第二个提示 Press x to load BL31... —— 这时再按一次 x,出现 C 后用同样的方式发送 bl31-uboot.fip:
Press x,这次加载的是 BL31 + U-Boot FIPfip 传完之后路由器会自己跑起新 U-Boot,接下来有两种方式进网页恢复模式,结果完全一样,选一种走就行:
| 方式 | 怎么做 | 要注意什么 |
|---|---|---|
| 一直按住 reset 最稳,推荐 | 发送快结束时、以及紧接着出现的启动菜单画面,reset 都继续按住不要松(大约 15 秒),直到面板流水灯亮起来 | 没有时间窗口 —— 按着就一定进得去,不用盯屏幕 |
| 在启动菜单选第 9 项 0.1.1 新增 | 可以松开 reset,等引导菜单出现后用 ↑↓ 选到第 9 项Start web recovery server,再按回车 | 菜单只停约 3 秒,要在这 3 秒里选完并回车;错过了要回第 3 步重传一次 |
不管走哪一种,日志变成下面这样 —— Listening for HTTP on 192.168.1.1 —— 才代表真正进入了网页恢复模式(一直按着 reset 的,这时可以松手了):
看到流水灯就成了,再插网线
首次迁移 · 网页一次传完三样
这一步和日常使用共用同一个网页,唯一区别是要展开「引导程序」并勾选「先重建 UBI」。
网线插好,浏览器打开 192.168.1.1
进流水灯效果后再插入网线,插到路由器任意一个网口(建议是第 3 或第 4 个口)。电脑或手机的网络设置成自动获取 IP 即可,会分到 192.168.1.100。不用手动配 IP —— U-Boot 里带了个迷你 DHCP 服务器,就是为了省掉这一步。
展开「引导程序」,三个格子都选好文件
固件选 …-ubi-squashfs-sysupgrade.itb,展开下方「引导程序(仅首次迁移需要)」,BL2 选 …-ubi-preloader.bin,U-Boot 选 …-ubi-bl31-uboot.fip,勾上「先重建 UBI」(旧的分区布局里没有合法的 UBI 结构,不勾这一步后面会失败)。
▲ 三个文件都已选好,「先重建 UBI」已勾选
点「上传并刷写」,核对确认框
因为勾了「先重建 UBI」,确认框会用醒目的橙色提醒「重建 UBI 会擦掉出厂 MAC、U-Boot 环境与全部设置」—— 首次迁移这是正常且必要的,核对三个文件大小无误后点「仍要写入」。
▲ 橙色警示条只在「文件名对不上」或「勾了重建 UBI」时出现
灯齐闪 = 正在写,灯灭 = 写完自动重启
点击之后浏览器会立刻开始上传,进度条走满后设备开始真正写入 flash —— 这时候网页已经帮不上忙了,接下来只看面板灯:
Press x 提示上等按键,没有串口连着时这一步没人按,看起来就像卡住了;重新上电通常就能正常继续,不用紧张。ri 写回去即可,随时能做,不需要重刷固件。日常使用 · 进恢复页
迁移完成之后,这个恢复页就一直带在这台路由器的 U-Boot 里。日常只用第一种方式就够了,不需要串口。
| 什么时候 | 怎么进 |
|---|---|
| 想主动刷机 / 升级引导器 不用串口 | 先上电,等 1~2 秒后再按住机身 reset 键,一直按着,等面板五个灯开始流水再松手(约 15 秒)。进流水灯效果后再插入网线(建议第 3 或第 4 个口) |
| 手上正好接着串口 0.1.1 新增 | 开机看到引导菜单,用 ↑↓ 选到 第 9 项 Start web recovery server 再回车,不用掐 reset 的时机 |
两种方式进的是同一个服务。流水灯亮起来就是进去了,跟首次迁移那一步看到的是同一种灯效。这时再插网线,浏览器打开 192.168.1.1。
0.1.1 的引导菜单长这样
标题里带着恢复页版本号和 U-Boot 版本号,最后两项是 0.1.1 新加的:
ri 卷写回去才能拿回来。服务起来时串口会打印这些
版本号、教程地址、项目地址,还有当前正在用的 MAC:
最后那个 MAC 是排查「服务起来了但网页打不开」的第一现场 —— 详见常见问题里那一条。
日常使用 · 上传并刷写
日常升级只有固件这一格是必填的,BL2 和 U-Boot 只有它们本身需要更新版本时才传,「先重建 UBI」平时不要勾。
浏览器打开 192.168.1.1,选好固件
网线接好、设备自动获取 IP 之后,「固件」那一格选 …-ubi-squashfs-sysupgrade.itb,不用展开下面的「引导程序」。
▲ 恢复页初始状态,右上角是深浅色手动切换(跟随上次选择,不跟随系统)
点「上传并刷写」,看确认框
只刷固件的确认框是中性色的 —— 不涉及擦除 UBI 或文件名可疑,核对一下大小,点「开始写入」即可。上传过程中有一条走动的进度条,能看到已传字节数和百分比。
上传完毕后看面板灯,不用管网页
进度条走满只代表「上传完毕」,真正写 flash 在这之后才开始,此时页面已经收不到任何消息了,进度改看面板灯 —— 流水(等待/传输)→ 齐闪(写入中,别断电)→ 熄灭后自动重启(完成)。
▲ 上传中的进度条,走满后会切到「正在校验」的条纹动画
面板灯是唯一的进度来源
网页上传结束后连接就关闭了,浏览器和设备之间再没有通道 —— 之后的每一步都只能看灯。
| 面板 | 含义 | 能拔网线吗 |
|---|---|---|
| 五灯流水 | 在等你上传 | ❌ 还在传 |
| 五灯齐闪 | 正在写 flash | ✅ 随便拔 |
| 熄灭后重启 | 写完了 | ✅ |
退回原厂 0.1.1 新增
恢复页最下面多了一栏「退回原厂」。里面是两件完全不同的事,看着像大小之分,其实一个是把整台机器变回出厂状态,另一个只是补一小块出厂数据。别混着用 —— 网页也不允许同时选。
| 整片恢复 | 恢复出厂标识 | |
|---|---|---|
| 用什么文件 | all_flash.bin,约 235.6 MiB | ri 或 bosa,各约 256 KiB |
| 动了什么 | 整片 flash 全部重写 | 只重写对应的那一个 UBI 卷 |
| 这个救砖页 | 连它一起没了 | 不动 |
| 之后 | 回到原厂系统,要再回 OpenWrt 得重新走一次串口迁移 | 照常开机,引导器和固件都没变 |
| 什么时候用 | 真的想彻底还原这台机器 | 丢了出厂 MAC / 光模块参数,想补回来 |
ri 里存的是这台机器独有的出厂 MAC,bosa 是这颗光模块的标定参数 —— 拿别人的文件写进去,等于把别人的身份刷到你机器上。只补出厂 MAC(常见情况)
首次迁移勾过「先重建 UBI」,或者点过引导菜单第 8 项,出厂 MAC 就没了。0.1.1 会自动换一个随机 MAC 让网络能用,但想拿回真实 MAC 就要把当初备份的 ri 写回去。随时可以做,不用重刷固件。
进恢复页,展开最下面的「退回原厂」
「整片恢复」那一格留空,在下面的下拉框里选 ri,然后选你备份出来的那个 256 KiB 文件。
▲ 「退回原厂」展开后的样子,这里只选了单个卷
确认框会写明只动这一个卷
确认框列出的步骤是「挂载 UBI → 写回 ri 卷的出厂内容 → 自动重启」,并提示「只会重写 ri 这一个 UBI 卷,引导器与固件不动」。核对无误后点「仍要写入」。写入很快,灯齐闪一下就重启了。
整片刷回原厂
把当初迁移前备份的整片 all_flash.bin 传进「整片恢复」那一格。这个文件很大,上传和写入都比刷固件慢得多,确认框里会把「最慢的一步,别断电」单独标出来。
bl2 + ubi 两块,把出厂字节按出厂偏移整片写回去,原厂的分区划分也会跟着回来 —— 不需要先「换回原厂分区表」再刷。没有 all_flash.bin?那就只能走串口了 —— 这个文件只能在机器还是原厂状态时备份出来,事后无法重建。备份方法见仓库里的 docs/backup-and-restore.md。
选错了网页会直接拦住
0.1.1 的确认框分两级:橙色警告只是提醒,还能点「仍要写入」;加粗的硬错误会直接把写入按钮藏掉,必须回去改。会触发硬错误的有四种:
- 整片恢复和单分区恢复同时选了两件事,只能挑一件
- 退回原厂和刷 OpenWrt 固件混在一起方向相反,网页不会替你猜先后
- 选了分区文件,但没选是哪个分区下拉框还停在「— 不恢复 —」
- 选了分区,但没有选文件反过来的情况
从 0.1.0 升级 · 0.1.1 有什么变化
已经是 0.1.1 的可以跳过本节;还没升级的看下面「升级步骤与注意事项」一节。
多了「退回原厂」一栏:整片写回 all_flash.bin,或者只写回 ri(出厂 MAC)、bosa(光模块参数)这两个卷。丢了出厂 MAC 的机器不用重刷,单独补 ri 就行 —— 见上方「退回原厂」。
0.1.0 上如果 ri 卷是空的(点过「Reset all settings to factory defaults」或重建过 UBI),MAC 会变成 ff:ff:ff:ff:ff:ff —— 服务能起来,串口日志一切正常,但网页就是打不开。0.1.1 会认出这种情况,换成一个随机地址并在串口明确写出来。
串口引导菜单里新增第 9 项「Start web recovery server」,不用再靠长按 reset 掐时机 —— 日常进恢复页、和首次迁移传完两个引导文件之后,两个场合都能用;第 a 项是项目和教程地址。菜单标题也从 ( ( ( OpenWrt ) ) ) 变成了 OpenWrt-Web 0.1.1,一眼能看出版本。
进入恢复服务时会打印版本号、本教程地址、项目地址,以及当前正在用的 MAC。网页打不开时先看这一行 —— 它能直接告诉你是不是上面那个 MAC 问题。
从 0.1.0 升级 · 升级步骤与注意事项
升级步骤很简单,用现在这个 0.1.0 的恢复页就能做:展开「引导程序」,重传 BL2 和 U-Boot 这两个文件,固件那格留空,不要勾「先重建 UBI」。真正要注意的只有一件事,而且只在这一次升级里发生。
rootfs_data——存着你全部 LuCI 设置的那个卷,固件本身不受影响,但设置会回到出厂状态。这个问题已经在新版里修好了,之后的每一次更新都不会再触发;但升级到修复版的这一下,走的还是旧代码,仍然可能清一次。升级前,先在 LuCI 备份一次配置
系统 → 备份/升级 → 生成备份文件。花十秒,万一这一下真清空了,能直接把备份传回去,不用一项一项重新设。
照「日常使用」的流程刷,只传引导文件
展开「引导程序」,BL2 选 …-preloader.bin,U-Boot 选 …-bl31-uboot.fip,固件那一格留空,「先重建 UBI」不要勾——勾了反而会把出厂 MAC 也一起清掉,升级用不着。
▲ 展开「引导程序」后的样子,BL2 和 U-Boot 已选好,固件留空,「先重建 UBI」没勾
重启后如果设置没了,把刚才的备份传回去
系统 → 备份/升级 → 上传备份文件并还原。之后再刷什么都不会再清了——这个坑只在「从旧代码升级到修复版」这一次存在,后续的固件、引导器更新都很安全。
常见问题
从 0.1.0 升到 0.1.1,要传什么?要勾「先重建 UBI」吗?
…-preloader.bin 和 …-bl31-uboot.fip 这两个引导文件重新传一次,不要勾「先重建 UBI」。用现在这个 0.1.0 的恢复页就能升:进恢复页 → 展开「引导程序」 → BL2 那一格选 preloader、U-Boot 那一格选 fip → 上传并刷写。固件那一格可以留空,日常固件跟这次升级无关。重启之后引导菜单标题就会变成
OpenWrt-Web 0.1.1,菜单也多出第 9、第 10 项。「先重建 UBI」千万别勾 —— 它会把出厂 MAC 一起擦掉,升级根本用不着。升级前建议先在 LuCI 备份一次配置 —— 这一次写入 fip 用的是当前跑着的旧代码,可能会顺带清空设置,详见上方「0.1.0 升级 0.1.1 注意事项」;BL2 是直接写 bl2 分区的,不受影响。升上来之后,引导菜单标题还是老的 / 新菜单项没出现?
Boot menu: refreshing saved environment for v2。这个动作发生在新 U-Boot 第一次真正开机的时候,所以刷完 fip 之后至少要完整重启一次才看得到。不需要去点「Reset all settings to factory defaults」—— 那是 0.1.0 时代的办法,代价是连出厂 MAC 一起没了。面板灯在流水、串口也说服务起来了,但 192.168.1.1 就是打不开
Using … device, MAC …。如果 MAC 是 ff:ff:ff:ff:ff:ff,就是这个原因:ri 卷被擦空了(重建过 UBI,或点过引导菜单第 8 项),U-Boot 把擦除态的 flash 当成 MAC 读了出来。这个地址是广播地址,DHCP 本身是广播所以能拿到 IP,但设备回给你的每一个单播包都会被对端丢掉 —— 表现就是「什么都正常,就是打不开」。0.1.1 已经修了:认出这种情况会自动换一个随机 MAC,串口上会明说
ethaddr is ff:ff:ff:ff:ff:ff … a generated address will be used and saved。还停在 0.1.0 的话,可以在串口里 setenv ethaddr <机身标签上的 MAC> 再 saveenv 临时解决,然后照上面的办法升到 0.1.1。想彻底拿回真实 MAC,用「退回原厂」把备份的 ri 写回去。已经刷过 preloader 和 fip 了,以后升级还要再传这两个文件、勾「先重建 UBI」吗?
mtd 分区,完全不碰 UBI;U-Boot(fip) 只替换 UBI 里 fip 这一个卷,两者都不需要先清空重建。「先重建 UBI」只在从别的布局第一次换过来这一种情况下才需要勾,日常升级勾上反而会把出厂 MAC 和所有设置一起清空。想从这个 U-Boot 换回 tcboot,能靠这个网页操作吗?
all_flash.bin。换成 tcboot 不行。tcboot 是另一套引导程序和分区布局,这个网页只认自己的
bl2 分区和 UBI 里的几个卷,写不了它。ubi 和 tcboot 之间互相切换在这个项目里都算「完整刷机」,要走 tcboot 自己的刷机方式,不是这份文档覆盖的范围。现在是原厂引导,想直接换成这个网页版 U-Boot,要勾「先重建 UBI」吗?
「先重建 UBI」这个勾选框到底在干什么?
写入过程中网线断了 / 电脑睡眠了,会不会写坏?
文件选错了、或者名字不对,网页能拦住吗?
.itb 选进了 BL2 那一格),但只提醒不强制拦 —— 文件名是可以被改的,最终还是要靠你自己核对确认框里列出的文件和大小。刷错固件本身不严重,机器还能再进这个页面重来;真正的高风险操作只有「文件名对不上」和「勾了先重建 UBI」这两种,确认框里也只对这两种情况变成醒目的橙色警告。