天猫魔盒2(TMB300A)固件提取与备份

2026-10-18
18分钟阅读时长
8659字
阅读
Featured Image

设备型号:MagicBox2
系统版本:YunOS 3.0.6
固件版本:3.0.6-RS-20160831.0951
内部存储:8G
内存:1 GiB DDR3(串口启动日志 DRAM: 1 GiB 可见)
芯片平台:晶晨 S802-H
内核版本:Linux 3.10.33(待填,见 5.3 节确认方法)


写在前面:为什么又折腾这台老盒子

前阵子收拾屋子,翻出来一台天猫魔盒2,型号 TMB300A。掐指一算,这玩意儿在家吃灰得有十来年了。

当年智能电视盒子刚兴起时它还算个新鲜物件,后来电视自带系统越来越全,手机投屏也越来越方便,它就被塞进抽屉,慢慢成了电子古董。

本来想顺手处理掉,但拿在手里又觉得可惜:硬件还在,晶晨 S802-H 的芯片,8G 存储,YunOS 3.0.6,扔了怪浪费。

正好前阵子刚对中兴小兴看看 mini C320 摄像头做过一轮逆向固件提取,魔改还在规划中,手上那股“拆点啥、备份点啥、再刷点啥”的劲还没过去。那台摄像头的折腾记录还在整理,等落地后会单独成文,这里先留个位置:《中兴小兴看看 mini C320 逆向固件提取与魔改实录(待发布)》。

于是决定废物利用一下,看看这台老盒子还能不能再发点光热。

目标也不复杂:

  • 先让它在一个不连外网的小局域网里被 ADB 摸到,方便调试;
  • 再想办法把原厂固件完整备份出来,万一后面手痒刷机刷坏了,还能有个后悔药;
  • 至于更远的魔改,等备份做完再说。

这篇记录就是整个折腾过程的流水账,包含踩过的坑、验证过的死路,以及最后跑通的串口备份方案。希望能给同样翻出老盒子的朋友省点时间。


更新日志

  • 2026-10-18 开放原始固件, 详见 夸克网盘 (整理中)

一、目标与约束

缘起唠完,落到具体目标上,这次折腾主要想干三件事:

  1. 让魔盒在一个不连外网的小局域网里被电脑 ADB 摸到,方便调试;
  2. 拿到 root 权限,把原厂固件按分区完整备份出来;
  3. 为后续可能的魔改/刷机留一条“刷坏了还能还原”的退路。

约束也很现实:

  • ⚠️ ADB 只有普通用户权限,无法直接读取块设备;
  • ⚠️ 设备固件资料稀少,刷错难救;
  • ✅ 需要一套可复现的备份流程,并留下完整记录。

实际路线分两个阶段:

第一阶段(固件备份):TTL 串口取得 root → 分区级 dd 备份。
这一阶段不需要网络,也不需要 ADB,串口拿到 root 后即可直接操作。

第二阶段(魔改与测试):手机关数据开热点组建无外网局域网 → ADB 无线调试 → 安装、调试、管理测试应用。
这一阶段才需要网络和 ADB,用于后续魔改、测试 APK 等操作。

其中 ADB 无线调试经实测仅能用于常规调试,无法完成固件提取;固件提取只能依赖 TTL 串口方案。


二、需求拆解与技术路线

目标拆成三层:

  1. 调试通道:让魔盒与电脑处于同一局域网,ADB 可连,但不通外网。
  2. 权限获取:ADB 权限不足时,通过 TTL 串口登录系统控制台,取得 root shell。
  3. 固件备份:在 root 下用 dd 按分区导出镜像,存到外挂 U 盘。

路线对比:

路线 优点 局限
ADB 无线调试 方便、无需拆机 ❌ 普通权限,无法 dd 块设备;首次连接需盒子端手工确认
TTL 串口 ✅ 可拿 root,能读底层分区,稳定高效 需拆机焊接排针
PC 虚拟 WiFi 不依赖手机 配置稍多,需确保不共享外网
手机热点(关数据) ✅ 最简单,天然无外网 依赖手机

三、ADB 无线调试:首选手机热点

💡 本章定位:ADB 无线调试主要用于后续魔改与测试阶段(安装、调试、管理 APK 等)。如果只是做首次固件备份,TTL 串口拿到 root 后即可直接 dd,本章内容可以先跳过。

