SBL(安全引导加载程序)与 SFW(安全固件)是恩智浦 MCU 的安全 OTA 核心方案,支持本地(U 盘 / SD 卡)与远程(AWS / 阿里云)固件升级,具备签名加密、映像校验、回滚等安全机制,适配 i.MX RT 全系列、LPC55S69 等多平台。本文基于官方用户指南(V1.1.0),提炼从环境搭建到安全 OTA 落地的关键步骤,助力开发者快速部署可靠的固件升级方案。
资料获取:i.MX RT500硬件设计指南
1. 核心概述
1.1 核心定位
- SBL:二级引导加载程序,负责映像校验、烧写、启动控制,支持 ISP(系统内编程)与安全信任链构建。
- SFW:基于 FreeRTOS 的安全固件,负责 OTA 映像获取(本地 / 云端),与 SBL 协同完成全流程升级。
1.2 支持平台与核心功能
- 适配平台:i.MX RT1010/1020/1050/1060/1170/500/600、LPC55S69 等。
- 核心功能:
- OTA 模式:单一映像、交换模式、重映射模式(支持回滚)。
- 升级方式:本地(UART/USB/SD 卡 / U 盘)、远程(AWS IoT / 阿里云 IoT)。
- 安全机制:RSA/ECDSA 签名、AES 加密(BEE/OTFAD/PRINCE)、HAB 安全启动。
- 工具支持:GCC_ARM/IAR/MDK 工具链、SCons 构建、MCUBootUtility 烧录。
2. 快速起步:环境搭建与基础准备
2.1 主机环境搭建(以 EVKMIMXRT1170 为例)
Windows 主机(支持 GCC_ARM/IAR/MDK)
- 克隆代码:
git clone https://github.com/NXPmicro/sbl.git(SBL)、git clone https://github.com/NXPmicro/sfw.git(SFW),切换至 V1.1.0 版本。 - 配置工具链:
- GCC_ARM:设置
EXEC_PATH为工具链安装路径,或添加环境变量SBL_EXEC_PATH/SFW_EXEC_PATH。 - IAR/MDK:通过
cmd -scons --ide=iar或--ide=mdk5生成项目文件,配置汇编器选项(MDK 需选择armclang(GNU Syntax))。
- GCC_ARM:设置
- 配置项目:运行
env.bat,执行sccons --menuconfig,勾选 OTA 模式、安全功能等选项,保存配置。 - 构建下载:编译生成
sbl.bin/sfw.bin,通过 DapLink 拖放或 MCUBootUtility 烧录至开发板,切换至 XIP 启动模式。
Linux 主机
- 安装依赖:
sudo apt-get install scons git python3.6 gcc-arm-none-eabi ncurses5-dev。 - 配置与构建:克隆代码后,进入目标平台目录,设置工具链路径,通过
sccons --menuconfig配置,sccons编译生成映像。
2.2 SFW 特殊准备
- 调试模式选择:通过
sccons --menuconfig勾选 “Enable sfw standalone xip”(单独 XIP 运行)或取消(与 SBL 配合)。 - 依赖组件:启用 FreeRTOS、LWIP(网络升级)、mbedtls(加密)等组件。
3. OTA 核心模式:特性与流程
3.1 三种核心 OTA 模式对比
| 模式 | 核心特点 | 适用场景 | 关键流程 |
| 单一映像模式 | 无冗余映像,直接覆盖升级 | 简单场景,无需回滚 | ISP 连接→烧写新映像→校验签名→启动新固件 |
| 交换模式 | 双 Slot(Slot1/Slot2),映像互换 | 需回滚保障,闪存空间充足 | 新映像写入 Slot2→设置 magic 标志→复位→SBL 交换 Slot→启动新固件→设置 image_ok(禁用回滚) |
| 重映射模式 | 无物理互换,通过地址重定向切换 | 减少闪存擦写,提升效率 | 新映像写入备用 Slot→设置重映射标志→复位→SBL 重定向地址→启动新固件→清除标志 |
3.2 关键标志操作
- 交换模式:magic 字段(0x2FFFF0)触发升级,image_ok 字段(0x2FFFE8)确认成功。
- 重映射模式:标志位于 0xFFFE0,image_position 标识当前固件位置,magic 字段触发升级。
4. 本地 OTA 实操:U 盘 / SD 卡升级
4.1 核心前提
- 映像准备:通过
imgtool.py签名映像,命令示例:python imgtool.py sign --key 私钥.pem --align 4 --version "1.0" --header-size 0x400 --slot-size 0x100000 原始.bin 签名后.bin。 - 配置 SBL:禁用单一映像模式与 ISP,勾选 “OTA from sdcard”/“OTA from u-disk”。
4.2 操作步骤
- 将签名后的映像重命名为
newapp.bin,存入 U 盘 / SD 卡。 - 插入开发板,复位后 SBL 自动检测映像,触发升级。
- 升级完成后移除 U 盘 / SD 卡,避免重复升级,复位验证新固件运行。
5. 远程 OTA 实操:AWS / 阿里云落地
5.1 AWS IoT OTA(以 EVKMIMXRT1170 为例)
- 云端准备:创建 S3 桶(存储映像)、OTA 服务角色(附加
AmazonFreeRTOSOTAUpdate策略)、IoT Thing(设备认证)。 - 设备端配置:
- 生成
aws_clientcredential_keys.h(导入设备证书与私钥)。 - 配置 SFW:勾选 “AWS OTA cloud”,填写 MQTT broker DNS 与 IoT Thing 名称。
- 生成
- 映像上传:将签名后的映像上传至 S3 桶,创建 OTA 作业。
- 运行验证:开发板联网后接收 OTA 任务,下载映像并校验,自动重启运行新固件。
5.2 阿里云 OTA(以 EVKMIMXRT1064 为例)
- 云端准备:创建产品与测试设备,获取 ProductKey/DeviceName/DeviceSecret。
- 设备端配置:
- 定制 Link SDK,配置 MQTT 协议与 TLS 加密。
- 通过
menuconfig填入阿里云三要素,启用 mbedtls。
- 升级包上传:云端创建 OTA 升级包(版本需高于设备当前版本),选择目标设备。
- 运行验证:开发板联网后接收升级指令,下载并写入映像,复位后完成升级。
6. 安全机制:签名、加密与安全启动
6.1 核心安全能力
- 签名校验:支持 RSA-2048/ECDSA-P256,通过
imgtool.py生成密钥对,公钥嵌入 SBL 校验。 - 加密保护:支持 BEE(总线加密)、OTFAD(即时 AES 解密)、PRINCE(LPC55S69 专用),需烧写 KEK(加密密钥的密钥)至 eFuse。
- HAB 安全启动:通过 MCUXpresso Secure Provisioning 工具生成 SRK 密钥,烧录至 OCOTP,禁用未签名映像启动。
6.2 关键安全操作
- 密钥生成:使用 MCUXpresso Secure Provisioning 工具生成 CA 证书与设备密钥,存储于
keys/crts目录。 - 映像加密:通过
image_enc.exe或脚本sign_enc_sbl_app.bat生成加密映像。 - eFuse 烧写:烧录 SRK 哈希(签名校验)、KEK(加密解密)、HAB 使能位,保障启动安全。
SBL 与 SFW 为恩智浦 MCU 提供了从本地到远程、从基础升级到安全防护的全栈 OTA 解决方案,核心在于环境搭建时的工具链配置、OTA 模式的合理选择、安全机制的严格启用。遵循本文流程,可快速实现可靠的固件升级部署,适配工业控制、智能硬件等多场景需求。
阅读全文
1835