Arduino 发布了基于MCUBoot的新引导加载程序,以增加 Arduino 产品的功能范围和固件安全性,第一个版本针对 Arduino Pro 系列中基于 STM32H7 的Arduino Portenta和Nicla Vision板。
该版本侧重于基于 Arduino Mbed OS 的开发板,但 MCUboot 与操作系统无关,它还可以与Zephyr、Nuttx和Apache mynewt 一起使用。Arduino公司为了确保过渡很容易,在 Arduino 板上保留了现有的 OTA 固件升级过程。

Arduino MCUboot 亮点:
- 签名和加密更新 – MCUboot 支持在升级时即时加密/解密图像。它还将在启动sketch 之前检查计算的签名是否与嵌入在固件中的签名匹配。
- 确认或恢复更新 – 更新后,新的sketch 可以在运行时更新 flash 的内容,将自己标记为 OK。如果一切按预期工作,则更改将是永久性的,但如果sketch 无法确认正常工作,MCUboot 将执行恢复交换并尝试引导旧sketch 。
- Sketch bootstrap – 如果在主插槽中未找到有效固件,MCUboot 将在辅助插槽中搜索有效固件,如果有则将其加载到主插槽中。
- 重置恢复 – 如果在交换操作过程中发生重置,两个固件在闪存中可能不连续。MCUboot 通过使用固件尾部来确定固件部分在 flash 中的分布方式并重新启动交换,从而从这种情况中恢复。
- 向后兼容默认的 Arduino 引导加载程序 – 如果签名和加密密钥没有与 MCUboot 一起存储在 flash 中,则跳过sketch 签名验证,并且可以引导任何有效的sketch 。

Arduino 在宣布新引导加载程序的博客文章中详细介绍了固件更新机制。基本上,有两个分区,其中 SLOT 0 代表包含当前应用程序固件的flash分区,而 SLOT 1 代表包含更新的应用程序固件的flash分区。还需要一个额外的flash区域“SCRATCH”来支持MCUboot 交换擦除算法。在 Portenta H7 板上,SLOT 0 分区位于内部flash中,而 SLOT 1 (update.bin) 和 SCRATCH (scratch.bin) 分区/文件将位于外部QSPI flash中。
您可以在Github 上找到代码和更多详细信息,尤其是为 Portenta H7、 Portenta H7 Lite、Portenta H7 Lite Connected或 Nicla Vision 板的所有者切换到 Arduino MCUboot 引导加载程序的分步说明(更新skech、加密密钥生成、固件签名等)。

文章翻译者:Taylor Lee,瑞科慧联(RAK)高级嵌入式开发工程师,有丰富的物联网和开源软硬件经验,熟悉行业主流软硬件框架,对行业发展动向有着敏锐的感知力和捕捉能力。