3.1 首选方案:手机关闭数据网络,开热点

这是本次实际采用的方式,原因很简单:

手机热点在关闭移动数据后,天然就是一个没有外网出口的局域网,魔盒连上后只能与手机/电脑互通,不会误连外网,配置成本最低。

操作步骤:

  1. 手机设置中关闭移动数据(或开启飞行模式后再手动开热点,视机型而定)。

  2. 打开“个人热点”,设置热点名称和密码。

  3. 魔盒连接该热点。

  4. 电脑也连接同一热点,确保与魔盒同网段。

  5. 在魔盒上开启开发者模式与 ADB 调试。

  6. 电脑执行:

    adb tcpip 5555
    adb connect 魔盒IP:5555
    

    首次 tcpip 可能需要 USB 线连接一次,之后可无线连接。

⚠️ 注意:部分手机在关闭数据后热点会自动关闭,需在热点设置中允许“无互联网时保持热点”。若手机不支持,可改用备选方案。

⚠️ 另一个繁琐点:首次 adb connect 时,盒子端通常会弹出“是否允许 USB 调试”的确认框,需要人工在电视上点“允许”。如果盒子端未及时确认,连接会失败。这一步无法完全自动化,对反复调试来说比较麻烦。

3.2 备选方案:PC 虚拟 WiFi(不共享外网)

如果不想依赖手机,可在 PC 上创建“可连接但不通外网”的热点。

核心原则:只建局域网,不做 Internet 共享。

  • Windows 自带移动热点:图形化开启,但默认可能共享外网,需在“网络连接”中确认热点虚拟适配器未被勾选“允许其他网络用户通过此计算机的 Internet 连接来连接”。

  • netsh 承载网络:命令行创建,天然不共享外网,适合纯局域网调试:

    netsh wlan set hostednetwork mode=allow ssid=热点名 key=至少8位密码
    netsh wlan start hostednetwork
    
  • 第三方软件:如 Connectify,可在 “Internet to Share” 中选择 “No Internet sharing”。

  • Python 方案:WiFiDirectLegacyAP 可建不共享外网的热点,但依赖 Python 2.7;也可用脚本封装 netsh,本质不变。

取舍:手机热点最简;PC 方案适合没有备用手机或需要长期固定调试环境的场景。


四、ADB 权限边界与实测结论

ADB 连接成功后,在 adb shell 中执行 id,返回的是普通用户(如 uid=2000(shell))。尝试 dd 读取 /dev/block/boot 等块设备会被拒绝。

❌ 实测验证结论

对于天猫魔盒2(TMB300A),ADB 路线只能用于常规调试、安装应用、查看日志,无法完成完整固件提取。

这不是“可能不行”,而是本机已经验证走不通。原因有两层:

  1. 权限不足:ADB shell 为普通用户,无 root,无法读取块设备;
  2. 首次连接繁琐:首次 adb connect 需要盒子端手工确认接受连接,无法完全自动化。

✅ 结论

对于这台盒子,提取完整固件目前只能走 TTL 串口方案。

串口方案虽然需要拆机焊接排针,但拿到的是 root shell,能直接读底层分区,简单、稳定、高效,是这台设备上唯一可靠的固件提取路径。


五、硬件排查与 TTL 接入

5.1 拆机与串口点位

拆开魔盒,在主板上定位 TTL 焊点。本次使用的引脚对应关系:

引脚 定义 说明
1 VCC ⚠️ 用不到,安全第一,不接
2 TX 接 USB 转 TTL 的 RX
3 RX 接 USB 转 TTL 的 TX
4 GND 接 GND

USB 转 TTL 与魔盒接线示意图

接线注意:

  • TX/RX 交叉连接;
  • VCC 不接;
  • GND 必须共地。

5.2 串口登录与 root

使用 USB 转 TTL 模块连接电脑,串口终端工具使用 MobaXterm(也可用 PuTTY / minicom 等等价工具),打开对应 COM 口,上电后即可看到启动日志并登录控制台。

⚠️ MobaXterm 务必关闭流控:串口会话默认可能开启 RTS/CTS 硬件流控,而魔盒的 TTL 不响应握手信号,会出现“能收不能发”或命令敲下去没反应的情况。设置路径:Session → Serial → Advanced Serial settings → Flow control 选 None,并确认 RTS/CTS 不要勾选。

登录后执行:

id

