0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ATF中bl32的启动方法

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-11-07 16:32 次阅读

ATF中bl32的启动

bl31中的runtime_svc_init函数会初始化OP-TEE对应的服务,通过调用该服务项的初始化函数来完成OP-TEE的启动。对于OP-TEE的服务项会通过DECLARE_RT_SVC宏在编译时被存放到rt_svc_des段中。

该段中的init成员会被初始化成opteed_setup函数,由此开始进入到OP-TEE OS的启动。整个流程如图下所示。

图片
bl32执行流程

1. opteed_setup函数

该函数是ATF启动OP-TEE的入口函数,该函数会

  • • 查找到OP-TEE镜像的信息
  • • 检查OP-TEE的入口函数指针是否有效、
  • • 设置OP-TEE运行的上下文,
  • • 然后调用OP-TEE的入口函数,
  • • 开始执行OP-TEE的启动。

该函数的内容如下:

int32_t opteed_setup(void)

        {

            entry_point_info_t *optee_ep_info;

            uint32_t linear_id;

            linear_id = plat_my_core_pos();  //获取当前core的ID

            /* 获取bl32(OP-TEE)镜像的描述信息 */

            optee_ep_info = bl31_plat_get_next_image_ep_info(SECURE);

            if (! optee_ep_info) {

                WARN("No OPTEE provided by BL2 boot loader, Booting device"

                    " without OPTEE initialization. SMC's destined for OPTEE"

                    " will return SMC_UNKn");

                return 1;

            }

            /* 检查OP-TEE镜像指定的PC地址是否有效 */

            if (! optee_ep_info- >pc)

                return 1;

            opteed_rw = OPTEE_AARCH64;

            /* 初始化OP-TEE运行时CPU的smc上下文 */

            opteed_init_optee_ep_state(optee_ep_info,

                        opteed_rw,

                        optee_ep_info- >pc,

                        &opteed_sp_context[linear_id]);

            /* 使用opteed_init初始化bl32_init变量,以备在bl31中调用 */

            bl31_register_bl32_init(&opteed_init);

            return 0;

        }

2. opteed_init函数

该函数的地址会被赋值给bl32_init变量,在bl31_main函数中会被调用,主要用来完成启动OP-TEE的设置。该函数内容如下:

