2026/4/22 23:36:00
网站建设
项目流程
下面是详细的流程解析:
1. BL2 阶段(可信启动加载器)
- 职责:BL2 运行在 Trusted SRAM 中,主要负责加载后续阶段的镜像。
- 动作:
- BL2 从存储设备(如 Flash)中读取BL31(EL3 Runtime Software)和BL33(Non-trusted Firmware,通常是 U-Boot)的镜像到内存中。
- BL2 填充镜像描述符,告诉系统这些镜像在哪里,入口点是多少。
- 跳转:BL2 完成加载后,会直接跳转到BL31的入口点。
2. BL31 阶段(EL3 运行时软件 / Secure Monitor)
这是 ARM TrustZone 架构中最核心的部分。
- 职责:BL31 运行在最高的特权级 EL3。它负责系统安全状态的切换(Secure World 与 Non-secure World 的切换)。
- 动作:
- 初始化:BL31 进行 EL3 级别的环境初始化(如设置异常向量表、配置 PSCI 电源管理等)。
- 准备跳转:BL31 初始化完成后,它不会“退出”(return)或消亡。它准备好接收来自 BL33(或 Linux)的 SMC(Secure Monitor Call)调用。
- 移交控制权:BL31 会恢复 BL33 的上下文(CPU 寄存器状态),然后执行
eret(Exception Return)指令,从 EL3 切换到 EL2(或 EL1),正式跳转到BL33 (U-Boot)。
3. BL31 与 BL33 的关系(关键点)
- BL31 不是“退出”了:当 BL33 (U-Boot) 或 Linux 内核运行时,如果需要进行安全操作(例如电源管理、TrustZone 服务),它们会触发 SMC 异常,CPU 会立刻暂停当前任务,跳回 BL31处理。
- BL31 是常驻的:在整个系统运行期间,BL31 始终驻留在内存中充当“安全监视器”的角色。
4. BL33 阶段
- 职责:这就是我们常见的 U-Boot(非安全世界的 Bootloader)。
- 动作:初始化外设、加载 Linux 内核,最终启动操作系统。
流程图解
总结
你的理解流程是对的:BL2 加载 -> 跳 BL31 -> 跳 BL33。
唯一需要修正的概念是:BL31 不会像普通函数那样“退出”,它是系统的“守门员”,在把控制权交给 BL33 后,它依然在后台待命,随时准备处理来自非安全世界的安全请求。