📦 这是 0.2.0 的存档教程。最新版(0.3.0)在 recovery-guide.html。

网页 U-Boot 指南

给普通用户看的操作手册:怎么把 Airoha 方案的光猫(机型见下方支持机型)换成带浏览器救砖功能的 U-Boot(Airoha Web U-Boot),以及换好之后怎么用它。跟着步骤做,不需要懂 U-Boot 或 Linux。

对应恢复页 0.2.0仅适用 ubi 变体支持机型 ↓master-airoha
★这个 U-Boot 和恢复页都是业余时间做的,全部开源、没有任何收费。觉得有用的话,去 GitHub 点个 Star——这是对作者最好的支持。Loong1996/ImmortalWrt-Airoha →

支持机型

网页 U-Boot 本身不认机型,同一份页面服务所有开了它的板子。下表是已知能用的机器,以及下载固件时该选哪一个。

机型SoC下载时选状态备注
Nokia XG-040G-MDAiroha AN7581XG-040G-MD实机验证本教程的截图与串口日志都来自它
Nokia XG-040G-MFAiroha AN7583XG-040G-MF实机验证与 MD 共用分区布局与恢复页,步骤完全相同
Nokia XG-140G-MDAiroha AN7581XG-040G-MD实测可用同一套参考设计,直接用 XG-040G-MD 的固件;设备详情页会显示为 XG-040G-MD
ZNXT ZN515XG-DAiroha AN7581XG-040G-MD实测可用同上,直接用 XG-040G-MD 的固件

其他 AN7581 参考设计的机器大概率也能直接用 MD 固件,试过的请到仓库 Issues 或 QQ 群 1092754041 反馈。

下载固件

只列出最近一次 ubi 自适应内存构建。点文件名直接下,文件名不用改,网页会按名字做核对。

全部 Releases →
正在读取最新 Release…

准备工作

如果系统还能正常进 OpenWrt 后台,SSH 上去执行 cat /proc/mtd:看到 bl2 和 ubi 两个分区名,说明已经是这个 U-Boot 了,直接看「日常使用」;看到 bootloader / ubootenv,或者 nsb_1 / romfile,就是 tcboot 或原厂,走「首次迁移」。

  • 网线一根 + 一台电脑
    只用来连这台路由器,不需要能上外网。网线到时候插 LAN 2~4,LAN 1 在 U-Boot 下无效。固件先在上方下好。页面按桌面浏览器设计,手机也能用。
  • USB 转 TTL 串口模块仅首次迁移
    3.3V 电平的那种(不是 RS232),CH340 一类都行,带 3 根杜邦线。之后日常用网页就不再需要它。
  • 支持 Xmodem 发送的串口终端仅首次迁移
    Windows 上 MobaXterm、SecureCRT、Xshell 都自带「发送文件 → Xmodem」;macOS / Linux 用 minicom,或装 lrzsz 后在 screen 里用 sx。
  • 先做一次整机 flash 备份仅首次迁移
    首次迁移会清空原厂分区,其中 ri(MAC / 序列号)和 bosa(光模块校准)是这台机器独有的、没有第二份。备份方法见 原厂备份与刷回原厂。备份的 all_flash.bin 以后能在网页里整片刷回原厂。

A · 首次迁移 · 接串口,传两个文件

先不要插网线。只有这一次需要打开机壳接串口,传完两个引导文件之后,剩下的和以后的每一次都只用浏览器。

找到串口调试口,接好线

拆开机壳,主板上电解电容旁边有一排焊盘,标着 Tx Rx GND(图中「内存」箭头只是顺带标出芯片位置,跟接线无关):

主板串口焊盘位置,红色箭头标出 Tx / Rx / GND
▲ 主板实拍,电解电容左侧就是调试串口

接线是「交叉」的——模块的 TX 接主板的 Rx,模块的 RX 接主板的 Tx,GND 接 GND。不同批次位置可能略有出入,以实物丝印为准:

电脑
USB 口
TX
RX
GND
USB-TTL
模块
→Rx
→Tx
→GND
路由器
调试口

打开串口终端

端口选 USB-TTL 模块对应的那个(Windows 是 COMx,macOS / Linux 是 /dev/tty.usb… 或 /dev/ttyUSB0),参数 115200 · 8 · 无校验 · 1 停止位 · 无流控。这时候先别接路由器电源。