static int32_t opteed_init(void)

        {

            uint32_t linear_id = plat_my_core_pos();

            //获取core的执行上下文变量

            optee_context_t *optee_ctx = &opteed_sp_context[linear_id];

            entry_point_info_t *optee_entry_point;

            uint64_t rc;

            /* 获取OPTEE image的信息 */

            optee_entry_point = bl31_plat_get_next_image_ep_info(SECURE);

            assert(optee_entry_point);

            /* 使用optee image的entry point信息初始化CPU的上下文 */

            cm_init_my_context(optee_entry_point);

            /* 开始设置CPU参数,最终会调用opteed_enter_sp函数执行跳转到OP-TEE的操作 */

            rc = opteed_synchronous_sp_entry(optee_ctx);

            assert(rc ! = 0);

            return rc;

        }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62593
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32868
收藏 人收藏

    评论

    相关推荐

    关于TF-A(ATF)固件的基本知识详解

    ATF定义的启动模型ATF将镜像进行了划分,BL1 BL2属于启动引导镜像,
    发表于 06-15 16:57

    如何使用STM32MP157F-EV1来尝试实施安全启动链?

    你好ST社区, 对于一个项目,我们使用 STM32MP157F-EV1 来尝试实施安全启动链。为此,我们必须生成一个包含所有必需证书的 FIP 包。 在ST wiki中提出了两种方法: 一个
    发表于 12-27 07:56

    如何在BL2配置DDR init?

    :2022 年 10 月 25 日 18:55:21错误:BL2:加载图像失败(-2)身份验证失败我认为我们必须更改 atf\plat\nxp\soc-ls1046\ls1046ardb\ddr_init.c 的配置,但我不知
    发表于 03-24 08:50

    S32g如何在ATF启用安全启动

    /cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release /bl2/bl2_main.o:在函数“bl2_main”
    发表于 04-03 07:12

    用于1028A系列的Yocto Layerscape安全启动是怎么操作的?

    我目前正在尝试熟悉 Layerscape 处理器上的安全启动实现。最近几天我一直在阅读文档但我仍然不清楚一切是如何工作的。 据我了解,这些是启动阶段: BL1:BootROM 代码 BL
    发表于 05-31 08:19

    Yocto LS1028定制板用BL2,为了使DDR工作是否需要编辑ddr_init.c的任何其他函数/值或ATF的任何其他文件??

    的下一步是创建一个自定义 BL2,用于启动基于 kirkstone 版本的 yocto 编译。 为此,我修补了 atf repo 的 ddr_init.c 文件,这个“ddr_cfg_regs”结构
    发表于 06-01 09:03

    TF-A的不同启动阶段有哪些

    不同的启动阶段,按照链式结构依次启动ATF 代码启动流程如图所示: 当芯片复位以后首先运行 bl1 代码,
    的头像 发表于 09-11 16:54 921次阅读
    TF-A的不同<b class='flag-5'>启动</b>阶段有哪些

    ATF启动流程介绍

    一、BL32(TEE OS)的准备 ATF启动流程 ATF流程 ATF启动实现分为5个步骤:
    的头像 发表于 11-02 17:51 1251次阅读
    <b class='flag-5'>ATF</b><b class='flag-5'>启动</b>流程介绍

    启动(Cold boot)流程及阶段划分

    输出BL1、BL2、BL31,提供BL32BL33接口。 (我想提供的接口就是BL32
    的头像 发表于 11-07 15:17 2355次阅读
    冷<b class='flag-5'>启动</b>(Cold boot)流程及阶段划分

    ATF启动过程介绍

    ATF启动过程根据ARMv8的运行模式(AArch32/AArch64)会有所不同,但基本一致。 在AArch32是不会去加载bl31而是将EL3或者Monitor模式的运行代码保
    的头像 发表于 11-07 15:48 1285次阅读
    <b class='flag-5'>ATF</b>的<b class='flag-5'>启动</b>过程介绍

    code层面 ATFbl1的启动

    系统上电之后首先会运行ChipRom,之后会跳转到ATFbl1继续执行。bl1主要初始化CPU、设定异常向量、将bl2的镜像加载到安全R
    的头像 发表于 11-07 15:53 1075次阅读
    code层面 <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>1的<b class='flag-5'>启动</b>

    ATFbl2的启动

    bl2镜像将为后续镜像的加载执行相关的初始化操作,主要是内存、MMU、串口以及EL3软件运行环境的设置,并且加载bl3x的镜像到内存。 通过查看bl2.ld.S文件可发现,
    的头像 发表于 11-07 15:59 814次阅读
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>2的<b class='flag-5'>启动</b>

    ATF如何用函数完成bl2的启动

    bl31加载到内存后会触发安全监控模式调用(smc)将CPU权限转交给bl31。 该函数的主要内容和相关注释如下: ** void bl2_main ( void
    的头像 发表于 11-07 16:04 702次阅读

    ATFbl31的启动

    bl2触发安全监控模式调用后会跳转到bl31执行,bl31最主要的作用是 建立EL3运行态的软件配置 , 在该阶段会完成各种类型的安全
    的头像 发表于 11-07 16:13 1181次阅读
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>31的<b class='flag-5'>启动</b>

    armv8 u-boot的启动介绍

    先看arm官网提供的一张图: 上图详细概括了arm官方推荐的armv8的启动层次结构: 官方将启动分为了BL1,BL2,BL31,
    的头像 发表于 12-07 11:09 2192次阅读
    armv8 u-boot的<b class='flag-5'>启动</b>介绍