ATF(EL3级别运行环境初始化)

本文介绍了aarch64架构下EL3级别的运行环境初始化过程,包括字节顺序配置、引导类型检测、内存初始化等关键步骤。通过宏指令实现不同场景下的灵活配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

El3 级别运行环境初始化定义在 include/commom/aarch64/el3_common_macros.S文件中
    .macro el3_entrypoint_common                    \
        _set_endian, _warm_boot_mailbox, _secondary_cold_boot,  \
        _init_memory, _init_c_runtime, _exception_vectors

    .if \_set_endian
        mrs x0, sctlr_el3
        bic x0, x0, #SCTLR_EE_BIT
        msr sctlr_el3, x0
        isb
    .endif /* _set_endian */

    .if \_warm_boot_mailbox
        bl  plat_get_my_entrypoint
        cbz x0, do_cold_boot
        br  x0

    do_cold_boot:
    .endif /* _warm_boot_mailbox */

    .if \_secondary_cold_boot
        bl  plat_is_my_cpu_primary
        cbnz    w0, do_primary_cold_boot
    secondary_panic:
        b   secondary_panic

    do_primary_cold_boot:
    .endif 
    bl  reset_handler

    el3_arch_init_common \_exception_vectors

    .if \_init_memory
        bl  platform_mem_init
    .endif /* _init_memory */
    .if \_init_c_runtime

这是在冷启动过程中需要执行的超级动作或在EL3中启动热启动。该代码由BL1和BL31共享。
该宏将始终执行重置处理,架构初始化和堆栈设置。其余的操作是可选的,因为它们可能不是需要,这取决于调用此宏的上下文。这是为什么这个宏被参数化了每个参数允许启用/禁用一些行动。

  • _set_endian:

宏需要配置数据访问的字节顺序。

  • _warm_boot_mailbox:

宏需要检测引导类型(冷/暖)。该检测是基于平台entrypoint地址:如果为零那么它是一个冷启动,否则它是一个温暖的启动。在后一种情况下,这个宏跳到平台entrypoint地址。

  • _secondary_cold_boot:

宏是否需要识别正在调用它的CPU:primaryCPU或二级CPU。主CPU将被允许进行平台初始化,而次级将被放在一个同时平台特定的状态。如果主叫方知道这个宏只会被主CPU调用那么此参数可以定义为0以跳过此步骤。

  • _init_memory:

宏需要初始化内存。

  • _init_c_runtime:

宏是否需要初始化C运行时环境。

  • _exception_vectors:

异常向量的地址在VBAR_EL3寄存器中编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值