TF-A中入口函数的第一个宏`el3_entrypoint_common`详细分析之一(TF-A入口分析一)


前言

TF-A (Trusted Firmware-A) 是用于支持 ARMv8-A 架构处理器的可信启动固件,用于实现安全启动和运行时安全服务。它按照不同的阶段(BL1、BL2、BL3)对固件启动过程进行了分层。在 TF-A源码中,bl1_entrypoint 函数是 BL1 (Boot Loader Stage 1) 阶段的入口点。

当系统上电或重置时,处理器会从一特定地址开始执行代码(与硬件相关)。在这个阶段,处理器处于安全模式,TF-A 的 BL1 阶段代码被加载到这个地址并开始执行。bl1_entrypoint 函数作为 BL1 阶段的入口点,负责初始化处理器、内存等硬件资源,以及加载 BL2 (Boot Loader Stage 2)阶段的代码。

可以简单理解为:当系统运行到 “bl1_entrypoint” 函数时,已经完成了对硬件平台的初始化,并且系统与硬件平台相关的差异已经抚平,准备好加载并执行 TF-A代码。

el3_entrypoint_common宏是bl1_entrypoint函数调用的第一个宏。这个宏对于整个系统的启动,起着承上启下的作用,非常重要。由于这个宏很复杂也很庞大。所以专门用两篇博文来介绍,这里是其中的第一篇。

我们调试的tf-a源码的版本基于v2.8,为了使用qemu调试TF-A,选择fvp模拟器作为硬件平台。编译指令如下:
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=fvp CPU=cortex-a57 TARGET=all DEBUG=1

1、el3_entrypoint_common

.macro el3_entrypoint_common					\
	_init_sctlr, _warm_boot_mailbox, _secondary_cold_boot,	\
	_init_memory, _init_c_runtime, _exception_vectors,	\
	_pie_fixup_size

el3_entrypoint_common 宏定义了在 EL3(最高安全级别-安全监视器级别)执行代码的通用入口点,并且系统在到达 EL3 时会立即跳到这里。该宏定义了一个集合,其中包含在 EL3 中冷启动或热启动期间需要执行的所有操作。其目的是统一管理系统的启动,并且允许在不同的平台上使用相同的代码,从而简化开发过程。

EL3 是 ARMv8 架构的最高特权级别,通常用于处理安全相关的任务,如引导程序和可信固件。

这个宏有三个必需的操作:执行复位处理、架构初始化和堆栈设置。其余操作则是可选的,可以由参数设置允许"启用"/"禁用"某些操作。
里面的参数说明:

  • _init_sctlr:指定是否初始化寄存器SCTLR(System Control Register)。
  • _warm_boot_mailbox: 冷启动和热启动分支处理,PROGRAMMABLE_RESET_ADDRESS 宏表示系统的复位地址,为0可能是冷启动(运行程序中会进一步判断),不为0则是热启动。
  • _secondary_cold_boot:指定是否为单个 CPU 进行冷启动,如果是 COLD_BOOT_SINGLE_CPU 则表示是单个 CPU 进行冷启动。
  • _warm_boot_mailbox_init_memory:指定是否初始化内存。
  • _init_c_runtime:指定是否初始化 C 运行时。
  • _exception_vectors:指定异常向量的入口点,在本例中是 bl1_vector_table
  • _pie_fixup_size:指定 PIE 修复大小,在本例中是 0。

_pie_fixup_size=0,说明程序中没有使用额外的指令来确保代码可以正确地定位,那么程序的加载和执行将遵循传统方式,每个代码段都有一个确定的地址。

源码中宏的执行:

func bl1_entrypoint
	el3_entrypoint_common					\
		_init_sctlr=1					\
		_warm_boot_mailbox=!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值