正常情况下,CORTEX-M可以由linux、Uboot加载。但是使能authentication,只能由optee加载,因为内存是受保护。对于用户来讲,固件的加载是没有什么不同。唯一的不同就是需要验证签名。 1、CM核加载原理 如图 详细描述如下: 1)签名 使用OPTEE的签名脚本对M核固件进行签名生成如上图中结构; 2)下位机校验流程 ① STM32MPU的linux系统会将M核镜像加载到DDR中 ② 调用OPTEE来加载和校验M核;在这个过程中,对HEADER、TLV、签名做校验,通过后就会加载M核的ELF段到对应的RAM中。 2、M核如何签名 详细描述如下: 1)使用STM32CubeIDE编译M核固件 2)使用密钥产生工具产生密钥对 3)利用上面产生的私钥,使用签名脚本将M核固件进行签名,并生成HASH表 4)将产生的公钥编译进OPTEE SDK中。便于后续校验 3、OPTEE TA如何校验M核 如图 详细描述: 1、linux复制文件系统中的M核到DDR中;接着调用optee完成M核的加载、校验、启动M核; 2、在TA这部分中,会复制M核HEADER中的信息复制到安全DDR中; 3、在OPTEE TA中会计算M核HEADER的HASH,并验证签名(之前私钥给的签名),校验通过,将会进入下一步加载ELF的阶段; 4、加载ELF段之前就校验ELF的每个段,使用TLV的HASH与每个段计算的HASH比对,比对通过就会进行加载和执行; 5、将NS DDR中ELF复制到目标RAM地址上;访问只支持安全访问; 6、所有的段被复制和被校验后,FW就会被执行。 4、optee如何加载M核 第一步,在A核运行linux之后,linux会通过reomteproc机制把M核固件从文件系统加载到non-secure DDR中; 第二步,linux通过optee 的驱动把OPTEE 的TA调起来,然后去加载M核 第三步,加载过程中,先通过内核空间的remoteproc的PTA调用driver来完成加载M核前的memory保护、加解密、RIF、etc等保护配置, 然后去做相关的后续校验和加载 第四步,加载完成后,把M核调起来; 注意: APP的TA校验,数据复制和加载的整个过程,memory(M核执行代码的RAM区)是受保护的,不能直接被non-secured A核代码访问。 如,linux的内核不能把数据写入M核的RAM中,因为此时是受到OPTEE的proc TA的保护的。默认是只有A核的secure方式才可以访问。 在15上,这个管理机制主要是通过ETZPC隔离机制。和25也是保护配置不太一样。 5、如何使能校验M核 1)产生M核密钥对; 2)设置OPTEE TA的系统remoteproc机制,比如如下配置 Op-tee config, kernel config, u-boot config (optional), device tree config; 3)调整和产生M核固件 4)签名 5)启动带校验的M核 |
【STM32MP257】轻松搭建A35 Linux编译及调试环境
【STM32MP257】🥳STM32MP257-DK-开发板开箱体验
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之uboot如何校验kernel和如何使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得
《STM32MPU安全启动》学习笔记