网页 U-Boot 指南
给普通用户看的操作手册:怎么把 Airoha 方案的光猫(机型见下方支持机型)换成带浏览器救砖功能的 U-Boot(Airoha Web U-Boot),以及换好之后怎么用它。跟着步骤做,不需要懂 U-Boot 或 Linux。
★这个 U-Boot 和恢复页都是业余时间做的,全部开源、没有任何收费。觉得有用的话,去 GitHub 点个 Star——这是对作者最好的支持。Loong1996/ImmortalWrt-Airoha →支持机型
网页 U-Boot 本身不认机型,同一份页面服务所有开了它的板子。下表是已知能用的机器,以及下载固件时该选哪一个。
| 机型 | SoC | 下载时选 | 状态 | 备注 |
|---|---|---|---|---|
| Nokia XG-040G-MD | Airoha AN7581 | XG-040G-MD | 实机验证 | 本教程的截图与串口日志都来自它 |
| Nokia XG-040G-MF | Airoha AN7583 | XG-040G-MF | 实机验证 | 与 MD 共用分区布局与恢复页,步骤完全相同 |
| Nokia XG-140G-MD | Airoha AN7581 | XG-040G-MD | 实测可用 | 同一套参考设计,直接用 XG-040G-MD 的固件;设备详情页会显示为 XG-040G-MD |
| ZNXT ZN515XG-D | Airoha AN7581 | XG-040G-MD | 实测可用 | 同上,直接用 XG-040G-MD 的固件 |
其他 AN7581 参考设计的机器大概率也能直接用 MD 固件,试过的请到仓库 Issues 或 QQ 群 1092754041 反馈。
下载固件
只列出最近一次 ubi 自适应内存构建。点文件名直接下,文件名不用改,网页会按名字做核对。
准备工作
如果系统还能正常进 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,模块的 RX 接主板的 Tx,GND 接 GND。不同批次位置可能略有出入,以实物丝印为准:
模块
调试口
打开串口终端
端口选 USB-TTL 模块对应的那个(Windows 是 COMx,macOS / Linux 是 /dev/tty.usb… 或 /dev/ttyUSB0),参数 115200 · 8 · 无校验 · 1 停止位 · 无流控。这时候先别接路由器电源。
长按 reset 并同时上电,看到 Press x 立刻按 x
▲ 前面那一大段启动日志不用看,就盯着 Press x 这一行
依次 Xmodem 发送两个文件
先发 …-preloader.bin。传完路由器自动重启一次,很快刷出第二个提示,再按一次 x,出现 C 后发送 …-bl31-uboot.fip:
▲ 满屏 MRW 是内存训练,属于正常;MF 机器这里显示 an7583
fip 传完路由器会自己跑起新 U-Boot。接下来有两种方式进网页恢复模式,结果完全一样:
| 方式 | 怎么做 | 要注意什么 |
|---|---|---|
| 一直按住 reset最稳,推荐 | 发送快结束时以及紧接着出现的启动菜单,reset 都继续按住不要松(约 15 秒),直到面板流水灯亮起来 | 没有时间窗口——按着就一定进得去 |
| 启动菜单选第 9 项 | 可以松开 reset,等菜单出现后用 ↑↓ 选到 Start web recovery server 回车 | 菜单只停约 3 秒,错过了要回第 3 步重传 |
▲ 菜单只停约 3 秒:按着 reset 的等它自己过去,没按的赶紧选到第 9 项
不管走哪一种,看到 Listening for HTTP on 192.168.1.1 才是真正进入了网页恢复模式(一直按着 reset 的,这时可以松手):
看到流水灯就成了,再插网线
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 结构,不开这一步后面会失败。
▲ 三个文件都已选好,「重建 UBI」已打开。右上角状态行会汇总已选文件数与总大小
点「上传并刷写」,核对确认框
确认框列出三个文件的名字与大小,并用橙色提醒「重建 UBI 将清除出厂 MAC、U-Boot 环境与用户配置」——首次迁移这是正常且必要的,核对无误后点红色的「仍要写入」。
▲ 橙色是提醒,仍可写入;红色是硬错误(没选文件、偏移不对齐之类),按钮会直接消失
上传完成页出现,就可以关掉浏览器了
上传中能看到正在传哪个文件、传了多少。传完页面切到「上传完成」——这页已经没有作用,可以关掉,网线也可以拔。真正写入 flash 在这之后由设备自己做,进度只看面板灯:
Press x 等按键,没有串口连着时没人按,看起来像卡住了;重新上电通常就正常。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 的口就是对的。
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 卷表——全部从设备上实时读 | 核对机型、看卷有没有 |
| 关于 | 版本、作者、项目主页 |
▲ 「设备详情」页:机型在这里核对,页面本身不写死任何机型,MD 和 MF 用的是同一份页面
B · 日常刷机
日常升级只传固件这一个文件,用「日常刷机」页;BL2 和 U-Boot 只在它们本身要更新时才去「引导升级」页传,并且不开「重建 UBI」。
「日常刷机」页选好固件,点「上传并刷写」
▲ 固件已选好。左栏最下面的 ◐ 切换深浅色
确认框核对大小,点「仍要写入」
只刷固件的确认框只有一条提醒:rootfs_data 会被清空,也就是所有设置回到出厂——这个页面的定位是「系统起不来了」,系统还能进的话请用 sysupgrade 保留配置。
看进度条,传完看面板灯
▲ 上传中:左边是正在传哪个文件、传了多少,右边是总量与百分比
▲ 上传完成:本页面已无作用,可以关闭;设备写完自动重启
B · 面板灯是唯一的进度来源
上传结束后连接就关闭了,浏览器和设备之间再没有通道——之后的每一步只能看灯。
| 面板 | 含义 | 能拔网线吗 |
|---|---|---|
| 五灯流水 | 在等你上传 | ❌ 还在传 |
| 五灯齐闪 | 正在写 flash | ✅ 随便拔 |
| 熄灭后重启 | 写完了 | ✅ |
「创建 UBI 卷」页勾了「写入后不重启」的话,灯会从齐闪回到流水——那就是写完了,页面上可以接着传下一个。
B · 补回出厂 MAC(创建 UBI 卷)
首次迁移开过「重建 UBI」,或点过菜单第 8 项,出厂 MAC 就没了。0.2.0 会自动换一个随机 MAC 让网络能用,想拿回真实 MAC 就把当初备份的 ri 写回去。随时可以做,不用重刷固件。
左栏「创建 UBI 卷」,「出厂数据」组里 ri 选备份文件
bosa(光模块校准)也在这一组,两个可以一起传。文件必须是你自己这台机器备份出来的——拿别人的写进去,等于把别人的身份刷到你机器上。
▲ 「出厂数据」那两行只有设备上配置了这两个卷时才出现;下面「任意卷」是高级用途
确认框会写明只写这一个卷,点「仍要写入」
步骤是「挂载 UBI → 写入 ri 卷 → 自动重启」,引导器与固件不动。写入很快,灯齐闪一下就重启了。文件长度不对(不是正好 256 KiB)会在上传时就被拒绝,什么都不会写。
「任意卷」那一组按卷名写:卷在就在位写,不在就按文件长度新建。勾「写入后不重启」可以连着恢复多个卷——写完留在本页,指示灯回到流水后刷新页面传下一个。
B · 刷回原厂
把迁移前备份的整片 all_flash.bin 传进「刷回原厂」页,写入偏移留 0x0。文件很大,上传和写入都比刷固件慢得多。
▲ 偏移 0x0 整片写回;填某个原厂分区的起始(如 0xC0000)就只写那一段
bl2 + ubi 两块,把出厂字节按出厂偏移整片写回去,原厂的分区划分也跟着回来。没有 all_flash.bin?只能走串口了——这个文件只能在机器还是原厂状态时备份出来,事后无法重建。
C · 0.2.0 有什么变化
已经是 0.2.0 的可以跳过本节。
按桌面浏览器设计的侧边栏布局,一页一个任务,不再有「这两样不能同时传」的报错。深浅色照旧。
MD 与 MF 共用同一份页面,机型、闪存、分区、UBI 卷表都从设备上实时读,在「设备详情」页核对。
出厂卷长度不对、偏移没对齐或超出容量、卷名非法——设备直接拒收并说明原因,此时什么都还没写。
默认 0x0 整片;填某个原厂分区的起始就只写那一段。
出厂数据 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 里对应的就是「引导升级」页:
▲ 以后再升级 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 打不开
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 没反应?
Using airoha-gdm1 device 说的就是它。进系统之后 LAN 1 一切正常,只是救砖时用不上。已经刷过 preloader 和 fip 了,以后升级还要再传吗?要开「重建 UBI」吗?
mtd 分区,U-Boot 只替换 UBI 里 fip 那一个卷,两者都不需要重建。「重建 UBI」只在从别的布局第一次换过来时才需要,日常开了就是把出厂 MAC 和所有设置清空重来。「重建 UBI」到底在干什么?
现在是原厂引导,想换成这个 U-Boot,要开「重建 UBI」吗?
写入过程中网线断了 / 电脑睡眠了,会不会写坏?
文件选错了、名字不对,网页能拦住吗?
MD 和 MF 的固件、教程通用吗?
想从这个 U-Boot 换回 tcboot,能靠网页操作吗?
all_flash.bin。换成 tcboot 不行,那是另一套引导和分区布局,这个页面写不了它;而且 tcboot 变体已经不再维护。