2. 烧录协议与工具

烧录这件事,说白了就是把编译好的固件写到存储介质里。听起来简单,但不同平台、不同协议,坑是真不少。我这些年经手的项目,从手机平板到工业网关,几乎每个都跟烧录打过交道。今天咱们就把 Fastboot、SP Flash Tool、U-Boot 这三个主流工具掰开揉碎讲清楚。

2.1 Fastboot:Android 生态的烧录标准

Fastboot 是 Google 定义的协议,主要用于 Android 设备。它工作在 bootloader 层,通过 USB 传输数据。我个人习惯把它叫做「救急三件套」——刷机、解锁、救砖,全靠它。

2.1.1 Fastboot 烧录流程

  1. 进入 Fastboot 模式:按住音量减 + 电源键,或者通过 adb reboot bootloader 命令。
  2. 检查设备连接:执行 fastboot devices,确认设备已识别。
  3. 解锁 bootloader:fastboot flashing unlock(部分厂商需要先申请解锁码)。
  4. 烧录分区:fastboot flash boot boot.img、fastboot flash system system.img 等。
  5. 擦除与重启:fastboot erase userdata、fastboot reboot。

关键点:Fastboot 烧录的是 分区镜像,不是整包。每个分区独立烧写,适合调试阶段只更新某个模块。

2.1.2 适用场景

场景 说明
开发调试 只更新 boot 或 dtbo 分区,不用全量烧录
系统恢复 设备变砖时,通过 fastboot 刷回官方固件
OTA 验证 测试增量升级包前,先刷回基线版本

我曾经踩过的坑:有一次给某款平板刷机,fastboot flash system 执行到一半 USB 线松了。结果 system 分区只写了一半,设备直接变砖。后来我学乖了——烧录前先检查 USB 线缆质量,并且全程不要碰数据线。

2.2 SP Flash Tool:联发科平台的烧录利器

SP Flash Tool 是联发科官方工具,支持通过 USB 直接烧录整个 Flash。它跟 Fastboot 最大的区别是——不需要设备进入系统,甚至不需要 bootloader 活着。只要 Flash 没坏,就能救回来。

2.2.1 SP Flash Tool 烧录流程

  1. 加载 scatter 文件:这是联发科的分区描述文件,定义了每个分区的起始地址和大小。
  2. 选择烧录模式:
    • Download Only:只烧录,不格式化。
    • Firmware Upgrade:格式化 + 烧录,适合全新设备。
    • Format All + Download:全擦除再烧录,最彻底。
  3. 连接设备:拔掉电池(或按住音量键),插入 USB。工具检测到设备后自动开始烧录。
  4. 等待完成:进度条走完,拔线重启。

小技巧:SP Flash Tool 的 Preloader 分区千万别乱动。我见过有人把 preloader 擦掉,结果设备彻底变砖,只能用专用烧录器才能救回来。

2.2.2 适用场景

场景 说明
量产烧录 工厂批量烧录,速度快,支持多路并行
深度救砖 bootloader 损坏、分区表丢失时唯一选择
底层调试 需要修改 preloader、lk 等底层分区时

2.3 U-Boot 烧录:网络与存储的灵活方案

U-Boot 是嵌入式 Linux 世界最常用的 bootloader。它本身不叫「烧录工具」,但它的 网络烧录 功能非常强大。我做过一个远程升级项目,设备部署在偏远山区,全靠 U-Boot 的 tftp 烧录来更新系统。

2.3.1 U-Boot 烧录流程(以 tftp 为例)

  1. 搭建 tftp 服务器:在 PC 上启动 tftp 服务,把固件放在指定目录。
  2. 设置网络参数:
    setenv ipaddr 192.168.1.100
    setenv serverip 192.168.1.10
    setenv netmask 255.255.255.0
    saveenv
  3. 下载固件到内存:
    tftp 0x82000000 uImage
    tftp 0x83000000 rootfs.jffs2
  4. 写入 Flash:
    sf probe 0
    sf erase 0x100000 0x500000
    sf write 0x82000000 0x100000 0x500000
  5. 重启验证:bootm 0x82000000。

核心思路:U-Boot 烧录的本质是「下载到内存 → 写入存储」。内存地址、Flash 偏移、长度这三个参数必须精确对应,错一个就起不来。

2.3.2 适用场景

场景 说明
远程升级 通过串口或网络更新固件,无需拆机
开发调试 频繁修改内核或设备树时,网络烧录比拆 Flash 快得多
定制化烧录 支持从 SD 卡、USB、NFS 等多种介质启动和烧录

我曾经踩过的坑:有一次用 U-Boot 烧录 NAND Flash,没注意坏块管理。结果烧完启动到一半就挂了。后来查资料才发现,NAND 烧录必须用 nand write 而不是 sf write,前者会自动跳过坏块。嗯,这个细节坑了不少人。

2.4 三种工具对比总结

维度 Fastboot SP Flash Tool U-Boot
适用平台 Android / 高通 联发科 通用嵌入式 Linux
烧录粒度 分区级 分区级 / 全片 分区级 / 全片
是否需要系统 需要 bootloader 不需要 需要 U-Boot 存活
传输方式 USB USB 网络 / 串口 / 存储卡
典型场景 刷机、解锁、救砖 量产、深度救砖 远程升级、开发调试

2.5 核心知识体系

下面这张图把三种工具的定位和关系梳理清楚了。你想想看,实际项目中往往不是只用一种工具——Fastboot 刷系统、SP Flash Tool 救底层、U-Boot 做远程升级,三者配合才能覆盖全生命周期。

烧录协议与工具知识体系 Fastboot SP Flash Tool U-Boot 特性 • 分区级烧录 • 需 bootloader • USB 传输 • Android 生态 特性 • 全片/分区烧录 • 无需系统 • USB 传输 • 联发科平台 特性 • 网络/串口烧录 • 需 U-Boot 存活 • 灵活介质 • 嵌入式 Linux 适用场景 刷机、解锁、救砖 开发调试 OTA 验证 适用场景 量产烧录 深度救砖 底层调试 适用场景 远程升级 开发调试 定制化烧录 三者配合覆盖设备全生命周期:Fastboot 日常刷机 → SP Flash Tool 救底层 → U-Boot 远程升级

我的建议:别指望一个工具打天下。项目初期用 Fastboot 或 U-Boot 快速迭代,量产阶段用 SP Flash Tool 或工厂专用工具,运维阶段靠 U-Boot 网络烧录。每种工具都有它最舒服的位置。