ATF中bl32的启动
bl31中的runtime_svc_init函数会初始化OP-TEE对应的服务,通过调用该服务项的初始化函数来完成OP-TEE的启动。对于OP-TEE的服务项会通过DECLARE_RT_SVC宏在编译时被存放到rt_svc_des段中。
该段中的init成员会被初始化成opteed_setup函数,由此开始进入到OP-TEE OS的启动。整个流程如图下所示。
bl32执行流程
1. opteed_setup函数
该函数是ATF启动OP-TEE的入口函数,该函数会
- • 查找到OP-TEE镜像的信息、
- • 检查OP-TEE的入口函数指针是否有效、
- • 设置OP-TEE运行的上下文,
- • 然后调用OP-TEE的入口函数,
- • 开始执行OP-TEE的启动。
该函数的内容如下:
int32_t opteed_setup(void)
{
entry_point_info_t *optee_ep_info;
uint32_t linear_id;
linear_id = plat_my_core_pos(); //获取当前core的ID
/* 获取bl32(OP-TEE)镜像的描述信息 */
optee_ep_info = bl31_plat_get_next_image_ep_info(SECURE);
if (! optee_ep_info) {
WARN("No OPTEE provided by BL2 boot loader, Booting device"
" without OPTEE initialization. SMC's destined for OPTEE"
" will return SMC_UNKn");
return 1;
}
/* 检查OP-TEE镜像指定的PC地址是否有效 */
if (! optee_ep_info- >pc)
return 1;
opteed_rw = OPTEE_AARCH64;
/* 初始化OP-TEE运行时CPU的smc上下文 */
opteed_init_optee_ep_state(optee_ep_info,
opteed_rw,
optee_ep_info- >pc,
&opteed_sp_context[linear_id]);
/* 使用opteed_init初始化bl32_init变量,以备在bl31中调用 */
bl31_register_bl32_init(&opteed_init);
return 0;
}
2. opteed_init函数
该函数的地址会被赋值给bl32_init变量,在bl31_main函数中会被调用,主要用来完成启动OP-TEE的设置。该函数内容如下:
static int32_t opteed_init(void)
{
uint32_t linear_id = plat_my_core_pos();
//获取core的执行上下文变量
optee_context_t *optee_ctx = &opteed_sp_context[linear_id];
entry_point_info_t *optee_entry_point;
uint64_t rc;
/* 获取OPTEE image的信息 */
optee_entry_point = bl31_plat_get_next_image_ep_info(SECURE);
assert(optee_entry_point);
/* 使用optee image的entry point信息初始化CPU的上下文 */
cm_init_my_context(optee_entry_point);
/* 开始设置CPU参数,最终会调用opteed_enter_sp函数执行跳转到OP-TEE的操作 */
rc = opteed_synchronous_sp_entry(optee_ctx);
assert(rc ! = 0);
return rc;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4331浏览量
62593 -
编译
+关注
关注
0文章
657浏览量
32868
发布评论请先 登录
相关推荐
如何使用STM32MP157F-EV1来尝试实施安全启动链?
你好ST社区, 对于一个项目,我们使用 STM32MP157F-EV1 来尝试实施安全启动链。为此,我们必须生成一个包含所有必需证书的 FIP 包。 在ST wiki中提出了两种方法: 一个
发表于 12-27 07:56
如何在BL2中配置DDR init?
:2022 年 10 月 25 日 18:55:21错误:BL2:加载图像失败(-2)身份验证失败我认为我们必须更改 atf\plat\nxp\soc-ls1046\ls1046ardb\ddr_init.c 中的配置,但我不知
发表于 03-24 08:50
S32g如何在ATF中启用安全启动?
/cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release /bl2/bl2_main.o:在函数“bl2_main”
发表于 04-03 07:12
用于1028A系列的Yocto Layerscape安全启动是怎么操作的?
我目前正在尝试熟悉 Layerscape 处理器上的安全启动实现。最近几天我一直在阅读文档但我仍然不清楚一切是如何工作的。
据我了解,这些是启动阶段:
BL1:BootROM 代码
BL
发表于 05-31 08:19
Yocto LS1028定制板用BL2,为了使DDR工作是否需要编辑ddr_init.c中的任何其他函数/值或ATF源中的任何其他文件??
的下一步是创建一个自定义 BL2,用于启动基于 kirkstone 版本的 yocto 编译。
为此,我修补了 atf repo 的 ddr_init.c 文件,这个“ddr_cfg_regs”结构
发表于 06-01 09:03
ATF的启动过程介绍
ATF的启动过程根据ARMv8的运行模式(AArch32/AArch64)会有所不同,但基本一致。 在AArch32中是不会去加载bl31而是将EL3或者Monitor模式的运行代码保
ATF中如何用函数完成bl2的启动
bl31加载到内存中后会触发安全监控模式调用(smc)将CPU权限转交给bl31。 该函数的主要内容和相关注释如下: ** void bl2_main ( void
评论