UBoot启动阶段分析
UBoot启动分为大致三个部分:
- BL1阶段:
- 最初的引导加载程序,通常是芯片中的引导固件(如Boot ROM)(是芯片厂商固化在芯片中的小的引导程序)。
- BL2阶段:
- U-Boot的第二阶段引导加载程序
SPL。主要任务是验证BL3阶段镜像的完整性以及加载BL3阶段镜像。
- U-Boot的第二阶段引导加载程序
- BL3阶段:
- `BL31阶段:
- U-Boot安全认证阶段(
BL31阶段),跳转至BL32。
- U-Boot安全认证阶段(
- BL32阶段:
- 这里指的就是正常模式下的uboot阶段代码了(可以进入uboot命令阶段的)。
- `BL31阶段:
BL2和BL3阶段的程序是后续可以烧入提供的
具体分析
1. BL1阶段:
- 用于引导U-Boot的第二阶段引导加载程序(
BL2)(Bootloader),将U-Boot的第二阶段引导加载程序BL2从外部存储设备加载到 CPU 自带的小 RAM 空间。 - 该阶段的引导程序是固化在芯片的ROM中的,一般不能修改(或者说只有芯片原厂才可以修改)。
2. BL2阶段:
- U-Boot的第二阶段引导加载程序(
BL2)会运行去初始化一些基础的硬件(主要是外部RAM芯片的初始化),然后验证BL3阶段镜像的完整性以及加载BL3阶段镜像。 BL2引导加载程序是由板卡厂家提供(因为板卡厂家知道外部RAM芯片是什么,如果自己知道也可以自己尝试移植)。
BL2阶段实际打印输出(这里是SPL):
SPL: A/B-slot: _a, successful: 0, tries-remain: 7
Trying fit image at 0x4000 sector
## Verified-boot: 0
## Checking atf-1 0x00040000 ... sha256(b69e8292fd...) + OK
## Checking uboot 0x00200000 ... sha256(a2ab5a969a...) + OK
## Checking fdt 0x0031a530 ... sha256(6ef26c3a4c...) + OK
## Checking atf-2 0xfe481000 ... sha256(8857274472...) + OK
## Checking atf-3 0xfe490000 ... sha256(8da74bc229...) + OK
## Checking optee 0x08400000 ... sha256(34263f2418...) + OK
Jumping to U-Boot(0x00200000) via ARM Trusted Firmware(0x00040000)
3. BL3阶段:
1. BL31阶段:
- U-Boot安全认证阶段(BL31 阶段),系统可能会涉及密钥管理、加密解密操作。这些操作需要访问 OP-TEE 存储 中的密钥,确保每个设备的私密信息只能由其对应的硬件访问。
- 在 BL31 阶段,系统会验证 BL2 和更高级别的引导程序,确保它们来自可信源,没有遭到恶意篡改。通常会通过验证签名来完成这一过程,使用 RSA、ECC 等公钥算法验证文件的完整性。
- ARM TrustZone 或 Trusted Execution Environment (TEE) 中,BL3 阶段会创建一个受保护的环境,用于执行加密操作或者保护用户的敏感数据。密钥可能存储在 Secure Storage 或 OTP 存储 中。
BL31阶段实际打印
NOTICE: BL31: v2.3():v2.3-632-g763689fe5:xsf
NOTICE: BL31: Built : 03:15:31, Aug 24 2023
INFO: rk_otp_init finish!
NOTICE: BL31: Rockchip release version: v1.0
INFO: ARM GICv2 driver initialized
INFO: nonboot cpus st-ee0
INFO: dfs DDR fsp_param[0].freq_mhz= 1332MHz
INFO: dfs DDR fsp_param[1].freq_mhz= 324MHz
INFO: dfs DDR fsp_param[2].freq_mhz= 528MHz
INFO: dfs DDR fsp_param[3].freq_mhz= 780MHz
INFO: BL31: Initializing runtime services
INFO: BL31: Initializing BL32
I/TC:
I/TC: OP-TEE version: 3.13.0-743-gb5340fd65 #hisping.lin (gcc version 10.2.1 20201103 (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16))) #7 Tue Aug 29 08:56:34 CST 2023 aarch64
I/TC: Primary CPU initializing
I/TC: Primary CPU switching to normal world boot
INFO: BL31: Preparing for EL3 exit to normal world
2. BL32阶段:
- 该完整的U-Boot引导程序就会根据boot.img镜像中的设备树文件完成uboot阶段所有的硬件初始化工作,比如RAM、系统时钟、网口、mmc设备、USB设备等等。
- 根据
bootcmd环境变量中的命令参数去对应的外部存储器中将linux内核镜像加载到RAM指定地址空间中。 - 将
bootargs环境变量中的内容以参数的形式传递给linux内核,然后跳转到linux内核入口地址,将控制权转交给linux内核。- 关于
bootargs环境变量的具体作用请参考文章《Uboot-bootargs》。
- 关于
- 现在U-Boot就已经完成了linux内核的引导。
实际从BL31阶段到BL32阶段的打印:
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x200000
INFO: SPSR = 0x3c9
U-Boot 2017.09 (Sep 28 2024 - 11:39:46 +0800)
Model: Rockchip RK3562 Evaluation Board
MPIDR: 0x80000000
PreSerial: 0, raw, 0xff210000
DRAM: 2 GiB
Sysmem: init
Relocation Offset: 7da45000
Relocation fdt: 7b9fa210 - 7b9fece0
CR: M/C/I
其他说明
1. OP-TEE 的特点
-
开源:
OP-TEE是一个开源项目,任何人都可以查看、修改和使用它。它基于开源的 TEE 规范,具有广泛的社区支持。旨在提供一个在处理器中安全隔离的环境,以执行敏感的、安全的操作。TEE是一种硬件隔离的执行环境,提供了比普通操作系统更高的安全性,通常用于保护用户数据、加密密钥、身份验证、数字版权管理(DRM)等关键任务。 -
轻量级:
OP-TEE设计为轻量级并且高效,能够在嵌入式和移动设备中运行,适用于资源有限的设备。 -
支持多种硬件平台:虽然
OP-TEE主要用于 ARM 架构,但它支持多种 ARM 处理器和硬件平台,尤其是支持ARM TrustZone。 -
与操作系统集成:
OP-TEE通常与 Linux 和 Android 等操作系统集成,可以通过OP-TEE提供的 API 进行安全操作。 -
支持多种服务:
OP-TEE提供一系列 受信应用(Trusted Applications,TA),如加密、签名、身份验证等,开发者可以基于这些受信应用开发自己的安全服务。
2. OP-TEE 的工作流程
-
正常世界(
Normal World):操作系统(如 Linux)启动并运行应用程序。应用程序可以请求 TEE 提供的安全服务(例如加密)。 -
通过
OP-TEE客户端 API 请求服务:应用程序通过OP-TEE客户端 API 向OP-TEE发起请求,这些请求会被发送到 Secure World。 -
安全世界(
Secure World):OP-TEE在 Secure World 中处理这些请求,执行相应的安全操作(如加密、身份验证),并返回结果给Normal World。 -
返回结果:执行完的结果(例如加密后的数据或身份验证结果)通过客户端 API 返回给应用程序。

6620

被折叠的 条评论
为什么被折叠?



