OP-TEE笔记之TEECORE的启动过程
Posted Q7318
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的启动过程的主要内容,如果未能解决你的问题,请参考以下文章
FSL i.MX6 UltraLite EVK OP-TEE的移植