机器是刚出来的时候买的,系统刷的别人改过的,东西太多了,哪怕硬件资源有空,也很慢,而且很多应用其实处于不可用的状态,配置固定到了某一次保存的状态,每次重启都会回到那个状态,配置是否应用成功完全是个迷,很长时间都是当中继路由在使用了
这次虽然中间变砖了,但救回来进入新系统后能感觉能质的飞跃
找到另一篇文章,好你默认就是没有web界面,必须要 TFTP 服务的,参考 H3C-NX30PRO.html#进入-u-boot-并刷入固件
版本跨度太大,导致中间变半砖了,操作忘记截图了,就这样吧,原厂小分区就24Mb,啥也干不了
主机当前信息
- 主机型号:H3C NX30PRO
- 架构:ARMv8 Processor rev 4 (v8l) x 2 (1298MHz)
- 目标平台:mediatek/mt7981
- 固件版本:ImmortalWrt 18.06-5.4-SNAPSHOT r11814-ef0c86bdb0 / LuCI branch (git-22.323.17670-f9380b5)
- 内核版本: 5.4.224
目标&操作计划
准备通过下面方法升级到 25.12.0,这是 AI 提供的方案,方案是没有问题的,但是没有比较明显的警告
- 下载文件备用: ImortalWrt Firmware Selector
- Bootloader 镜像:文件名包含 …-u-boot.bin 或 …-bl31-uboot.fip
- 恢复内核镜像 (Recovery):文件名包含 …-initramfs-recovery.itb
- 系统升级镜像 (Sysupgrade):文件名包含 …-squashfs-sysupgrade.itb
- preloader.bin:我没刷,但没问题,应该是我是升级,而不是从原版系统刷
- 通过 SCP 将 Bootloader 文件传至 /tmp SCP 基本使用方法
- SSH 连接路由查看分区表,运行 cat /proc/mtd, 检查列表中是否有名为 “FIP” 或 “fip” 的分区(大小通常为 00200000)
- 写入引导 mtd write /tmp/immortalwrt-25.12.0-xxx-u-boot.bin FIP (上一步查到的分区名是小写,最后的 FIP 也要改成小写 fip),如果是原版系统,还需要 mtd write /tmp/immortalwrt-mediatek-filogic-h3c_magic-nx30-pro-preloader.bin BL2
- 断电重启:提示写入成功后,直接拔掉路由器电源。此时旧系统已被破坏,无法正常开机,接下来必须通过 U-Boot 救砖模式注入新系统。(下面进入下一阶段,利用U-Boot 恢复模式安装新系统)
- 设置静态IP 192.168.1.254,子网掩码 255.255.255.0,网关 192.168.1.1,网线连接路由 LAN 口
- 触发 U-Boot界面:路由器在断电状态下,用卡针按住背部的 Reset(恢复)按钮不放,插上路由器电源,继续按住 Reset 键保持 10-15 秒左右(H3C NX30PRO 的状态灯是常绿的,不会变化,注意时间就行)
- 进入刷机网页:打开电脑浏览器,在地址栏输入 192.168.1.1 并回车。此时网页会展现出全新的 ImmortalWrt U-Boot 恢复页面。
- 刷入恢复固件 在 U-Boot 网页中点击“选择文件”,上传【恢复内核镜像 (Recovery)】文件。点击 Update / Flash。等待大约 1-2 分钟,路由器会自动重启。 (下面进入下一阶段:最终 Sysupgrade 写入与完成)
- 进入临时系统:在浏览器中访问 192.168.1.1,此时会进入一个界面简陋的临时 Recovery 系统(不需要密码,直接登录),这个时候会有两个提示,一个设置root密码,一个是提示上传sysupgrade 固件包(我的版本有的)
- 直接按提示进入【系统 (System) -> 备份/升级 (Backup / Flash Firmware)】,选择更新固件,上传系统升级镜像 (Sysupgrade)并点【刷写固件】
- 等待2-3分钟,将电脑网卡的 IP 地址重新改回 “自动获取 IP (DHCP)” (可选项)
- 重新进入 192.168.1.1,默认账户root,无密码,完成
正题:半砖与救回
上面的方案是没有问题的,但可能我选的版本跨度太大,根据信息 25.12 底层架构和系统组件有全面升级,不知道是否是这个原因,总之在第七步触发 U-Boot界面时出现了问题,无法正常进入刷机网页。
新砖状态
经过测试状态如下:
- 能ping 192.168.1.1;TTL64;每20秒断1秒,很规律;
- 无法连接至网页服务,测试超时
- curl -I http://192.168.1.1
- curl -k https://192.168.1.1
- 端口不可用,测试超时
- nc -zv 192.168.1.1 22
- nc -zv 192.168.1.1 80
- nc -zv 192.168.1.1 443
经过 AI 分析,认为 Bootloader 还活着,没完全变砖,U-Boot 启动了,Linux启没启动不知道,第四步 mtd write 命令只更新了 FIP 分区,而旧的 BL2 分区没动,导致两个核心引导组件不匹配。现在的状态是 U-Boot 卡在初始化环节,无法加载完整的系统,所以只有 ICMP 协议(ping)有响应,而 HTTP、SSH 等服务都无法工作
使用 TFTP 服务进行恢复
参考:
- https://www.right.com.cn/FORUM/archiver/tid-8301215.html?page=3
- https://www.right.com.cn/forum/archiver/tid-8464114.html
操作步骤
- 设置静态IP 192.168.1.254/24,网关 192.168.1.1,网线连接路由 LAN 口 (不同路由 tftp 服务器要求的服务器IP不一样)
- 准备Recovery恢复固件,这次我选的 24.10.0
- 准备 tftp 服务软件(强烈建议使用GUI界面的软件,有日志信息输出,我在 macOS 使用系统自带的 tftp 没有日志,导致完全不知道发生了什么)
- 将Recovery恢复固件名改成 openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb (需要用TFTP日志确认,包名非常重要,我因为这个卡了很久,也是因为上一步没日志导致的)
- 打开 tftp64 软件,点击打开”log viewer”选项卡,设置“Current Directory”目录为Recovery恢复固件所在目录,设置“Server Interface”为192.168.1.254所在接口 ( tftp64这好像是Windows 下的软件,我没用过)
- 触发 U-Boot界面:路由器在断电状态下,用卡针按住背部的 Reset(恢复)按钮不放,插上路由器电源,继续按住 Reset 键保持 10-15 秒左右(H3C NX30PRO 的状态灯是常绿的,不会变化,注意时间就行)
- 稍等一下,注意 ping 稳定了,http://192.168.1.1 应该就能访问了
- 继续之前的第十步,进入临时 Recovery 系统系统继续刷固件,是的,你没猜错, tftp 服务的作用就是半砖状态下(无法使用 SSH 和网页)刷 Recovery 固件的备用方案
以上的每一步都很重要,比如 ip 地址,tftp 的使用,固件的名字等,不熟悉的话每一步都是坑
题外: 建议使用带日志功能的 TFTP 服务端软件
macOS 自带 TFTP 功能,但默认是关闭的,我用的就是它。
但是建议使用有GUI界面的软件,它们一般有日志功能,可以知道路由那边请求的文件名是什么,我是因为用资料里的文件名尝试成功了,否则还要去找软件。
TFTP刷路由固件和 FTP/SSH 不一样,它是由路由向服务端(电脑)主动请求文件的:路由器(TFTP客户端)→ 启动时发送请求 → TFTP服务器(你的电脑)。路由器是主动方,你的电脑是被动提供文件,路由会自动”拉取”指定文件,所以文件名非常重要,如果你不知道,那么TFTP 服务器软件的日志就非常重要
我改完名字后尝试手动上传固件,报超时,但无意发现 ping 正常了,不再中断,尝试了一下网页,发现已经好了
下面是macOS 自带 TFTP 功能的使用方法
打开 Mac 的“终端”(Terminal),按顺序输入以下命令:
# 切换到 TFTP 目录(通常根目录下的 tftpboot 文件夹需要自己创建):
cd /private/tftpboot
# 把你下载好的 recovery.itb 文件复制到这个文件夹里。
sudo /PathToRecovery.itb /private/tftpboot/openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb
# 启动 TFTP 服务:
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist
# 检查,如果显示 PID 数字,就说明服务已成功运行。
sudo launchctl list | grep tftp
# 路由器断电,按住路由器背后的 Reset 按钮通电,Reset 持续按 10-15 秒,路由开始找 tftp 服务器获取特定名字的固件
# 手动上传(不知道固件名字的时候我尝试过,报超时,没成功)
tftp 192.168.1.1
put openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb
# 用完关闭 sftp
sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist
弄完好像发现也没有什么好玩的,我有一台Debian,各种设备上也配置了需要的环境,这个路由除了用了扩展一点点信号之外没有任何作用
