2. 固件升级基础
固件(Firmware)是运行在嵌入式设备上的底层软件,通常固化在 Flash、EEPROM 或 MCU 内部存储中,负责硬件初始化、驱动调度、通信协议栈以及业务逻辑。与普通应用软件不同,固件与硬件耦合紧密,一旦写入错误版本,设备可能无法启动、通信中断,甚至需要返厂维修。因此,理解固件的定义、升级方式、传输协议以及典型应用场景,是设计安全验证与回滚策略的前提。
一、固件的基本构成与升级本质
一个可升级固件通常由三部分组成:引导程序(Bootloader)、应用程序镜像(Application Image)和配置/元数据区(Metadata)。Bootloader 负责上电自检、镜像校验、跳转执行以及升级模式切换;Application 是实际业务代码;Metadata 则记录版本号、校验值、签名信息、回滚标志等。升级的本质,就是用新镜像替换旧镜像,并在替换前后保证设备仍可恢复。
二、升级方式:本地升级与 OTA 升级
按镜像来源和传输路径,固件升级可分为本地升级和 OTA(Over-The-Air)升级。本地升级通过 USB、UART、SD 卡、调试口等物理通道将镜像写入设备,常用于产线烧录、研发调试和现场维护。OTA 升级则通过无线或有线网络远程下发镜像,适合设备分布广、人工维护成本高的场景。
| 对比维度 | 本地升级 | OTA 升级 |
|---|---|---|
| 传输通道 | UART、USB、SD 卡、JTAG | Wi-Fi、蜂窝网、以太网 |
| 典型场景 | 产线烧录、研发调试、现场维修 | 批量设备远程维护、功能迭代 |
| 优点 | 稳定、速度快、可控性强 | 无需到场、效率高、可批量推送 |
| 风险 | 需人工介入、难以规模化 | 网络中断、镜像被篡改、断电变砖 |
| 安全重点 | 镜像来源可信、烧录工具可靠 | 传输加密、签名验证、断点续传、回滚 |
三、常见升级协议与适用边界
不同协议在带宽、实时性、拓扑结构和可靠性上差异明显,选择时需结合设备资源与部署环境。
- UART:最基础的串行协议,常用于 Bootloader 阶段的 XMODEM/YMODEM 传输。速率低(通常 115200 bps 至 1 Mbps),但实现简单,适合小镜像和产线烧录。
- USB:带宽高,支持 DFU(Device Firmware Upgrade)类标准,适合大镜像快速写入。需要设备具备 USB 控制器和驱动支持。
- CAN:多用于汽车和工业总线,具备差分抗干扰和仲裁机制。升级时通常基于 ISO 15765-2 或 UDS 协议分帧传输,适合节点多、电磁环境复杂的场景。
- HTTP/HTTPS:OTA 最常用的应用层协议,支持断点续传、CDN 分发和 TLS 加密。设备通过 GET 请求下载镜像,配合 Range 头实现分块传输。
- MQTT:轻量级发布/订阅协议,适合低带宽、长连接场景。通常用于下发升级通知和元数据,镜像本体仍走 HTTP 或 CoAP 传输。
# 典型 OTA 升级请求示例(HTTP Range 分块下载)
GET /firmware/v2.3.1.bin HTTP/1.1
Host: ota.example.com
Range: bytes=0-65535
Authorization: Bearer <token>
# 设备端校验流程(伪代码)
sha256 = calc_sha256(downloaded_chunk)
if sha256 != manifest.chunk_hash:
abort_and_rollback()
四、典型应用场景与核心挑战
在智能家居中,Wi-Fi 模组通过 MQTT 接收升级通知,再从 HTTPS 服务器下载镜像;在汽车电子中,ECU 通过 CAN 总线接收分帧数据,并在 Bootloader 中完成刷写;在工业网关中,设备可能同时支持本地 USB 维护和远程 OTA,以兼顾产线与现场需求。
这些场景共同面临几类挑战:断电风险导致写入中断;镜像篡改导致恶意固件运行;版本回退导致降级攻击;存储空间不足导致无法同时保存新旧镜像;网络不稳定导致下载失败。因此,升级方案必须包含完整性校验、签名验证、双分区备份和回滚机制。
五、升级流程中的关键状态与信号链
下图展示了从设备上电到升级确认的完整信号链与状态迁移关系,涵盖本地与 OTA 两条路径在 Bootloader 中的汇合点,以及校验失败时的回滚分支。
从图中可以看出,无论本地还是 OTA,镜像最终都要进入暂存区并经过校验,才能切换启动分区。校验失败或新固件启动异常时,系统必须能够回滚到旧分区,并上报告警。这一“暂存—校验—切换—确认/回滚”的闭环,是后续章节讨论安全验证与回滚策略的工程基础。