简介

MCUboot引导加载程序定义了一个通用的基础结构微控制器系统上的系统闪存布局,并提供了一个安全的引导加载程序,可以轻松进行软件升级。
MCUboot不依赖于任何特定的操作系统硬件,而是依赖于与其配合使用的操作系统中的硬件移植层。目前,MCUboot 可与以下操作系统和 SoC 配合使用:

  • Zephyr
  • Apache Mynewt
  • Apache NuttX
  • RIOT
  • Mbed OS
  • Espressif
  • Cypress/Infineon

功能

  • 验证升级的软件包的验签,软件包的验签采用的是pem证书的格式
  • 防止软件降级
  • 支持软件回滚
  • 升级文件的完整性检查

验签

验签的原理其实很简单,在mcuboot中保存我们选择证书的key,然后在生成应用程序的升级文件时,会自动将证书保存到我们的升级文件的特定位置,然后在mcuboot在进行升级检测时,需要用之前的保存的key来验证证书是否合法,如果不合法那就代表升级固件非法,不允许升级。
优点: 当我们在平台上部署包的时候,假如我们部署错了,那就会直接检测出来。
缺点: 产品上线的第一次就要把证书确定了,且后不能修改。

软件降级

mcuboot中会校验版本号和软件计数器,要升级的版本比当前版本的版本号低的时候,那就禁止升级。同时也会校验软件计数器,只有软件计数器大于等于当前的软件计数器才允许升级。

支持回滚

严格意义上来说其实不应该叫回滚。而是mcuboot的一种对升级版本的确认机制。例如我们在使用mcuboot升级一个固件时,采用的不是永久升级方式,那就需要在升级完的固件中做一次确认操作,否则当下次重启时就会回滚到之前的版本。

完整性校验

在将映像复制到主插槽之前,会立即检查映像的完整性。如果引导加载程序不执行映像交换,则它可以对主插槽中的映像执行可选的完整性检查。如果已设置MCUBOOT_VALIDATE_PRIMARY_SLOT则进行校验,否则它不会执行完整性检查。