二、STM32MP257启动流程简介
本章节将简要介绍STM32MP257的启动流程
1. STM32MP系列启动流程
安全启动就是保证在嵌入式设备上运行的软件是值得信任的,在嵌入式linux中完整的启动流程通常包含多个启动阶段,比如BootROM、TFA、Uboot、Kernel、应用程序等,值得信任不能靠口头保证,必须有一种完善的校验机制来保证全流程的可信,所有安全启动的起点必须是值得信赖的,无法被外部篡改的,我们叫信任根(RoT:Root of Trust),这个角色通常是芯片厂商设计的Bootrom代码,芯片上电以后会从固定的位置开始运行代码,这段代码由芯片厂商固化,外部开发者不可见也不可改。
因为嵌入式linux启动流程分为多个阶段,有了信任根以后我们还需要保证每个阶段加载的image是值得信任的,这就是我们常说的信任链(CoT:Chain of Trust),由信任链来保证每一个阶段加载的下一阶段image的完整性。
下面首先看一下STM32MP257官方支持的启动流程:
stm32mp257支持从A53核启动,也支持从CM33核启动,上图以A53启动为例:
- 上电以后从内部BootRom冷启动,BootRom会加载TFA的BL2来作为FSBL的image
- TFA的BL2会加载TFA的BL31,主要是security级别的EL3代码相关(A53和A7核心差异)
- 然后由TFA的BL31来加载Uboot和Optee
- 在安全启动中由Optee来加载CM33核心,这样可以做签名的校验
- uboot加载内核并启动
- 由内核来加载应用程序
不过在stm32mp系列中并不是所有产品都支持安全启动流程的,只有stm32mp257c和stm32mp257f两个系列是支持硬件加密安全启动的。
2. STM32MP257 Secure BootRom原理
Secure BootRom 即从BootRom -> TFA BL2 的校验流程
A/D的系列因为硬件不支持安全启动,所以只有UNSECURED一个状态,C/F系列出场默认是UNLOCKED状态,如果通过PROVEISION以后设备就会变成LOCKED状态,此时如果校验失败则无法启动。
STM32MP2 BootRom校验使用的是ECDSA算法,同时支持防回滚机制,同时支持给SSBL做加密。
如果使能安全启动,BootRom会检查TFA分区镜像的头(Header),如果带有加密信息会对Public Key做校验,对image的hash值做签名校验,同时还有防回滚检查,都通过以后TFA BL2 才会跑起来。
这部分包含比较多的密码学知识和加解密流程,因为我使用的开发板使用的是不带加密安全启动的STM32MP257D 系列芯片,所以如果对这部分比较感兴趣可以在B站搜索STM32MP安全启动线上课程
详细学习。