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

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

3天内不再提示

ATF的启动过程介绍

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

ATF的启动过程根据ARMv8的运行模式(AArch32/AArch64)会有所不同,但基本一致。

在AArch32中是不会去加载bl31而是将EL3或者Monitor模式的运行代码保存在bl32中执行。在AArch64中,ATF的完整启动流程如图下所示。

图片AArch64模式的ATF启动流程

在上述启动过程中,从一个镜像跳转到另外一个镜像文件执行的方式各不相同,以下为镜像跳转的过程和方式说明。

概要流程

  1. bl1跳转到bl2执行

在bl1完成了将bl2镜像文件加载到RAM中的操作、中断向量表的设定以及其他CPU相关设定后,bl1_main函数会解析出bl2镜像文件的描述信息,获取入口地址,并设定下一个阶段的cpu上下文。这些操作完成之后,调用el3_exit函数来实现bl1到bl2的跳转,进入bl2中开始执行。

  1. bl2跳转到bl31执行

在bl2中将会加载bl31、bl32、bl33的镜像文件到对应权限的内存中,并将该三个镜像文件的描述信息组成一个链表保存起来,以备bl31启动bl32和bl33使用。在AArch64中,bl31为EL3的执行软件,其运行时的主要功能是对安全监控模式调用(smc)指令和中断处理,运行在ARM的Monitor模式中。

bl32一般为TEE OS镜像文件,本章以OP-TEE为例进行说明。

bl33为正常世界状态的镜像文件,例如uboot、EKD2等。当前该部分为BootLoader部分的镜像文件,再由BootLoader来启动Linux内核镜像。

从bl2跳转到bl31是通过带入bl31的入口点信息作为参数,然后调用安全监控模式调用指令,触发在bl1中设定的安全监控模式调用请求,该请求处理完成后会将中央处理器的执行权限交给bl31,并跳转到bl31中去执行。

  1. bl31跳转到bl32执行

在bl31中会执行runtime_service_inti函数,该函数会调用注册到EL3中所有服务的初始化函数,其中有一个服务项就是TEE服务,该服务项的初始化函数会将TEEOS的初始化函数赋值给bl32_init变量,当所有服务项执行完初始化后,在bl31中会调用bl32_init执行的函数来跳转到TEE OS中并开始执行TEE
OS的启动。

  1. bl31跳转到bl33执行

当TEE-OS镜像启动完成后会触发一个ID为TEESMC_OPTEED_RETURN_ENTRY_DONE的安全监控模式调用,该调用是用来告知EL3 TEE OS镜像已经完成了初始化,然后将CPU的状态恢复到bl31_init的位置继续执行。

bl31通过遍历在bl2中记录的所有镜像信息的链表来找到需要执行的bl33的镜像。然后通过获取到bl33镜像的信息,设定下一个阶段的CPU上下文,退出el3后进入到bl33镜像中开始执行。

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

    关注

    134

    文章

    9091

    浏览量

    367500
  • 内存
    +关注

    关注

    8

    文章

    3024

    浏览量

    74034
  • 镜像
    +关注

    关注

    0

    文章

    164

    浏览量

    10715
收藏 人收藏

    评论

    相关推荐

    详解STM32启动过程

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    发表于 11-14 11:24 1853次阅读

    专家揭秘:STM32启动过程全解

    电子发烧友网核心提示: 本文主要阐述了STM32启动过程全面解析,包括启动过程介绍启动代码的陈列以及深入解析。 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Corte
    发表于 09-10 08:50 5.3w次阅读
    专家揭秘:STM32<b class='flag-5'>启动过程</b>全解

    STM32启动过程

    一、STM32 启动过程通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟
    发表于 08-11 06:02

    介绍一下avr芯片的启动过程

    嵌入式程序的启动代码,就是startup代码,一般用汇编编写,代码效率高,但和C++代码融合起来不太方便,例如,想直接在cpp文件定义中断函数就需要asm语句。 下面介绍一下avr芯片的启动过程:avr的
    发表于 02-28 12:29

    系统启动过程

    系统启动过程系统启动过程主要由一下几步组成(以硬盘启动为例):1. 开机2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:00003. 将硬盘第一个
    发表于 10-11 12:17 2259次阅读

    嵌入式uCLinux内核启动过程分析

    分析uCLinux的启动过程,可以加快系统启动速度、正确建立应用环境。本文要研究的就是uCLinux操作系统内核的启动过程
    发表于 08-15 16:51 789次阅读

    IC启动过程及Vcc电压波形的认知

    IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知
    发表于 12-22 14:46 10次下载

    Windows XP 启动过程详解

    我们每天都在和 Windows 打交道,很多人可能每天都要面对多次 Windows 的启动过程,可是您知道在 Windows 的启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的
    发表于 11-10 18:24 11次下载

    国产300MW机组中压缸启动的特点及启动过程

    机组采用合理启动方式对减小启动过程中的寿命损耗、缩短机组启动时间尤为重要。介绍了国产300 MW机组中压缸启动的特点及
    发表于 10-14 10:40 18次下载
    国产300MW机组中压缸<b class='flag-5'>启动</b>的特点及<b class='flag-5'>启动过程</b>

    详解bootloader的执行流程与ARM Linux启动过程分析

    RM Linux启动过程分析是本文要介绍的内容,嵌入式 Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。对于不同体系结构的处理器来说Linux的启动过程也有所不同。 本文以
    的头像 发表于 12-21 09:24 1w次阅读
    详解bootloader的执行流程与ARM Linux<b class='flag-5'>启动过程</b>分析

    STM32上电后启动过程

    STM32上电后启动过程
    发表于 11-15 18:21 16次下载
    STM32上电后<b class='flag-5'>启动过程</b>

    stm32启动过程

    一次性搞定stm32启动模式与启动过程一、stm32启动模式二、从flash启动过程2.1 数据在堆栈中存储方式2.2 stm32的正常启动过程
    发表于 12-16 16:57 8次下载
    stm32<b class='flag-5'>启动过程</b>

    RL78启动过程详解

    RL78启动过程详解
    的头像 发表于 09-28 16:39 1458次阅读
    RL78<b class='flag-5'>启动过程</b>详解

    logd的启动过程和内容

    logd作为native service,系统启动过程通过读取rc文件来启动,相关的属性定义在如下logd.rc文件中。 2.2.1 logd启动过程 logd启动后会存在三个用来服务
    的头像 发表于 11-23 16:54 859次阅读
    logd的<b class='flag-5'>启动过程</b>和内容

    stm32启动过程详解

    启动过程。本文将详细介绍STM32的启动过程。 一、复位威廉希尔官方网站 对于STM32微控制器来说,复位是启动的第一步。任何系统都需要一个稳定的状态来启动
    的头像 发表于 12-08 15:47 1650次阅读