对 U-Boot 启动分区直接 dd 写入是极度危险的操作
事发经过
远程操作一台海思 HI3798MV100 电视盒子(Ubuntu 20.04 / ARM / 6.4G 存储):
- 修改
/dev/mmcblk0p2(bootargs 分区,即 U-Boot 环境变量存储区) - 用
dd直接写入修改后的数据 - 第一版写入 CRC 校验错误 → 盒子仍能启动(U-Boot 用默认值)
- 第二版写入 CRC 校验正确,但
mmz=ddr,0,0,256M改为mmz=ddr,0,0,0→ 盒子变砖,无法启动
致命错误
- 备份存在盒子里 — 盒子砖了 = 备份也拿不到
- 直接写分区没有硬件 recovery 方案 — 没有串口线、没有 TF 卡引导方案就敢动 boot 分区
- 不了解海思 U-Boot 实现细节 — 海思 Fastboot 对 U-Boot 环境格式做了魔改
- 没有备好恢复方案就上手 — 应该先准备 TF 卡刷机卡再改 bootargs
恢复方案(事后总结)
对于海思 HI3798MV100 变砖:
- USB 烧录模式 — 短接 eMMC CLK+GND(或主板背面测试点),插 USB 线连电脑,用 HiTool(Windows 工具)刷回原厂 bootargs
- TF 卡引导 — 部分海思盒子支持复位键 + 插电从 TF 卡引导,需制作对应 bootloader 卡
- 串口(UART) — 板载 4 针 UART 接口,用 USB-TTL 线连接能看到 U-Boot 输出,在 U-Boot 命令行恢复
如果再犯
应该用 HiTool 刷机工具通过 USB 烧录,而不是直接 dd 分区。对于嵌入式设备的启动分区,永远不要用 dd 直接写,应使用厂商提供的专用工具。