atf的启动过程根据armv8的运行模式(aarch32/aarch64)会有所不同,但基本一致。
在aarch32中是不会去加载bl31而是将el3或者monitor模式的运行代码保存在bl32中执行。在aarch64中,atf的完整启动流程如图下所示。
aarch64模式的atf启动流程
在上述启动过程中,从一个镜像跳转到另外一个镜像文件执行的方式各不相同,以下为镜像跳转的过程和方式说明。
概要流程
bl1跳转到bl2执行在bl1完成了将bl2镜像文件加载到ram中的操作、中断向量表的设定以及其他cpu相关设定后,bl1_main函数会解析出bl2镜像文件的描述信息,获取入口地址,并设定下一个阶段的cpu上下文。这些操作完成之后,调用el3_exit函数来实现bl1到bl2的跳转,进入bl2中开始执行。
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中去执行。
bl31跳转到bl32执行在bl31中会执行runtime_service_inti函数,该函数会调用注册到el3中所有服务的初始化函数,其中有一个服务项就是tee服务,该服务项的初始化函数会将teeos的初始化函数赋值给bl32_init变量,当所有服务项执行完初始化后,在bl31中会调用bl32_init执行的函数来跳转到tee os中并开始执行tee
os的启动。
bl31跳转到bl33执行当tee-os镜像启动完成后会触发一个id为teesmc_opteed_return_entry_done的安全监控模式调用,该调用是用来告知el3 tee os镜像已经完成了初始化,然后将cpu的状态恢复到bl31_init的位置继续执行。
bl31通过遍历在bl2中记录的所有镜像信息的链表来找到需要执行的bl33的镜像。然后通过获取到bl33镜像的信息,设定下一个阶段的cpu上下文,退出el3后进入到bl33镜像中开始执行。
苹果新专利揭示其眼动追踪系统
博通CEO Hock Tan资本操盘手惊现,“霸王硬上弓”鲸吞高通
工控系统的电源抗干扰技术分析
超快速多体系统量子模拟,旧方法迎来新的转折
华润微电子:目前对2021年全年行情的看法?
ATF的启动过程介绍
芯片公司marvell灾难性裁员千人
比亚迪推出IGBT4.0引领车规级功率半导体发展
剖析平板电脑生存现状 产业聚首共谋发展大计
视频矩阵切换原理及技术详解
华为P10最新消息:荣耀9已正式发布,华为P10一夜之间直降500元,买荣耀9还是华为P10?
浅谈AVALON总线的应用及要求
上海消保委点名批评微信
谷景8mH min 磁环电感应用于大功率电源中
压力传感器在使用过程中该如何防护?
永磁同步电机工作原理是什么
ARM公司正式加入了O-RAN联盟将全力开阔5G基础设施市场
中国加密货币的产出与抵制
泰克全新4系列B MSO混合信号示波器介绍
2021的科技卦象·兑·一场“双碳”催化雨