Skip to content

对 U-Boot 启动分区直接 dd 写入是极度危险的操作

🕒 Published at:

对 U-Boot 启动分区直接 dd 写入是极度危险的操作 ​

事发经过 ​

远程操作一台海思 HI3798MV100 电视盒子(Ubuntu 20.04 / ARM / 6.4G 存储):

  1. 修改 /dev/mmcblk0p2(bootargs 分区,即 U-Boot 环境变量存储区)
  2. 用 dd 直接写入修改后的数据
  3. 第一版写入 CRC 校验错误 → 盒子仍能启动(U-Boot 用默认值)
  4. 第二版写入 CRC 校验正确,但 mmz=ddr,0,0,256M 改为 mmz=ddr,0,0,0 → 盒子变砖,无法启动

致命错误 ​

  1. 备份存在盒子里 — 盒子砖了 = 备份也拿不到
  2. 直接写分区没有硬件 recovery 方案 — 没有串口线、没有 TF 卡引导方案就敢动 boot 分区
  3. 不了解海思 U-Boot 实现细节 — 海思 Fastboot 对 U-Boot 环境格式做了魔改
  4. 没有备好恢复方案就上手 — 应该先准备 TF 卡刷机卡再改 bootargs

恢复方案(事后总结) ​

对于海思 HI3798MV100 变砖:

  1. USB 烧录模式 — 短接 eMMC CLK+GND(或主板背面测试点),插 USB 线连电脑,用 HiTool(Windows 工具)刷回原厂 bootargs
  2. TF 卡引导 — 部分海思盒子支持复位键 + 插电从 TF 卡引导,需制作对应 bootloader 卡
  3. 串口(UART) — 板载 4 针 UART 接口,用 USB-TTL 线连接能看到 U-Boot 输出,在 U-Boot 命令行恢复

如果再犯 ​

应该用 HiTool 刷机工具通过 USB 烧录,而不是直接 dd 分区。对于嵌入式设备的启动分区,永远不要用 dd 直接写,应使用厂商提供的专用工具。