✅ 确认返回 uid=0(root),具备块设备读取权限。


5.3 串口启动日志里能读到什么

TTL 串口不只是登录 shell 的通道,上电瞬间的启动日志本身就包含不少硬件与固件信息。典型的启动早期输出大致如下(节选,具体地址和版本以你的设备为准):

DRAM:  1 GiB
...
## ANDROID Format IMAGE
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.33
   Image Type:   ARM Linux Kernel Image (lzo compressed)
   Data Size:    7813246 Bytes = 7.5 MiB
   Load Address: 00208000
   Entry Point:  00208000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

从这段日志可以直接读出几项信息:

  • DRAM 容量:DRAM: 1 GiB,与设备标称的 1G 内存一致;
  • 引导方式:Booting kernel from Legacy Image 说明 U-Boot 使用传统 uImage 格式引导内核,而不是 FIT/Android Boot Image;
  • 内核加载地址与入口地址:Load Address / Entry Point,对后续分析 boot 分区、手工引导有参考价值;
  • 内核版本:Image Name: Linux-3.10.xx 这一行会直接给出内核版本号。

如果启动日志已经滚过去了,也可以在 root shell 里直接确认内核版本:

cat /proc/version
uname -a

这两条命令的输出与启动日志里的 Image Name 应当一致。

六、存储与分区探测

6.1 查看块设备

ls -al /dev/block/

输出中可见 boot、bootloader、cache、data、env、logo、logo1、mmcblk0、mmcblk0boot0、mmcblk0boot1、recovery、reserved、system 等具名块设备,以及 loop0~7、sda、sda1、zram0 等。

6.2 查看分区表

cat /proc/partitions

结果如下(节选):

major minor  #blocks  name
179        0    7634944 mmcblk0
179        1       4096 mmcblk0p1
179        2      65536 mmcblk0p2
179        3     655360 mmcblk0p3
179        4       8192 mmcblk0p4
179        5      16384 mmcblk0p5
179        6      16384 mmcblk0p6
179        7      32768 mmcblk0p7
179        8      32768 mmcblk0p8
179        9     819200 mmcblk0p9
179       10    5951488 mmcblk0p10
179       32       4096 mmcblk0boot1
179       16       4096 mmcblk0boot0
  8        0   15138816 sda
  8        1   15134784 sda1

sda 是我外部插入的U盘

6.3 分区表与精确大小

/proc/partitions 中的 #blocks 单位是 1 KiB。结合 blockdev --getsize64 的结果,整理如下。

用户数据区(mmcblk0)内的分区

/dev/block/ 具名 底层设备 major:minor #blocks 字节数 约合 说明
bootloader mmcblk0p1 179:1 4,096 4,194,304 4 MB 引导程序分区
reserved mmcblk0p2 179:2 65,536 67,108,864 64 MB 厂商保留分区
cache mmcblk0p3 179:3 655,360 671,088,640 640 MB 缓存分区
env mmcblk0p4 179:4 8,192 8,388,608 8 MB U-Boot 环境变量
logo mmcblk0p5 179:5 16,384 16,777,216 16 MB 开机画面
logo1 mmcblk0p6 179:6 16,384 16,777,216 16 MB 备用开机画面
recovery mmcblk0p7 179:7 32,768 33,554,432 32 MB Recovery 分区
boot mmcblk0p8 179:8 32,768 33,554,432 32 MB 内核/ramdisk
system mmcblk0p9 179:9 819,200 838,860,800 800 MB 系统主体
data mmcblk0p10 179:10 5,951,488 6,094,323,712 约 5.67 GB 用户数据

mmcblk0 总块数为 7,634,944(约 7.28 GB)。p1~p10 块数合计 7,602,176,与总块数相差 32,768 块(32 MB),通常是分区表、对齐空隙或保留区域,不影响按分区备份。

eMMC 硬件 Boot 分区(不属于 mmcblk0 分区表)

/dev/block/ 具名 major:minor #blocks 字节数 约合 说明
mmcblk0boot0 179:16 4,096 4,194,304 4 MB eMMC Boot Area Partition 1,独立硬件分区
mmcblk0boot1 179:32 4,096 4,194,304 4 MB eMMC Boot Area Partition 2,独立硬件分区

这两个设备不是 mmcblk0p11 / p12,它们不在用户区分区表内,通常用于存放引导程序副本,默认多为只读。备份它们属于“底层保险”,但还原时不建议随意回写。

