我是靠谱客的博主 善良小蝴蝶,最近开发中收集的这篇文章主要介绍OP-TEE笔记之TEECORE的启动过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

TEECORE的启动代码在路径/optee_os/core/arch/arm/tee/下的init.c,我们来分段解读以下:

#define TEE_MON_MAX_NUM_ARGS
8

首先定义了一个宏来设定TEE的最大参数个数

extern
__initcall_start, __initcall_end;

外部链接的数据类型initcall_t的两个变量指针,用于指向初始化调用的起始地址和终止地址。

static void call_initcalls(void)
{
initcall_t *call;
for (call = &__initcall_start; call < &__initcall_end; call++) {
TEE_Result ret;
ret = (*call)();
if (ret != TEE_SUCCESS) {
EMSG("Initial call 0x%08" PRIxVA " failed",
(vaddr_t)call);
}
}
}

使用此函数对内核调用进行初始化,若初始化失败,则返回出错信息,并指出出错的内核调用地址,若调用初始化成功则返回TEE__SUCCESS。

TEE_Result init_teecore(void)
{
static int is_first = 1;
/* (DEBUG) for inits at 1st TEE service: when UART is setup */
if (!is_first)
return TEE_SUCCESS;
is_first = 0;

设置标志位is_first标识TEECORE是否被初始化过,即此方法只能执行一次。


tee_svc_uref_base = CFG_TEE_LOAD_ADDR;

将TEE的所在地址赋值给tee_svc_uref_base


/* init support for futur mapping of TAs */
tee_mmu_kmap_init();
teecore_init_pub_ram();
/* time initialization */
time_source_init();
/* call pre-define initcall routines */
call_initcalls();
IMSG("teecore inits done");
return TEE_SUCCESS;
}

最后

以上就是善良小蝴蝶为你收集整理的OP-TEE笔记之TEECORE的启动过程的全部内容,希望文章能够帮你解决OP-TEE笔记之TEECORE的启动过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(27)

评论列表共有 0 条评论

立即
投稿
返回
顶部