UBoot分析—启动阶段分析

UBoot启动阶段分析

UBoot启动分为大致三个部分:

  1. BL1阶段:
    • 最初的引导加载程序,通常是芯片中的引导固件(如Boot ROM)(是芯片厂商固化在芯片中的小的引导程序)。
  2. BL2阶段:
    • U-Boot的第二阶段引导加载程序SPL。主要任务是验证BL3阶段镜像的完整性以及加载BL3阶段镜像。
  3. BL3阶段:
    1. `BL31阶段:
      • U-Boot安全认证阶段(BL31 阶段),跳转至BL32
    2. BL32阶段:
      • 这里指的就是正常模式下的uboot阶段代码了(可以进入uboot命令阶段的)。

BL2和BL3阶段的程序是后续可以烧入提供的

具体分析

1. BL1阶段:

  1. 用于引导U-Boot的第二阶段引导加载程序(BL2)(Bootloader),将U-Boot的第二阶段引导加载程序BL2从外部存储设备加载到 CPU 自带的小 RAM 空间。
  2. 该阶段的引导程序是固化在芯片的ROM中的,一般不能修改(或者说只有芯片原厂才可以修改)。

2. BL2阶段:

  1. U-Boot的第二阶段引导加载程序(BL2)会运行去初始化一些基础的硬件(主要是外部RAM芯片的初始化),然后验证BL3阶段镜像的完整性以及加载BL3阶段镜像。
  2. 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阶段:
  1. U-Boot安全认证阶段(BL31 阶段),系统可能会涉及密钥管理、加密解密操作。这些操作需要访问 OP-TEE 存储 中的密钥,确保每个设备的私密信息只能由其对应的硬件访问。
  2. 在 BL31 阶段,系统会验证 BL2 和更高级别的引导程序,确保它们来自可信源,没有遭到恶意篡改。通常会通过验证签名来完成这一过程,使用 RSA、ECC 等公钥算法验证文件的完整性。
  3. 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阶段:
  1. 该完整的U-Boot引导程序就会根据boot.img镜像中的设备树文件完成uboot阶段所有的硬件初始化工作,比如RAM、系统时钟、网口、mmc设备、USB设备等等。
  2. 根据bootcmd环境变量中的命令参数去对应的外部存储器中将linux内核镜像加载到RAM指定地址空间中。
  3. bootargs环境变量中的内容以参数的形式传递给linux内核,然后跳转到linux内核入口地址,将控制权转交给linux内核。
  4. 现在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 返回给应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值