进行移植前先看看ST官网的一些资料,了解芯片的工作方式:
STM32MP1 引导链概述
https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_boot_chain_overview
启动步骤如下
- BROM(BL1):芯片内部程序,启动时识别
BOOT PIN
读取对应启动设备里的程序到内部SYSRAM
执行,工作在Secure World
安全模式下。由于SYSRAM
很小,一般只用于加载First stage bootloader (FSBL)
。 - FSBL(BL2):第一阶段
bootloader
,负责初始化时钟树和DDR,然后加载Second stage bootloader (SSBL)
并跳到DDR执行。常见的FSBL
有U-boot SPL
,Trusted Firmware-A
,它们的区别在于是否对SSBL
固件进行一些验证再执行,也就是Secure Boot
。 - SSBL(BL3):第二阶段
bootloader
,如果不需要Secure Boot
,则可以直接由U-boot SPL
拉起U-Boot
执行。在Secure Boot
时分为下面几步执行:- BL31:
TF-A(Trusted Firmware-A)
初始化安全执行环境,并对BL32
进行进行固件安全验证启动。 - BL32:
OP-TEE(Trusted Execution Environment 可信执行环境)
工作在Secure World
安全模式下,使用ARM TrustZone
硬件的安全隔离环境独立运行,可为用户空间程序提供安全服务交互。启动完成后切换到Normal World
非安全模式,并启动BL33
。 - BL33:
U-boot
- BL31:
Kernel
这里有一篇文章有详细说明:
https://www.cnblogs.com/arnoldlu/p/14175126.html