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的启动过程的主要内容,如果未能解决你的问题,请参考以下文章

OP-TEE 简易驱动编写:启动TZPC与TZPCDEP

OP-TEE 简易驱动编写:启动TZPC与TZPCDEP

Linux学习笔记之Linux系统启动过程

FSL i.MX6 UltraLite EVK OP-TEE的移植

FSL i.MX6 UltraLite EVK OP-TEE的移植

springBoot学习笔记源码分析之springApplication初始化过程