6.4 关于 mmcblk0boot0 / mmcblk0boot1

/proc/partitions 里同时出现 mmcblk0p1~p10 和 mmcblk0boot0/1,容易让人误以为后者是用户区里的第 11、12 个分区。实际上:

  • mmcblk0 是 eMMC 的用户数据区,p1~p10 是它内部由分区表管理的分区;
  • mmcblk0boot0 / mmcblk0boot1 是 eMMC 芯片自带的两个 Boot Area Partition,属于硬件层面的独立区域,各 4 MB。其定义来自 JEDEC e•MMC 标准;
  • 它们不受 mmcblk0 分区表管理,minor 编号也跳到 16、32,因此不会以 mmcblk0p11、p12 的形式出现。

从命名和平台习惯推测,这两个区域可能存放引导程序的副本或备份,但具体内容需要分析镜像才能确认。本文对它们做了 dd 备份,作为底层保险;但还原时风险较高,不建议在系统内直接回写。

💡 关键结论

/dev/block/ 下的具名设备是 mmcblk0pX 的软链接/别名。按具名备份等同于按编号备份,无需再单独备份 mmcblk0p1~p10。


七、固件提取实操

7.0 备份前的准备

在开始 dd 备份之前,有几件事建议提前处理。尤其是备份 data 这类大分区时,dd 运行时间很长,中途盒子如果进入休眠或自动更新,都可能干扰备份:

  • 关闭自动休眠:在盒子“设置”里找到休眠/屏保相关选项,设为“永不”或关闭自动休眠。dd 写入 data 分区可能需要十几分钟到半小时,中途休眠可能导致 I/O 中断或写入异常。
  • 关闭应用自动更新:同样在设置里关闭应用商店的自动更新,避免备份期间后台下载、安装应用,占用 I/O 和存储空间。
  • 考虑先恢复出厂设置再备份:如果盒子里还登录着你的账号、装了不少个人应用,建议先恢复出厂设置,清理掉账号信息和用户数据,再重新备份。这样得到的 data.img 更干净,作为“纯净底包”更合适。恢复出厂后 data 分区会被重新初始化,你的账号凭据、Wi-Fi 密码、应用数据都会被清除。

💡 再次提醒:首次备份阶段用不到 ADB 和网络,TTL 串口拿到 root 后就可以直接 dd,不需要联网。ADB 无线调试是后续魔改、测试 APK 时才需要的管理手段,第三章的内容是为那个阶段准备的,首次备份可以先跳过。

7.1 外挂 U 盘

使用大于 8G 的 U 盘,插入魔盒后自动识别挂载为 sda1,路径:

/storage/external_storage/sda1/

无需手动 mount。先确认空间:

df -h /storage/external_storage/sda1/

7.2 文件系统选择:exFAT 优先,FAT32 分卷备选

data 分区约 5.67 GB,超过 FAT32 单文件 4 GB - 1 字节 的硬上限。

  • 如果 U 盘是 FAT32:直接 dd 得到的 data.img 会被截断;
  • 如果 U 盘是 exFAT:没有这个限制,可以直接完整备份。

策略一:将 U 盘格式化为 exFAT(推荐,一劳永逸)

exFAT 专为闪存设备设计,没有 4GB 单文件限制,同时兼容 Windows 和 macOS,适合存放镜像类大文件。

格式化工具:最方便的是 Windows 自带的“右键格式化”。

右键 U 盘 → 格式化 → 文件系统选 exFAT → 勾选“快速格式化” → 开始。

无需安装第三方软件。

分配单元大小:保持默认即可。Windows 对 32 GB 以上的 exFAT U 盘默认通常为 128 KB,已经适合大文件连续写入,不必手动调整。

若确需手动指定,可在管理员 CMD 中执行:

format E: /FS:exFAT /A:131072 /Q

其中 E: 换成 U 盘盘符,/A:131072 表示 128 KB 分配单元,/Q 为快速格式化。

备份命令:格式化后直接执行标准 dd:

dd if=/dev/block/data of=/storage/external_storage/sda1/data.img

✅ 完成后 ls -lh 应看到约 5.67 GB 的文件,说明完整。本次实测得到 6,094,323,712 字节,与 blockdev --getsize64 /dev/block/data 完全一致。

