H3C RC3000、RT3000、RW3000通刷、支持任意版本刷公版、支持救砖(ttl可进uboot情况下)

附件:笔者已经提取出的rootfs文件:公版NX30 R005版本:rootfs_NX30V100R005,公版NX30 005版本:rootfs_NX30V100R013:
链接:https://pan.quark.cn/s/4da6d87bdc10
提取码:fA8C
建议刷005版本,还有ssh,不想或者没有条件提取的可以下载文件跳到第3阶段开始操作

普通刷机 操作可参考:【RC3000\RT3000\RW3000\RW3010\NX30】高版本玩机+官方固件收集-H3C新华三网络设备-恩山无线论坛 - Powered by Discuz!

第一阶段:诊断与信息收集

  1. 确认硬件一致性
    通过TTL(或者ssh)进入设备后台,在U-Boot中执行smeminfo和printenv命令(或者ssh中执行cat /proc/mtd和fw_printenv),确认:

闪存分区布局完全一致(此系列设备应该都大差不差,确认一下是不是从rootfs启动的、然后后面操作的时候针对rootfs分区操作,有时候rootfs对应mtd15有时候对应mtd16,mtd名字和地址可能需要稍微做下区分)

处理器、内存等硬件规格相同

第二阶段:从一台设备提取系统
示例1:ttl进RT3000

  1. 进入RT3000系统
    在RT3000的U-Boot中修改启动参数,进入单用户模式:

1.setenv bootargs 'console=ttyMSM0,115200n8 single init=/bin/sh'
2.bootipq

  1. 备份关键分区
    在单用户模式下,挂载tmpfs并备份:

