当前位置: 首页 > news >正文

ATF启动(一):整体启动流程

前言

关于ATF启动这里先整个宏观的概念。

这个blog讲的很好,就不重复写了,自己写还写不到这么清晰,图页很漂亮。

原文链接:https://www.cnblogs.com/arnoldlu/p/14175126.html

启动正文

下图划分成不同EL,分别描述BL1、BL2、BL31、BL32、BL33启动流程,以及PSCI、SP处理流程。

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

restart–冷启动
reset–热启动

ATF冷启动实现分为5个步骤:

  • BL1 - AP Trusted ROM,一般为BootRom。
  • BL2 - Trusted Boot Firmware,一般为Trusted Bootloader。
  • BL31 - EL3 Runtime Firmware,一般为SML,管理SMC执行处理和中断,运行在secure monitor中。
  • BL32 - Secure-EL1 Payload,一般为TEE OS Image。
  • BL33 - Non-Trusted Firmware,一般为uboot、linux kernel。

ATF输出BL1、BL2、BL31,提供BL32和BL33接口。
(我想提供的接口就是BL32和BL33的镜像可以是指定的,atf其实是一个启动框架,这其中包含的五个步骤,每个步骤你想要的内容,可以由厂商自己定义。)

启动流程如下:

在这里插入图片描述

1.1 BL1

BL1位于ROM中,在EL3下从reset vector处开始运行。(bootrom就是芯片上电运行的(chip-rom的作用就是跳转到bootrom))

BL1做的工作主要有:

  • 决定启动路径:冷启动还是热启动。
  • 架构初始化:异常向量、CPU复位处理函数配置、控制寄存器设置(SCRLR_EL3/SCR_EL3/CPTR_EL3/DAIF)
  • 平台初始化:使能Trusted Watchdog、初始化控制台、配置硬件一致性互联、配置MMU、初始化相关存储设备。
  • 固件更新处理
  • BL2镜像加载和执行:
    • BL1输出“Booting Trusted Firmware"。
    • BL1加载BL2到SRAM;如果SRAM不够或者BL2镜像错误,输出“Failed to load BL2 firmware.”。
    • BL1切换到Secure EL1并将执行权交给BL2.

1.2 BL2

BL2位于SRAM中,运行在Secure EL1主要工作有:

  • 架构初始化:EL1/EL0使能浮点单元和ASMID。
  • 平台初始化:控制台初始化、相关存储设备初始化、MMU、相关设备安全配置、
  • SCP_BL2:系统控制核镜像加载,单独核处理系统功耗、时钟、复位等控制。
  • 加载BL31镜像:BL2将控制权交给BL1;BL1关闭MMU并关cache;BL1将控制权交给BL31。
  • 加载BL32镜像:BL32运行在安全世界,BL2依赖BL31将控制权交给BL32。SPSR通过Secure-EL1 Payload Dispatcher进行初始化。
  • 加载BL33镜像:BL2依赖BL31将控制权交给BL33。

1.3 BL31

BL31位于SRAM中,EL3模式。除了做架构初始化和平台初始化外,还做了如下工作:

  • PSCI服务初始化,后续提供CPU功耗管理操作。
  • BL32镜像运行初始化,处于Secure EL1模式。
  • 初始化非安全EL2或EL1,跳转到BL33执行。
  • 负责安全非安全世界切换。
  • 进行安全服务请求的分发。

在这里插入图片描述

这两幅图真的不错,棒。

这一步对宏观的步骤有所认识,下一步对每个步骤的细节进行认识。

相关文章:

  • 25. Python 字符串的切片方法
  • 接口测试自动化脚本框架4
  • HadoopSpark
  • 51单片机4位抢答器_倒计时可调仿真设计
  • 设计模式之模板方法模式的理解
  • 小型功率放大器的设计与制作——功率放大器电路总结
  • 接口测试自动化脚本框架5
  • Elasticsearch ik分词器的安装和使用
  • 【Spring Authorization Server 系列】(四)JWS 的签名方式
  • Vue中的循环渲染v-for
  • openresty + prometheus + grafana 搭建。监控网络请求
  • 复盘:统计学派(频率学派)跟贝叶斯学派(贝叶斯公式、朴素贝叶斯)的定义和区别,奥卡姆剃刀和最大似然跟谁更接近
  • Java数据类型与变量
  • od笔试记录
  • Code Review
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CSS魔法堂:Absolute Positioning就这个样
  • ES10 特性的完整指南
  • IP路由与转发
  • Less 日常用法
  • MySQL几个简单SQL的优化
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • python3 使用 asyncio 代替线程
  • uva 10370 Above Average
  • 从0到1:PostCSS 插件开发最佳实践
  • 和 || 运算
  • 简单易用的leetcode开发测试工具(npm)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 算法之不定期更新(一)(2018-04-12)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (6)STL算法之转换
  • (理论篇)httpmoudle和httphandler一览
  • (十)T检验-第一部分
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)http-server应用
  • (转)linux 命令大全
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)母版页和相对路径
  • ***监测系统的构建(chkrootkit )
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core Web APi类库如何内嵌运行?
  • .NET DataGridView数据绑定说明
  • .net(C#)中String.Format如何使用
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET中 MVC 工厂模式浅析
  • .NET中统一的存储过程调用方法(收藏)
  • @JoinTable会自动删除关联表的数据
  • @基于大模型的旅游路线推荐方案
  • @取消转义