策略二:FAT32 U 盘分卷备份(不想格式化时的变通方案)

如果暂时不想格式化 U 盘,可以在备份时把 data 分区切成若干个小于 4GB 的文件,绕开单文件上限。

魔盒的 TTL 环境是 BusyBox,实测其中包含 split 命令,因此可直接用管道分卷,无需手算 dd 的 skip/count。

每卷 1GB:

dd if=/dev/block/data bs=1M | split -b 1G - /storage/external_storage/sda1/data.img.part_

生成 data.img.part_aa、data.img.part_ab…… 按字母顺序排列。

恢复时,按顺序合并并写回:

cat data.img.part_* | dd of=/dev/block/data bs=1M

完整性校验:备份前后可在魔盒上执行 md5sum /dev/block/data,在电脑上对合并后的完整镜像执行 md5sum,两边一致说明分卷顺序和内容正确。

💡 取舍

  • exFAT 方案:更简单,后续校验、存储、恢复都是单个文件;
  • FAT32 分卷方案:适合“暂时不想格式化 U 盘”的场景,但恢复流程更繁琐。

条件允许时,优先 exFAT。

7.3 按分区 dd 备份

dd 是 Linux 下常用的块设备复制工具。统一格式:

dd if=/dev/block/<分区名> of=/storage/external_storage/sda1/<分区名>.img

实际执行的分区:

dd if=/dev/block/boot       of=/storage/external_storage/sda1/boot.img
dd if=/dev/block/bootloader of=/storage/external_storage/sda1/bootloader.img
dd if=/dev/block/env        of=/storage/external_storage/sda1/env.img
dd if=/dev/block/logo       of=/storage/external_storage/sda1/logo.img
dd if=/dev/block/logo1      of=/storage/external_storage/sda1/logo1.img
dd if=/dev/block/recovery   of=/storage/external_storage/sda1/recovery.img
dd if=/dev/block/reserved   of=/storage/external_storage/sda1/reserved.img
dd if=/dev/block/mmcblk0boot0 of=/storage/external_storage/sda1/mmcblk0boot0.img
dd if=/dev/block/mmcblk0boot1 of=/storage/external_storage/sda1/mmcblk0boot1.img

# 体积稍微大点, 需要多等一会
dd if=/dev/block/system     of=/storage/external_storage/sda1/system.img

# 体积很大, 需要等很久 (记得关闭 自动休眠), 首次备份建议做,非首次没太大必要
dd if=/dev/block/data       of=/storage/external_storage/sda1/data.img

# 体积也不小, 需要多等一会, 首次备份可以做,非首次没啥必要
dd if=/dev/block/cache      of=/storage/external_storage/sda1/cache.img

⚠️ 如果 U 盘为 FAT32,data 分区按 7.2 的策略二分卷,不要直接执行上面的 data.img 单文件备份。

💡 mmcblk0boot0/1 是 eMMC 硬件 Boot 分区,默认可能只读。能读则备份,报错记录即可;不建议随意回写。

💡 想查看 dd 进度? 再开一个串口会话(或另开终端),执行:

kill -USR1 $(pidof dd)

正在运行的 dd 会立刻打印当前已复制的字节数,然后继续工作,不会中断备份。也可以每 10 秒自动触发:

watch -n 10 "kill -USR1 $(pidof dd)"

如果不想开新会话,也可反复 ls -lh /storage/external_storage/sda1/data.img,看文件大小是否在增长。

7.4 备份结果对比

U 盘中的文件与 blockdev 查询大小对比。除 data.img 外,其余镜像在 FAT32 和 exFAT 下均应一致:

镜像文件 实际大小(字节) 与分区大小一致
boot.img 33,554,432 ✅ 是
bootloader.img 4,194,304 ✅ 是
cache.img 671,088,640 ✅ 是
data.img(FAT32 直接备份) 4,294,967,295 ❌ 受 FAT32 单文件 4GB 上限截断
data.img(exFAT 直接备份) 6,094,323,712 ✅ 是
env.img 8,388,608 ✅ 是
logo.img 16,777,216 ✅ 是
logo1.img 16,777,216 ✅ 是
mmcblk0boot0.img 4,194,304 ✅ 是
mmcblk0boot1.img 4,194,304 ✅ 是
recovery.img 33,554,432 ✅ 是
reserved.img 67,108,864 ✅ 是
system.img 838,860,800 ✅ 是