mount -t tmpfs tmpfs /tmp
mknod /tmp/mtd15 c 90 30 # rootfs设备节点
mknod /tmp/mtd21 c 90 42 # kernel设备节点
dd if=/tmp/mtd15 of=/tmp/rootfs_backup.bin bs=128k # 40MB 备份rootfs
dd if=/tmp/mtd21 of=/tmp/kernel_backup.bin bs=128k # 4.1MB 备份kernel(可选,应该不需要)
md5sum /tmp/*.bin # 记录校验和

  1. 传输备份文件
    在RT3000的U-Boot中使用tftpput命令上传到电脑(需要电脑上安装一个tftp服务器 ):

nand read 0x44000000 0x900000 0x2800000
tftpput 0x44000000 0x2800000 192.168.10.19 rootfs_backup.bin

示例2:ssh进RT3000

查看分区找到rootfs分区

cat /proc/mtd

查看当前ubi设备信息,确认一下是从rootfs启动的(观察这个命令的结果和上一个命令的mtd序号)

cat /sys/class/ubi/ubi0/mtd_num

备份rootfs分区

dd if=/dev/mtd21 of=/tmp/kernel_backup.bin bs=128k

备份kernel分区,可选

dd if=/dev/mtd21 of=/tmp/kernel_backup.bin bs=128k

ssh能用的情况下用mobaxterm等工具很容易把本分文件从路由器 系统拖出来

示例:
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "0:SBL1"
mtd1: 00080000 00020000 "0:MIBIB"
mtd2: 00040000 00020000 "0:BOOTCONFIG"
mtd3: 00040000 00020000 "0:BOOTCONFIG1"
mtd4: 00100000 00020000 "0:QSEE_1"
mtd5: 00100000 00020000 "0:QSEE"
mtd6: 00040000 00020000 "0:DEVCFG_1"
mtd7: 00040000 00020000 "0:DEVCFG"
mtd8: 00040000 00020000 "0:CDT_1"
mtd9: 00040000 00020000 "0:CDT"
mtd10: 00080000 00020000 "0:APPSBLENV"
mtd11: 00140000 00020000 "0:APPSBL_1"
mtd12: 00140000 00020000 "0:APPSBL"
mtd13: 00100000 00020000 "0:ART"
mtd14: 00080000 00020000 "0:TRAINING"
mtd15: 02800000 00020000 "rootfs_1"
mtd16: 02800000 00020000 "rootfs"
mtd17: 00600000 00020000 "pdt_data"
mtd18: 00600000 00020000 "pdt_data_1"
mtd19: 00100000 00020000 "exp"
mtd20: 01700000 00020000 "plugin"
mtd21: 003c1238 0001f000 "kernel"
mtd22: 0036c800 0001f000 "wifi_fw"
mtd23: 00004800 0001f000 "bt_fw"
mtd24: 01059000 0001f000 "ubi_rootfs"
mtd25: 00706000 0001f000 "rootfs_data"
mtd26: 002e8000 0001f000 "pdt_data"
mtd27: 002e8000 0001f000 "pdt_data"
mtd28: 01360000 0001f000 "plugin"
root@OpenWrt:~# cat /sys/class/ubi/ubi0/mtd_num
16
root@OpenWrt:~# dd if=/dev/mtd16 of=/tmp/rootfs_backup.bin bs=128k
320+0 records in
320+0 records out
41943040 bytes (40.0MB) copied, 8.059546 seconds, 5.0MB/s
root@OpenWrt:~# dd if=/dev/mtd21 of=/tmp/kernel_backup.bin bs=128k
30+1 records in
30+1 records out
3936824 bytes (3.8MB) copied, 0.754260 seconds, 5.0MB/s
root@OpenWrt:~#

第三阶段:修复RC3000

  1. 设置正确的环境变量
    在RC3000的U-Boot中,设置与RT3000完全一致的身份:
    uboot里:注意检查地址

setenv productname NX30
setenv productconfig /etc/config/NX30/product_NX30.ini
setenv mtdparts 'mtdparts=nand0:0x2800000@0x900000(fs)'
saveenv

  1. 刷入系统镜像
    tftpboot 0x44000000 rootfs_backup.bin
    nand erase 0x900000 0x2800000
    nand write 0x44000000 0x900000 0x2800000
    reset
  2. 成功启动
    重启后,RC3000正确识别为“H3C NX30”,系统正常启动,无线网络正常广播。

第四阶段:解决Mesh组网问题

  1. 发现问题
    两台设备Wi-Fi名称相同,但Mesh组网失败。日志显示MAC地址冲突:

add ebtables -I FORWARD -s 08:61:2f:8f:42:57 -o ath14 -j DROP

RC3000的回程MAC(08:61:2f:8f:42:57)与RT3000的MAC过于相似,触发防冲突机制。

  1. 根本解决
    在RC3000的U-Boot中设置全新的随机MAC地址(搜一个随机mac地址在线生成),彻底消除冲突:
    uboot:

setenv ethaddr 8E:B7:F5:FF:D6:FF # 全新的随机地址,替换成你自己生成的,不然可能会出现冲突
saveenv
reset

ssh命令行

fw_setenv ethaddr 8E:B7:F5:FF:D6:FF # 全新的随机地址,替换成你自己生成的,不然可能会出现冲突
reboot

  1. 最终状态
    重启后,RC3000基于新MAC生成独立回程地址,Mesh协议栈完全就绪,等待配对连接。

关键技术与经验

  1. 核心修复原理
    硬件相同是前提:通过smeminfo确认分区布局一致。

身份伪装是关键:U-Boot环境变量productname和productconfig必须一致。

完整分区备份:直接从正常设备备份rootfs分区,而非使用官方升级包。

  1. 工具与命令
    U-Boot关键命令:tftpput、nand read/write/erase、setenv/saveenv

Linux备份命令:mknod创建设备节点、dd备份分区

网络配置:TFTP服务器传输大文件

  1. 避坑指南
    操作rootfs:地址可mtd分区序号有可能不一样,认准rootfs分区进行提取和刷写。

先改环境变量再刷机:顺序错误会导致刷机后仍无法启动。

MAC地址冲突:Mesh设备需要完全独立的MAC地址,相似地址会触发阻断。

成果与展望
通用:支持此系列路由器高版本系统随意刷写系统、支持救砖(只要还有uboot)

功能完整:所有网络功能正常,Wi-Fi信号良好。

Mesh就绪:技术障碍全部清除,只需标准配对操作即可组网。

通用方案:此方法适用于所有硬件相同的运营商定制版互刷。

致谢
感谢恩山无线论坛等社区的前人经验。感谢deepseek 提供的命令指导(大家操作过程中也可以求助AI)和文档总结梳理,希望本记录能帮助遇到类似问题的朋友。
https://blog.csdn.net/gongcheng521/article/details/156914114?spm=1001.2014.3001.5502