Cudy TR3000 256MB 刷机:过渡包→解锁 FIP→U-Boot→maximum-240m 布局
一台 Cudy TR3000 256MB v1(MT7981),从原厂固件刷成可自由刷机的 OpenWrt 机器。本文按实际操作顺序记录全过程,每一步标明在哪台电脑、哪个系统环境下执行,并给出可以停下来核对的检查点。
适用场景:
- 你有一台 TR3000 256MB,想要一个 U-Boot Web 恢复入口,便于后续刷机、切换布局。
- 你想切换闪存布局(本次选择的是
maximum-240m这个 U-Boot 布局标签)。 - 你希望过程可控:每一步都有校验点,发现异常可以停下来确认。
⚠️ 警告:本文涉及对 FIP 分区写入 U-Boot。写错文件或写入过程中断电可能导致设备无法启动,需要串口或更底层手段恢复。执行前备份关键分区,保证供电不要中断。
本文实际时间线与较短路径
本文实际时间线
本文实际操作顺序是:
- 原厂固件 → 刷入 过渡包
- 过渡包 → 刷入 官方 OpenWrt 24.10.5,使用了一段时间
- 后来决定补齐 U-Boot:在 OpenWrt 24.10.5 上备份分区,并尝试解锁 FIP(失败)
- OpenWrt 24.10.5 → 刷入 解锁环境(FIP 可写的 ImmortalWrt)
- 解锁环境 → 写入 第三方 U-Boot(FIP) 并 verify
- 重启进入 U-Boot Web → 选择
maximum-240m布局 → 刷回 官方 OpenWrt 24.10.5
读者可采用的较短路径
如果你的目标就是补齐 U-Boot,可以跳过中间的官方系统步骤:
- 原厂固件 → 刷入 过渡包
- 过渡包 → 直接刷入 解锁环境
- 解锁环境 → 备份关键分区 → 写入 U-Boot(FIP) → verify
- 重启进入 U-Boot Web → 选择布局(例如
maximum-240m)→ 刷入目标固件
本文多出的第 2 步(先刷官方 OpenWrt 24.10.5)对补齐 U-Boot 来说可以省略。
环境与前提
机型与分区识别(在路由器上执行,必须确认)
通过 SSH 登录路由器,执行:
ubus call system board
cat /proc/mtd
设备信息应明确是 256MB v1(区分 128MB 或特殊批次)。cat /proc/mtd 关键分区示例:
mtd0: 00100000 ... "BL2"
mtd1: 00080000 ... "u-boot-env"
mtd2: 00200000 ... "Factory"
mtd3: 00040000 ... "bdinfo"
mtd4: 00200000 ... "FIP"
mtd5: 0e600000 ... "ubi"
其中:
- BL2 = 1MiB:第一阶段引导程序。
- FIP = 2MiB:存放 U-Boot 的分区,也是本文要写入的目标分区。
这两项会直接决定后续备份命令里的 count 和文件大小预期。机型不匹配或分区大小不一致时,不要继续。
文件准备(在电脑上下载,强制按机型匹配)
本文涉及三类文件(示例文件名):
-
过渡包(256MB 版本)
cudy_tr3000-256mb-v1-sysupgrade.bin作用是让设备从原厂固件进入一个可继续 sysupgrade 的环境,便于后续刷入其他固件。
-
FIP 分区只读破解包 / 解锁环境(256MB 对应 sysupgrade)
immortalwrt-24.10.3-mediatek-filogic-cudy_tr3000-256mb-v1-squashfs-sysupgrade.bin -
第三方 U-Boot(写入 FIP 的 bin)
dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin
本文最终回到系统使用的是:
openwrt-24.10.5-mediatek-filogic-cudy_tr3000-256mb-v1-squashfs-sysupgrade.bin
⚠️ 下载目录里往往会混有 128MB 文件,或特定 SN(例如 2544)专用文件。本文对象是 256MB,不要把 128MB 文件或 2544 专用文件写入 256MB 设备。
参考资料
过渡包刷机步骤参考了这篇文章,后续也有多处流程一致:
Step 1:原厂固件 → 刷入过渡包
执行位置:电脑浏览器,操作原厂固件的 Web 管理后台。
进入原厂管理后台(一般在“高级设置 / 固件升级”等位置),上传并刷入过渡包:
cudy_tr3000-256mb-v1-sysupgrade.bin
刷入后的检查点(电脑浏览器 + SSH 登录路由器)
- 重启后能进入过渡包页面(常见为 OpenWrt 或类 OpenWrt 界面)
- 能 SSH 登录并查看基础信息:
cat /etc/openwrt_release
ubus call system board
Step 2:过渡包 → 官方 OpenWrt 24.10.5(本文实际步骤,可省略)
执行位置:电脑浏览器,操作过渡包的 LuCI 界面。
在 LuCI 的“系统 → 备份/升级”里刷入官方固件:
openwrt-24.10.5-mediatek-filogic-cudy_tr3000-256mb-v1-squashfs-sysupgrade.bin
不要勾选“保留配置”,跨环境升级容易引发配置兼容问题。
这一步的意义仅在于提前得到一个可用的 OpenWrt 系统。对补齐 U-Boot 来说,这一步可以省略:过渡包之后可以直接进入 Step 4 刷入解锁环境。
Step 3:备份关键分区(在 OpenWrt 24.10.5 上执行,强烈建议)
执行位置:电脑通过 SSH 登录路由器。当时运行的是 OpenWrt 24.10.5 环境,地址为 192.168.1.1。
注意 IP 归属:本节备份使用的
192.168.1.1是 OpenWrt 24.10.5 环境的地址;Step 5 上传 U-Boot 使用的192.168.6.1是解锁环境的地址。两个地址对应不同的系统环境,请按自己设备的实际地址替换。
至少备份以下五项:
- BL2(mtd0)
- u-boot-env(mtd1)
- Factory(mtd2)
- bdinfo(mtd3)
- FIP(mtd4)
在路由器上执行(示例以 /tmp 为落盘位置):
cd /tmp
# BL2: 1 MiB
dd if=/dev/mtd0ro of=backup_BL2.bin bs=64k count=16
# u-boot-env: 512 KiB
dd if=/dev/mtd1ro of=backup_uboot_env.bin bs=64k count=8
# Factory: 2 MiB
dd if=/dev/mtd2ro of=backup_Factory.bin bs=64k count=32
# bdinfo: 256 KiB
dd if=/dev/mtd3ro of=backup_bdinfo.bin bs=64k count=4
# FIP: 2 MiB
dd if=/dev/mtd4ro of=backup_FIP.bin bs=64k count=32
sync
ls -lh /tmp/backup_*.bin
备份后的检查点(在路由器上执行)
预期看到类似大小:
- backup_BL2.bin:1.0M
- backup_uboot_env.bin:512K
- backup_Factory.bin:2.0M
- backup_bdinfo.bin:256K
- backup_FIP.bin:2.0M
如任一文件大小不符合预期,不要继续写入操作。
下载备份到电脑(在电脑上执行)
Windows scp 有时会默认走 SFTP,路由器缺少 sftp-server 会失败。解决办法是强制旧 SCP:
scp -O root@192.168.1.1:/tmp/backup_*.bin .
Step 4:OpenWrt 24.10.5 上解锁 FIP 失败,刷入解锁环境
执行位置:电脑通过 SSH 登录路由器(OpenWrt 24.10.5 环境,192.168.1.1)。
在官方 OpenWrt 24.10.5 下尝试:
mtd unlock FIP
出现:
Could not open mtd device: FIP
这说明当前系统环境下 mtd 无法以读写方式打开引导相关分区。此时不要强行写入,应切换到 FIP 可写的解锁环境再操作。这就是本文刷入 ImmortalWrt 解锁环境的原因。
执行位置:电脑浏览器,操作 OpenWrt 24.10.5 的 LuCI 界面。
在“系统 → 备份/升级”里刷入解锁环境,同样不勾选“保留配置”:
immortalwrt-24.10.3-mediatek-filogic-cudy_tr3000-256mb-v1-squashfs-sysupgrade.bin
刷入后的检查点(电脑通过 SSH 登录解锁环境)
解锁环境启动后,本文中它的地址为 192.168.6.1。SSH 登录后确认:
ubus call system board | grep -E 'model|board_name|revision' -n
输出里应出现:
model: Cudy TR3000 256MB v1board_name: cudy,tr3000-256mb-v1
Step 5:上传 U-Boot、校验、写入 FIP、verify(高风险)
5.1 在电脑上先算 SHA256(作为后续一致性标准)
执行位置:电脑(Windows PowerShell)。
(Get-FileHash ".\dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin" -Algorithm SHA256).Hash
本文实测结果:
CC580152DDBEEF14A204DE296D8F58D7A21D787B3DE80573BCE09FEE090DBD4C
说明:这个 SHA256 只适用于本文使用的那一份
dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin文件。你从其他渠道获取的同名文件或不同版本文件,哈希值可能不同,请以你自己算出的值为准。
5.2 上传到解锁环境(在电脑上执行)
scp -O ".\dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin" root@192.168.6.1:/tmp/
这里的 192.168.6.1 是解锁环境的地址,与 Step 3 备份时的 192.168.1.1 属于不同系统环境,不要混用。
5.3 路由器端校验(写入前必须做,SSH 登录解锁环境)
ls -lh /tmp/dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin
sha256sum /tmp/dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin
cat /proc/mtd | grep -w FIP
检查点:
- 文件大小约 733K,且明显小于 FIP 的 2MiB
sha256sum输出与电脑上算出的值一致FIP分区存在,且大小为00200000
任一检查点不满足,停止操作。
5.4 解锁与写入(高风险操作,SSH 登录解锁环境)
⚠️ 警告:确认供电不要中断。下面操作写入引导相关分区,执行前再次确认文件与机型匹配。
mtd unlock FIP
mtd write /tmp/dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin FIP
sync
mtd verify /tmp/dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin FIP
必须看到 mtd verify ... Success 才能继续重启。
如果 verify 失败:停止重启,保持设备当前状态并排查(确认文件是否传错、哈希是否一致、写入目标分区是否正确),排查清楚之前不要重启设备。
Step 6:进入 U-Boot Web,选择 maximum-240m 布局并刷入系统
执行位置:电脑浏览器。
写入成功并重启后,设备正常进入已刷的系统,不会自动进入 U-Boot Web。进入 U-Boot Web 的步骤:断电,电脑用网线连接路由器的 LAN 口,按住 Reset 键不放并上电,等待数秒后松开,浏览器访问 http://192.168.1.1。
选择 mtd 布局
本文最终选择:
maximum-240m
这是本次在 U-Boot Web 中选择的布局标签,对应 256MB 机型。刷入的目标固件必须与所选布局和机型匹配。
刷入目标系统固件
本文刷入的是:
openwrt-24.10.5-mediatek-filogic-cudy_tr3000-256mb-v1-squashfs-sysupgrade.bin
刷完重启后进入 OpenWrt 24.10.5,系统正常运行。
常见错误与排查思路
1) scp 报 sftp-server: not found
原因:Windows scp 默认走 SFTP,路由器不带 sftp-server。
解决:使用 -O 强制旧 SCP:
scp -O <本地文件> root@<IP>:/tmp/
2) mtd unlock FIP 在官方 OpenWrt 下失败
现象:Could not open mtd device: FIP
思路:不要硬写;切换到 FIP 可写的解锁环境后再操作。
3) mtd verify 写入后失败
写入后 verify 失败,说明写入未生效或文件与分区不匹配。停止重启,保持设备当前状态并排查,确认问题之前不要重启设备。