执行 ls -lh /storage/external_storage/sda1/ 查看确认

⚠️ 提醒:若 data.img 显示为 4,294,967,295 字节,说明 U 盘是 FAT32 且发生了截断。此时应改用 exFAT 重新备份 data,或按 7.2 的策略二分卷备份。

系统类分区镜像不受影响,还原系统所需的 boot、system、recovery 等镜像仍然完整。

7.5 未备份 mmcblk0 的取舍

mmcblk0 是整盘裸设备(约 7.28 GB),包含 GPT 分区表和各分区间的空隙。

未备份的原因:

  • U 盘剩余空间可能不足;
  • 分区级镜像已覆盖 bootloader 到 data 的全部内容,满足“刷机失败后按分区还原”的需求;
  • 整盘镜像主要用于编程器级救砖(分区表被破坏时),普通还原不需要。

若追求终极保险,可在确认 U 盘空间充足(建议 exFAT)后补做:

dd if=/dev/block/mmcblk0 of=/storage/external_storage/sda1/mmcblk0_full.img

❌ 切勿在系统内直接 dd 回写整盘,风险极高。

7.6 收尾

sync

确保数据落盘后再拔出 U 盘,并在电脑上多处留存备份。


八、后续魔改与还原思路

  • ⚠️ 刷机风险:TMB300A 固件资料稀少,刷错难救;TTL 与 U-Boot 是最后逃生通道。
  • ✅ 还原优先级:优先 recovery 卡刷或 U-Boot 的 mmc write;系统内 dd 写回底层分区风险最高,尤其是 bootloader 和 mmcblk0boot0/1。
  • 💡 数据分区:若 data.img 被截断,还原前需评估是否必须保留用户数据;系统还原通常不依赖 data。exFAT 下完整备份的 data.img 可用于需要保留用户数据的场景。
  • 🚀 可探索方向:第三方固件适配(注意 WiFi 等驱动差异)、系统精简、固化无外网调试环境。进入魔改和测试阶段后,ADB 无线调试就会派上用场,用于安装、调试和管理测试 APK。
  • 💡 内核版本是魔改的重要前提:从串口日志和 cat /proc/version 可以确认内核版本(本次为 Linux 3.10.xx,待填)。后续如果要移植第三方固件、替换内核模块或调整启动参数,内核版本决定了驱动兼容性和可用的调试手段,建议在动手前先记录清楚。

九、固件分享与隐私安全

如果你打算把备份的固件放到 GitHub 或网盘上分享,有一件事必须提前想清楚:不是所有分区镜像都适合公开。 有些文件包含你的个人数据,有些包含设备唯一标识,放出去就是隐患。

❌ 绝对不要公开的分区

data.img

这是隐私风险最集中的地方。data 分区包含登录凭据、应用数据、Wi-Fi 密码、浏览记录,以及 YunOS/淘宝账号的登录态。即使恢复了出厂设置,旧数据的残片在闪存磨损均衡机制下也不一定被物理覆盖。分享 data.img 等于把你的个人数字生活打包送人。

bootloader.img、mmcblk0boot0.img、mmcblk0boot1.img

这些底层引导分区通常包含设备唯一的标识或校准数据。电视盒子虽然没有蜂窝 IMEI,但 Wi-Fi MAC 地址、设备序列号很可能就藏在这些分区里。公开它们,等于公开了这台设备的硬件“身份证”。

reserved.img

厂商保留分区。具体内容不分析镜像无法确定,但“保留”二字往往意味着可能存放校准数据、设备信息或厂商密钥。在确认内容之前,不建议公开。

mmcblk0_full.img(整盘镜像)

整盘镜像必然包含上述所有敏感分区,同样不适合公开。

✅ 相对可以公开的分区

system.img、boot.img、recovery.img、cache.img、logo.img / logo1.img、env.img 属于“公共平台”层面的内容,通常不包含个人账号或设备唯一密钥。其中 system.img 是固件的核心,也是别人最需要的。

⚠️ 例外:如果你曾经在 system 里手动写入过账号密码或密钥,分享前需要先检查并清除。

🧹 分享前的快速自检

用 strings 或十六进制工具扫一下打算公开的镜像,搜一搜设备唯一标识和个人信息的关键词:

strings system.img | grep -i -E "mac|serial|password|账号|wifi"

