概述
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的启动过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复