长按 reset 并同时上电,看到 Press x 立刻按 x

[ 164.234828] br-lan: port 4(lan4) entered disabled state Press x <- 看到就立刻按键盘 x CCC <- 刷出 C 就用 Xmodem 发送 preloader.bin

▲ 前面那一大段启动日志不用看,就盯着 Press x 这一行

依次 Xmodem 发送两个文件

先发 …-preloader.bin。传完路由器自动重启一次,很快刷出第二个提示,再按一次 x,出现 C 后发送 …-bl31-uboot.fip:

MRW RKO MR#6 = 0xc6b DRAM FLOW DONE!!! NOTICE: BL22: v2.10.0 (release):ImmortalWrt v2.10-2 (an7581-bl2) NOTICE: Current in BL23 Press x to load BL31 + U-Boot FIP <- 再按一次 x,出现 C 后发送 bl31-uboot.fip

▲ 满屏 MRW 是内存训练,属于正常;MF 机器这里显示 an7583

fip 传完路由器会自己跑起新 U-Boot。接下来有两种方式进网页恢复模式,结果完全一样:

方式怎么做要注意什么
一直按住 reset最稳,推荐发送快结束时以及紧接着出现的启动菜单,reset 都继续按住不要松(约 15 秒),直到面板流水灯亮起来没有时间窗口——按着就一定进得去
启动菜单选第 9 项可以松开 reset,等菜单出现后用 ↑↓ 选到 Start web recovery server 回车菜单只停约 3 秒,错过了要回第 3 步重传
两种方式必须走满一种。既松了 reset、又没在菜单上选中第 9 项,U-Boot 会当成普通开机往下走,在原厂那套分区布局上建不出卷,于是自己清一遍 flash 再重启——刚传的两个文件白传,回第 3 步重来。只是白费功夫,不会把机器弄坏。
Airoha Web U-Boot 0.2.0 U-Boot 2026.07-ImmortalWrt-r… 1. Run default boot command. 2. Boot system via TFTP 3. Boot production system from NAND 4. Load production system via TFTP then write to NAND 5. Load BL31+U-Boot FIP via TFTP then write to NAND 6. Load BL2 preloader via TFTP then write to NAND 7. Reboot 8. Reset all settings to factory defaults 9. Start web recovery server (http://192.168.1.1) <- 松开 reset 的走这里 a. About - github.com/Loong1996/ImmortalWrt-Airoha 0. Exit

▲ 菜单只停约 3 秒:按着 reset 的等它自己过去,没按的赶紧选到第 9 项

不管走哪一种,看到 Listening for HTTP on 192.168.1.1 才是真正进入了网页恢复模式(一直按着 reset 的,这时可以松手):

Airoha Web U-Boot 0.2.0 by Loong Project https://github.com/Loong1996/ImmortalWrt-Airoha Guide https://loong1996.github.io/ImmortalWrt-Airoha/recovery-guide.html Using airoha-gdm1 device, MAC 90:03:2e:xx:xx:xx Listening for HTTP on 192.168.1.1 port 80 Handing out DHCP leases from 192.168.1.1

看到流水灯就成了,再插网线

流水
正在等你打开浏览器上传

A · 首次迁移 · 网页「引导升级」一次传三样

这一步和日常使用共用同一个网页,区别只是用左栏的「引导升级」页,并打开「重建 UBI」。

网线插好,浏览器打开 192.168.1.1

进流水灯之后再插网线,插 LAN 2、3、4 任意一个;LAN 1 无效——那是 2.5G 口,U-Boot 里没有它的驱动,插上去什么都不会发生。电脑设成自动获取 IP,分到 192.168.1.100 就说明插对了——U-Boot 里带了个迷你 DHCP 服务器,就是为了省掉手动配 IP 这一步。换了别的机型,哪个口有效不一定一样:流水灯亮着的时候逐个口试,哪个口能拿到这个 IP 就用哪个。

左栏选「引导升级」,三个格子都选好,打开「重建 UBI」

BL2 选 …-preloader.bin,U-Boot 选 …-bl31-uboot.fip,固件选 …-squashfs-sysupgrade.itb,「重建 UBI」开关打开——旧的分区布局里没有合法的 UBI 结构,不开这一步后面会失败。

192.168.1.1

▲ 三个文件都已选好,「重建 UBI」已打开。右上角状态行会汇总已选文件数与总大小

点「上传并刷写」,核对确认框

确认框列出三个文件的名字与大小,并用橙色提醒「重建 UBI 将清除出厂 MAC、U-Boot 环境与用户配置」——首次迁移这是正常且必要的,核对无误后点红色的「仍要写入」。

192.168.1.1

▲ 橙色是提醒,仍可写入;红色是硬错误(没选文件、偏移不对齐之类),按钮会直接消失

上传完成页出现,就可以关掉浏览器了

上传中能看到正在传哪个文件、传了多少。传完页面切到「上传完成」——这页已经没有作用,可以关掉,网线也可以拔。真正写入 flash 在这之后由设备自己做,进度只看面板灯:

齐闪
正在写入,请勿断电
熄灭
写完了,自动重启,约 1–2 分钟后可重新连接
齐闪期间唯一不能做的事是断电。网线随时可拔,写 flash 不经过网络;断电会让 flash 处于半写状态,只能再用串口救。
灯灭很久还没进系统?直接断电重启一次。有小概率卡在重启过程里的 Press x 等按键,没有串口连着时没人按,看起来像卡住了;重新上电通常就正常。
重建 UBI 把出厂 MAC 也清空了,网络能用但 MAC 是随机值——串口上会明确写出来。想拿回真实 MAC,用「创建 UBI 卷」把之前备份的 ri 写回去即可,随时能做,不用重刷固件。

B · 日常使用 · 进恢复页

迁移完成之后,这个恢复页就一直带在路由器的 U-Boot 里。日常只用第一种方式就够了。

什么时候怎么进
想主动刷机 / 升级引导不用串口先上电,等 1~2 秒后再按住 reset,一直按着,等面板五个灯开始流水再松手(约 15 秒)。进流水灯之后再把网线插到 LAN 2~4
机器起不来了什么都不用做——从 NAND 引导失败后会自己起网页,把网线插到 LAN 2~4 即可
手上正好接着串口引导菜单用 ↑↓ 选到第 9 项 Start web recovery server 回车

三种方式进的是同一个服务。流水灯亮起来就是进去了,这时把网线插到 LAN 2~4(LAN 1 在 U-Boot 下无效),电脑自动获取到 192.168.1.100 之后,浏览器打开 192.168.1.1。换了机型就逐个口试,能拿到这个 IP 的口就是对的。

菜单第 8 项「Reset all settings to factory defaults」平时不要点。它会连出厂 MAC 一起清掉——网页照样能开(会自动换随机 MAC),但真实 MAC 得靠「创建 UBI 卷」把 ri 写回去。

B · 页面里有什么

0.2.0 的页面按桌面浏览器设计:左栏一项一个任务,右边只显示那一个任务的表单。每页各自提交,不存在「这两样不能一起传」的报错。

左栏做什么什么时候用
日常刷机只传一个固件 …-sysupgrade.itb升级、救砖,最常用
引导升级BL2、U-Boot、可选固件,加「重建 UBI」开关首次迁移;或升级 U-Boot 本身(这时不要开重建)
刷回原厂把整片备份 all_flash.bin 从偏移 0 写回;也可以填别的偏移只写一段真的想彻底还原这台机器
创建 UBI 卷「出厂数据」写回 ri / bosa;「任意卷」按卷名写,卷不存在就建补回出厂 MAC;高级用途
设备详情机型、闪存、分区、MAC、U-Boot 版本、UBI 卷表——全部从设备上实时读核对机型、看卷有没有
关于版本、作者、项目主页
192.168.1.1

▲ 「设备详情」页:机型在这里核对,页面本身不写死任何机型,MD 和 MF 用的是同一份页面

B · 日常刷机

日常升级只传固件这一个文件,用「日常刷机」页;BL2 和 U-Boot 只在它们本身要更新时才去「引导升级」页传,并且不开「重建 UBI」。

「日常刷机」页选好固件,点「上传并刷写」

192.168.1.1

▲ 固件已选好。左栏最下面的 ◐ 切换深浅色

确认框核对大小,点「仍要写入」

只刷固件的确认框只有一条提醒:rootfs_data 会被清空,也就是所有设置回到出厂——这个页面的定位是「系统起不来了」,系统还能进的话请用 sysupgrade 保留配置。

看进度条,传完看面板灯

192.168.1.1

▲ 上传中:左边是正在传哪个文件、传了多少,右边是总量与百分比

192.168.1.1

▲ 上传完成:本页面已无作用,可以关闭;设备写完自动重启

覆盖正在运行的这个 U-Boot 本身也是安全的:SPI-NAND 不支持原地执行,当前这份 U-Boot 早就解压在内存里跑了,和 flash 上的旧副本没关系。

B · 面板灯是唯一的进度来源

上传结束后连接就关闭了,浏览器和设备之间再没有通道——之后的每一步只能看灯。

面板含义能拔网线吗
五灯流水在等你上传❌ 还在传
五灯齐闪正在写 flash✅ 随便拔
熄灭后重启写完了✅
拔网线随时安全,写 flash 不经过网络。要命的是断电——齐闪期间断电才是真的把机器写砖。

「创建 UBI 卷」页勾了「写入后不重启」的话,灯会从齐闪回到流水——那就是写完了,页面上可以接着传下一个。

B · 补回出厂 MAC(创建 UBI 卷)

首次迁移开过「重建 UBI」,或点过菜单第 8 项,出厂 MAC 就没了。0.2.0 会自动换一个随机 MAC 让网络能用,想拿回真实 MAC 就把当初备份的 ri 写回去。随时可以做,不用重刷固件。

左栏「创建 UBI 卷」,「出厂数据」组里 ri 选备份文件

bosa(光模块校准)也在这一组,两个可以一起传。文件必须是你自己这台机器备份出来的——拿别人的写进去,等于把别人的身份刷到你机器上。

192.168.1.1

▲ 「出厂数据」那两行只有设备上配置了这两个卷时才出现;下面「任意卷」是高级用途

确认框会写明只写这一个卷,点「仍要写入」

步骤是「挂载 UBI → 写入 ri 卷 → 自动重启」,引导器与固件不动。写入很快,灯齐闪一下就重启了。文件长度不对(不是正好 256 KiB)会在上传时就被拒绝,什么都不会写。

「任意卷」那一组按卷名写:卷在就在位写,不在就按文件长度新建。勾「写入后不重启」可以连着恢复多个卷——写完留在本页,指示灯回到流水后刷新页面传下一个。

B · 刷回原厂

把迁移前备份的整片 all_flash.bin 传进「刷回原厂」页,写入偏移留 0x0。文件很大,上传和写入都比刷固件慢得多。

192.168.1.1

▲ 偏移 0x0 整片写回;填某个原厂分区的起始(如 0xC0000)就只写那一段

分区表不在 flash 上,跟着固件走。哪怕现在这个 U-Boot 只认得 bl2 + ubi 两块,把出厂字节按出厂偏移整片写回去,原厂的分区划分也跟着回来。
写完这台机器上就没有这个救砖页了。之后想再回 OpenWrt,得重新拆机接串口,照「首次迁移」从头走一遍。页面不校验镜像与机型是否匹配——MD 与 MF 的备份长度相同,刷错机型只能靠串口救。动手之前先确认串口线还在。

没有 all_flash.bin?只能走串口了——这个文件只能在机器还是原厂状态时备份出来,事后无法重建。

C · 0.2.0 有什么变化

已经是 0.2.0 的可以跳过本节。

页面重做

按桌面浏览器设计的侧边栏布局,一页一个任务,不再有「这两样不能同时传」的报错。深浅色照旧。

不再写死机型

MD 与 MF 共用同一份页面,机型、闪存、分区、UBI 卷表都从设备上实时读,在「设备详情」页核对。

上传前就把错误拦下

出厂卷长度不对、偏移没对齐或超出容量、卷名非法——设备直接拒收并说明原因,此时什么都还没写。

刷回原厂可以填偏移

默认 0x0 整片;填某个原厂分区的起始就只写那一段。

创建 UBI 卷

出厂数据 ri / bosa 与任意卷合到一页;任意卷不存在时按文件长度新建;「写入后不重启」可以连着恢复多个卷。

上传进度更具体

显示正在传哪个文件、传了多少;传完明确告诉你页面已无作用可以关闭。

C · 从 0.1.x 升级到 0.2.0

用现在这个 0.1.x 的恢复页就能做:展开「引导程序」,重传 BL2 和 U-Boot 两个文件,固件留空,不要勾「先重建 UBI」。

先在 LuCI 备份一次配置

系统 → 备份/升级 → 生成备份文件。0.1.1 之后的版本升级引导不会清配置,但花十秒备份总没坏处。

进 0.1.x 的恢复页,只传两个引导文件

「引导程序」里 BL2 选 …-preloader.bin,U-Boot 选 …-bl31-uboot.fip,固件留空,「先重建 UBI」不要勾——勾了会把出厂 MAC 和所有设置一起清掉。0.2.0 里对应的就是「引导升级」页:

192.168.1.1

▲ 以后再升级 U-Boot 就是这样:两个引导文件,固件留空,重建 UBI 关着

重启后引导菜单标题变成 Airoha Web U-Boot 0.2.0

新 U-Boot 第一次开机会自己比对菜单版本,把保存的环境变量刷新一遍,串口上能看到 Boot menu: refreshing saved environment。不需要点「Reset all settings to factory defaults」。

常见问题

面板灯在流水、串口也说服务起来了,但 192.168.1.1 打不开
先换个网口:LAN 1 在 U-Boot 里没有驱动,只有 LAN 2~4 有效;别的机型就逐个口试,电脑拿到 192.168.1.100 才算插对。再看串口那行 Using … device, MAC …。如果是 ff:ff:ff:ff:ff:ff,说明 ri 卷被擦空而 U-Boot 版本太老(0.1.0);0.1.1 起会自动换随机 MAC。另外确认电脑是自动获取 IP 且拿到了 192.168.1.100,浏览器地址栏用 http:// 不是 https://。
为什么网线插 LAN 1 没反应?
LAN 1 是 2.5G 口,走 SoC 的 GDM4 接外置 PHY EN8811H,这颗 PHY 每次上电都要先灌一份固件才能工作;U-Boot 里既没有这条通路的驱动,也不带那份固件。LAN 2~4 挂在 SoC 内置交换机上,U-Boot 只驱动这一个口,串口里 Using airoha-gdm1 device 说的就是它。进系统之后 LAN 1 一切正常,只是救砖时用不上。
已经刷过 preloader 和 fip 了,以后升级还要再传吗?要开「重建 UBI」吗?
不用。日常更新只传固件就够了,用「日常刷机」页。BL2 直接写 mtd 分区,U-Boot 只替换 UBI 里 fip 那一个卷,两者都不需要重建。「重建 UBI」只在从别的布局第一次换过来时才需要,日常开了就是把出厂 MAC 和所有设置清空重来。
「重建 UBI」到底在干什么?
把 UBI 里现有的全部卷(包括出厂 MAC、U-Boot 环境)先擦掉,再重新建一个空的 UBI 分区去装新数据。只有旧的分区布局上本来就没有合法 UBI 结构时才需要。
现在是原厂引导,想换成这个 U-Boot,要开「重建 UBI」吗?
要。原厂分区里同样没有合法的 UBI 结构,跟从 tcboot 迁移过来是完全一样的流程——照「首次迁移」做即可。
写入过程中网线断了 / 电脑睡眠了,会不会写坏?
不会。上传结束、页面显示「上传完成」之后,浏览器和设备之间的连接本来就已经关闭,接下来的写入是设备自己在做。只要面板灯还没到「齐闪」阶段,拔网线、关浏览器都是安全的。
文件选错了、名字不对,网页能拦住吗?
能查的都在上传前查:出厂卷长度不对、偏移没对齐或超出容量、卷名非法,设备直接拒收并把原因显示在进度条下面。文件名与常规命名不符只提醒不拦——文件名可以被改,最终靠你核对确认框里列出的文件和大小。
MD 和 MF 的固件、教程通用吗?
教程通用,固件不通用——MF 是 AN7583,下载时在「下载固件」那里切到 XG-040G-MF。恢复页是同一份,「设备详情」页会显示机型。刷回原厂时两款机器的整片备份长度相同,页面分辨不出来,别拿错文件。
想从这个 U-Boot 换回 tcboot,能靠网页操作吗?
换回原厂可以——「刷回原厂」页整片写回备份的 all_flash.bin。换成 tcboot 不行,那是另一套引导和分区布局,这个页面写不了它;而且 tcboot 变体已经不再维护。
Loong 的赞赏码

业余时间维护,全部开源。觉得有用可以请作者喝杯咖啡,不强求。