简介
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
则进行校验,否则它不会执行完整性检查。