如果出现设备唯一标识或个人信息,就把它剔除或做匿名化处理。

📦 发布清单速查

分区 是否公开 原因
system.img ✅ 可以 固件核心,公共平台内容
boot.img ✅ 可以 内核,不含个人数据
recovery.img ✅ 可以 恢复模式,公共内容
cache.img ✅ 可以(可选) 通常不含敏感信息
logo.img / logo1.img ✅ 可以 开机画面
env.img ✅ 可以 U-Boot 环境变量
data.img ❌ 不要 个人账号、应用数据、Wi-Fi 密码
bootloader.img ❌ 不要 可能含设备唯一标识
mmcblk0boot0/1.img ❌ 不要 可能含设备唯一标识
reserved.img ⚠️ 谨慎 内容不明,确认前不公开
mmcblk0_full.img ❌ 不要 整盘镜像,必然包含敏感分区

💡 自己留作“后悔药”的 data.img、bootloader.img 等,放在本地或私有网盘没问题;公开分享时只放 system、boot、recovery 这类公共层面的镜像即可。


十、经验总结与避坑清单

  1. ❌ ADB 路线对本机不可行:实测 adb shell 为普通用户权限,无 root,无法 dd 块设备;且首次 adb connect 需盒子端手工确认,繁琐。提取完整固件只能走 TTL 串口方案,简单、稳定、高效。
  2. 💡 首次备份不需要 ADB 和网络:TTL 串口拿到 root 即可直接 dd;ADB 无线调试留给后续魔改和测试阶段。
  3. ✅ 手机“关数据开热点”是最简单的无外网局域网方案;PC 虚拟 WiFi 需明确不共享外网。
  4. ⚠️ MobaXterm 串口务必关闭流控(Flow control 选 None,RTS/CTS 不勾),否则可能出现能收不能发。
  5. ⚠️ 备份大分区前关闭自动休眠和应用自动更新:dd 运行时间长,中途休眠或后台更新可能干扰备份。
  6. 💡 先恢复出厂设置再备份:清理账号和用户数据,得到的 data.img 更干净,适合作为纯净底包。
  7. ⚠️ 备份前先查分区大小,FAT32 U 盘单文件上限 4GB,data 分区会截断;优先 exFAT,或按分卷方案处理。
  8. ✅ 魔盒 TTL 环境包含 split,FAT32 分卷可直接用 dd | split,无需手算 skip/count。
  9. 💡 /dev/block/ 具名设备即 mmcblk0pX 别名,按具名备份即可,无需重复备份编号分区。
  10. 💡 mmcblk0boot0/1 是 eMMC 硬件 Boot 分区,不属于 mmcblk0p1~p10;可备份作底层保险,但不建议随意回写。
  11. ⚠️ bootloader、mmcblk0boot0/1 备份可能受保护,能读则备份,报错记录即可。
  12. 🔒 分享固件时,data、bootloader、mmcblk0boot0/1、reserved、整盘镜像不要公开;只分享 system、boot、recovery 等公共层面镜像。
  13. ⚠️ 还原比备份风险高,备份文件务必多处留存。

相关文章


十一、附录

11.1 关键命令速查

# 查看内核版本
cat /proc/version
uname -a

# 查看块设备
ls -al /dev/block/

# 查看分区表
cat /proc/partitions

# 查看分区字节数
blockdev --getsize64 /dev/block/<分区名>

# 备份分区
dd if=/dev/block/<分区名> of=/storage/external_storage/sda1/<分区名>.img

# 查看 dd 进度(另开串口会话)
kill -USR1 $(pidof dd)

# 确认 U 盘空间
df -h /storage/external_storage/sda1/

# 落盘
sync

# 分享前检查镜像中是否含敏感信息
strings system.img | grep -i -E "mac|serial|password|账号|wifi"

11.2 分区对照表

见 6.3 节表格。

11.3 工具清单

  • USB 转 TTL 模块 (CH340 等等)
  • 串口终端:MobaXterm(也可用 PuTTY / minicom)
  • 大于 8G U盘(建议 exFAT,避免 4GB 截断)
  • ADB 工具:Android SDK Platform-Tools
  • 电烙铁、排针(焊接 TTL)
  • Windows 自带格式化工具(exFAT 快速格式化)
Avatar
zfkun 喜欢游戏、热爱技术、追求艺术、崇尚自由、渴望精彩、最爱唠叨