Cudy TR3000 256MB:过渡包→解锁 FIP→写入 U-Boot→maximum-240m 布局的刷机与校验流程
Cudy TR3000 256MB:过渡包→解锁 FIP→写入 U-Boot→maximum-240m 布局的刷机与校验流程
本文记录一次在 Cudy TR3000 256MB v1(MT7981) 上的刷机实践:按教程从原厂固件刷入“过渡包”,再刷入 可写 FIP 的解锁环境,随后把第三方 U-Boot 写入 FIP 分区,最后在 U-Boot Web 中选择 maximum-240m 布局并刷回稳定可用的系统固件。
这篇文章面向以下场景:
- 你有一台 TR3000 256MB,希望获得一个可用的 U-Boot Web 恢复入口(便于后续刷机、切换布局、救砖)。
- 你希望把闪存布局切到 maximum-240m 以充分利用 256MB NAND。
- 你希望执行过程尽量可控:每一步都有校验点、能停下来确认,而不是“一把梭”。
⚠️ 警告:本文涉及对 FIP 分区写入 U-Boot。写错文件或中途断电可能导致无法启动,需要串口或更底层手段恢复。请在执行前确保已经备份关键分区,并保证供电稳定。
本文的特点:完整备份和检查
常见教程的“最短路径”一般是:
- 原厂固件 → 刷 过渡包
- 过渡包 → 直接刷 FIP 分区只读破解包/解锁环境
- 解锁环境 → 写入 U-Boot(FIP)
- 进入 U-Boot Web → 选布局 → 刷入想用的固件
本文确实走了这条主线,但中间多了一步:刷完过渡包后,我又刷了一次官方 OpenWrt 24.10.5,后来想补齐 U-Boot 才回到解锁环境写入 FIP,因此比“最短路径”多了一个步骤。
为了避免读者误解,本文会在流程中明确哪些步骤是必要步骤,哪些是本文因为“中途先上系统再回头补 bootloader”而产生的可省略步骤。
环境与前提
机型与分区识别(必须确认)
设备信息应明确是 256MB v1(而不是 128MB 或特殊批次):
ubus call system board
cat /proc/mtd
关键分区示例(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
这两项会直接决定后续备份与写入命令里的
count/文件大小预期。机型不匹配、分区大小不一致时不要继续。
文件准备(强制按机型匹配)
本文涉及三类文件(示例文件名):
-
过渡包(256MB 版本)
cudy_tr3000-256mb-v1-sysupgrade.bin -
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 设备。
总体流程概览(标注可省略项)
标准最短路径(多数教程推荐)
- 原厂固件 → 刷入 过渡包
- 过渡包 → 直接刷入 解锁环境(FIP 只读破解包)
- 解锁环境 → 备份关键分区 → 写入 U-Boot(FIP) → verify
- 进入 U-Boot Web → 选布局(例如 maximum-240m)→ 刷入目标固件
本文实际路径(多了一步“先上官方系统”)
- 原厂固件 → 过渡包(与最短路径一致)
- 过渡包 → 官方 OpenWrt 24.10.5(可省略)
- 官方 OpenWrt → 发现 FIP 不可写 → 再刷解锁环境(回到主线)
- 解锁环境 → 写入 U-Boot(FIP)→ verify
- U-Boot Web → maximum-240m → 刷回官方 OpenWrt 24.10.5
结论:过渡包后不一定要刷官方固件。 过渡包的核心作用是“为后续刷解锁环境创造条件”。若你的目标是补齐 U-Boot,一般从过渡包直接进入解锁环境更省事。
Step 0:参考资料与原始教程
本文的过渡包刷机步骤参考了这篇文章(后续也有多处流程一致):
Step 1:原厂固件 → 刷入过渡包(必要步骤)
操作入口
进入原厂管理后台(一般在“高级设置/固件升级”等位置),上传并刷入过渡包:
cudy_tr3000-256mb-v1-sysupgrade.bin
刷入后的检查点
- 重启后能进入过渡包页面(常见为 OpenWrt/类 OpenWrt 界面)
- 能 SSH 登录并查看基础信息:
cat /etc/openwrt_release
ubus call system board
为什么需要过渡包
过渡包的价值通常在于:
- 让设备进入一个“可继续 sysupgrade”的环境;
- 为下一步刷入 FIP 分区只读破解包/解锁环境(从而写入 U-Boot)打通路径。
Step 2:过渡包 → 解锁环境(多数情况下可直接做)
这一步可以省略官方固件
很多教程在过渡包之后,直接在 LuCI 的“备份/升级”里刷入解锁环境:
immortalwrt-24.10.3-...-cudy_tr3000-256mb-v1-...-sysupgrade.bin
并且强调:
- 不要勾选“保留配置”(跨环境升级最容易引发配置兼容问题)
刷入后的检查点
解锁环境启动后(本文示例 IP 为 192.168.6.1),确认:
ubus call system board | grep -E 'model|board_name|revision' -n
输出里应出现:
model: Cudy TR3000 256MB v1board_name: cudy,tr3000-256mb-v1
Step 2.1:本文多做了一步:过渡包 → 官方 OpenWrt 24.10.5(可省略)
本文当时的选择是:刷完过渡包后,先把系统升级到官方稳定版 OpenWrt 24.10.5 并开始使用。后来决定补齐 U-Boot,才又回头刷解锁环境写入 FIP。
这一步的意义仅在于:
- 提前得到一个可用、稳定的 OpenWrt 系统;
- 但对“补齐 U-Boot”来说并不是必要步骤。
Step 3:关键分区备份(强烈建议,属于“安全流程”的核心)
这一步的目的:为写入引导相关分区提供回退条件。至少建议备份:
- 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
如任一文件大小不符合预期,不要继续写入。
下载到本机(避免 sftp-server 坑)
Windows scp 有时会默认走 SFTP,路由器缺少 sftp-server 会失败。解决是强制旧 SCP:
scp -O root@192.168.1.1:/tmp/backup_*.bin .
Step 4:在官方 OpenWrt 环境里尝试写 FIP 失败(解释“为什么要刷解锁环境”)
在官方 OpenWrt 24.10.5 下尝试:
mtd unlock FIP
可能出现:
Could not open mtd device: FIP
这说明:当前系统环境下 mtd 无法以读写方式打开引导相关分区。此时不应强行写入(避免误判),而应该切换到“可写 FIP 的解锁环境”。
这也是本文最终刷入 ImmortalWrt 解锁环境的原因。
Step 5:上传 U-Boot bin、校验、写入 FIP、verify(核心步骤)
5.1 本机先算 SHA256(作为后续一致性标准)
(Get-FileHash ".\dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin" -Algorithm SHA256).Hash
示例:
CC580152DDBEEF14A204DE296D8F58D7A21D787B3DE80573BCE09FEE090DBD4C
5.2 上传到解锁环境(示例 IP 192.168.6.1)
scp -O ".\dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout-256M.bin" root@192.168.6.1:/tmp/
5.3 路由器端校验文件存在与 SHA256(写入前必须做)
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
- sha256 与本机一致
FIP分区存在且大小为00200000
5.4 解锁与写入(高风险操作)
⚠️ 警告:确认供电稳定、不要断电。 下面操作写入引导相关分区,执行前再次确认文件与机型匹配。
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 才能继续重启。
Step 6:进入 U-Boot Web,选择布局 maximum-240m,并刷入目标系统
写入成功后重启,设备进入 U-Boot Web(也可通过按住 Reset 上电进入),浏览器访问 http://192.168.1.1。
选择 mtd 布局
本文最终选择:
maximum-240m
这是 256MB NAND 更符合预期的空间利用方式。
刷入目标系统固件
本文刷入的是:
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 写入前 Failed 是正常的,写入后 Failed 才需要停
- 写入前 verify:失败说明“还没写进去”,属预期
- 写入后 verify:失败说明写入未生效/文件不匹配,应立即停下排查
总结
这次操作的“特色”不在于刷了多少次固件,而在于把高风险过程拆成了一组可复核的检查点:
-
机型与分区信息先确认
ubus call system board+cat /proc/mtd,确保是 256MB v1,确认 BL2/FIP 分区大小。 -
写入引导分区前先备份 BL2/FIP/Factory/bdinfo/u-boot-env 至少五项备份并落到本机,避免“写坏后无回退”。
-
文件一致性三段校验
- 本机计算 SHA256
- 上传后路由器
sha256sum对照 - 写入后
mtd verify确认 Success 每一步都能停下来判断是否继续,而不是依赖“看起来没报错”。
-
不追求最短路径,但明确哪些步骤可省略 过渡包之后可以直接刷解锁环境完成 U-Boot;本文因为先上了官方系统又回头补 bootloader,导致步骤更多,但检查点更完整。
若以后再次操作类似设备,我会更倾向于:
- 先按最短路径补齐 U-Boot 与布局;
- 再刷入长期使用的系统固件;
- 但无论路径如何,检查点(机型/分区/备份/校验/verify)必须保留。