2. 烧录协议与工具:深入解析 Fastboot、SP Flash Tool、U-Boot 烧录流程
烧录这件事,说白了就是把编译好的固件写到存储介质里。听起来简单,但不同平台、不同协议,坑是真不少。我这些年经手的项目,从手机平板到工业网关,几乎每个都跟烧录打过交道。今天咱们就把 Fastboot、SP Flash Tool、U-Boot 这三个主流工具掰开揉碎讲清楚。
2.1 Fastboot:Android 生态的烧录标准
Fastboot 是 Google 定义的协议,主要用于 Android 设备。它工作在 bootloader 层,通过 USB 传输数据。我个人习惯把它叫做「救急三件套」——刷机、解锁、救砖,全靠它。
2.1.1 Fastboot 烧录流程
- 进入 Fastboot 模式:按住音量减 + 电源键,或者通过 adb reboot bootloader 命令。
- 检查设备连接:执行 fastboot devices,确认设备已识别。
- 解锁 bootloader:fastboot flashing unlock(部分厂商需要先申请解锁码)。
- 烧录分区:fastboot flash boot boot.img、fastboot flash system system.img 等。
- 擦除与重启: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 烧录流程
- 加载 scatter 文件:这是联发科的分区描述文件,定义了每个分区的起始地址和大小。
- 选择烧录模式:
- Download Only:只烧录,不格式化。
- Firmware Upgrade:格式化 + 烧录,适合全新设备。
- Format All + Download:全擦除再烧录,最彻底。
- 连接设备:拔掉电池(或按住音量键),插入 USB。工具检测到设备后自动开始烧录。
- 等待完成:进度条走完,拔线重启。
小技巧: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 为例)
- 搭建 tftp 服务器:在 PC 上启动 tftp 服务,把固件放在指定目录。
- 设置网络参数:
setenv ipaddr 192.168.1.100 setenv serverip 192.168.1.10 setenv netmask 255.255.255.0 saveenv - 下载固件到内存:
tftp 0x82000000 uImage tftp 0x83000000 rootfs.jffs2 - 写入 Flash:
sf probe 0 sf erase 0x100000 0x500000 sf write 0x82000000 0x100000 0x500000 - 重启验证: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 或 U-Boot 快速迭代,量产阶段用 SP Flash Tool 或工厂专用工具,运维阶段靠 U-Boot 网络烧录。每种工具都有它最舒服的位置。