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

TF-A(Trusted Firmware-A)及其启动流程详解:以stm32MP1平台为例

0 参考资料

stm32官网 wiki
https://www.trustedfirmware.org/
https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
Trusted Firmware-A documentation
ARM Power State Coordination Interface
SMC Calling Convention (SMCCC)
Arm System Control and Management Interface
Trusted Firmware-A Firmware Design
TF-A documentation AArch64 BL31 chapter

1 什么是TF-A?

1.1 简介

TF-A全称是Trusted Firmware-A,也就是可信固件-A,-A表示针对Cortex-A内核处理器,-M表示针对Cortex-M内核处理器。TF-A最初设计用于Armv8-A内核,ST将TF-A改造以支持其发布的基于Cortex-A7内核的stm32MP1系列处理器,在常见的基于Corte-A7的imx6ull处理器上是没有TF-A这一功能的。
以下是包含TF-A功能的stm32MP1的软件框架:
在这里插入图片描述

1.2 功能

现如今很多设备都支持联网、在线支付、语音、视频等敏感操作,为了加强设备的安全性,提出了许多保护措施。TF-A就是保护设备启动过程,通过各种鉴权,保证各个设备启动过程中的每个阶段固件都是可信赖的,避免被修改导致信息泄露等安全问题。常见的应用场景如下:
(1)智能物联网设备:保护数据安全,防止恶意攻击。
(2)移动设备:确保操作系统和关键应用的安全启动。
(3)服务器平台:保障数据中心的数据安全和可靠性。
(4)嵌入式系统:增强对敏感信息处理的安全控制。
传统的不带TF-A功能处理器的Linux系统启动流程为:内部bootloader->uboot->kernel->rootfs,整个过程没有安全校验的过程。TF-A被用于引导链上的第一阶段引导加载程序(FSBL),可以对uboot、kernel进行校验,如果还要使用 TEE OS(Trusted Execution Environment, TEE),那么 TF-A 还要完成对TEE OS 的校验。
TF-A的代码也是开源的,遵循BSD-3-Clause许可协议。可以在https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git查看源码和实现文档。
除了对设备各阶段镜像进行安全校验,TF-A还实现了多种ARM接口标准:
(1)管理处理器和系统组件的电源和性能状态(PSCI)。
(2)定义在不同安全状态之间调用安全监控器的方法(SMC)。
(3)提供跨平台的系统控制和管理服务的通讯协议(SCMI)。

2 TF-A启动流程

2.1 TF-A启动步骤

TF-A分为几个二进制文件,每个文件都有自己专属功能。
对于32位ARM处理器(AArch32),可信引导(启动)按顺序分为4个阶段:
(1)Boot loader stage 1 (BL1) application processor trusted ROM。引导加载阶段1(BL1)可信内部ROM程序。
(2)Boot loader stage 2 (BL2) trusted boot firmware。引导加载阶段2(BL2)受信任的引导固件。
(3)Boot loader stage 3-2 (BL32) trusted runtime firmware。引导加载阶段3-2(BL3)受信任的Runtime固件。
(4)Boot loader stage 3-3 (BL33) non-trusted firmware。引导加载阶段3-3(BL33)不受信任的固件。
对于64位ARM处理器(AArch64),可信引导(启动)按顺序分为5个阶段:
(1)Boot loader stage 1 (BL1) application processor trusted ROM。引导加载阶段1可信内部ROM程序。
(2)Boot loader stage 2 (BL2) trusted boot firmware。引导加载阶段2(BL2)受信任的引导固件。
(3)Boot loader stage 3-1 (BL31) EL3 runtime software。引导加载阶段3-1(BL31)信Runtime固件。
(4)Boot loader stage 3-2 (BL32) trusted runtime firmware。引导加载阶段3-2(BL32)受信任的Runtime固件。
(5)Boot loader stage 3-3 (BL33) non-trusted firmware。引导加载阶段3-3(BL33)不受信任的固件。
BL1、BL2、BL31(仅在AArch64平台上)是TF-A的一部分,BL32可以属于TF-A或启动第三方固件,如TEE OS和uboot。
由于stm32 MPU平台使用内部ROM代码作为BL1阶段代码,因此BL1阶段代码在TF-A中被删除。
BL33不属于TF-A。这是TF-A加载的第一个非安全镜像,也就是所谓的第二阶段引导程序(Second-Stage boot loader,SSBL)。对于STM32MP1平台而言,SSBL默认为uboot。

2.2 TF-A启动流程图

2.2.1 32位ARM处理器

在这里插入图片描述
说明:
1.固化在ROM的加载并调用BL2
2.BL2加载BL32
3.BL2加载BL33
4.BL2调用BL32
5.BL32调用BL33

2.2.2 64位ARM处理器

在这里插入图片描述
说明:
1.固化在ROM的加载并调用BL2
2.BL2加载BL31
3.BL2加载BL32
4.BL2加载BL33
5.BL2调用BL31
6.BL31调用BL32
7.BL31调用BL33

2.3 TF-A启动阶段操作

2.3.1 BL1

BL1是启动的第一阶段,stm32MPU使用固化在内部ROM的BL1代码(不需要再自行编写),加载到RAM中运行,负责将BL2阶段镜像加载到SYSRAM。

2.3.2 BL2

BL2是启动的第二阶段,负责加载下一阶段镜像(安全或非安全)。为了实现这一目的,BL2必须初始化所有使用到的外设:
(1)系统组件:时钟、DDR、串口、MMU…
(2)安全组件:加密外设、内存防火墙…
此外,BL2使用不同的方式来加载和验证镜像是否安全。以上工作完成后,会执行BL32(32位ARM处理器)或BL31(64位ARM处理器),最终目的是执行BL33(一般是uboot)。

2.3.3 BL31

在64位ARM处理器上,BL31是EL3Runtime软件,也称为安全监视器。它处理安全监视器调优以及其他标准服务调用,例如PSCI(Power State Control Interface,电源状态控制接口)。
说明:
EL( Exception level,异常级别),用于描述特权级别,一共有4个级别:EL0、EL1、EL2、EL3,数字越大级别越大权限越高。 4个EL 级别对应的应用场合如下:
(1)EL0:一般的应用程序。
(2)EL1: 操作系统,比如 Linux。
(3)EL2:虚拟化(Hypervisor),虚拟机管理器。
(4)EL3: 最底层的安全固件(安全监视器),比如 ARM Trusted Firmware(ARM 安全固件, ATF,也就是 TF-A)。

2.3.4 BL32

BL32提供Runtime安全服务。BL32一般为安全系统(TEE OS)固件,比如OP-TEE,TF-A 为AArch32提供了EL3的Runtime软件,这个Runtime软件就是BL32固件,sp_min就是这个Runtime软件。打开ST提供的TF-A源码可以看到该文件夹:
在这里插入图片描述

2.3.5 BL33

BL33就是正常模式(Normal World)下的镜像,比如uboot。

相关文章:

TF-A(Trusted Firmware-A)及其启动流程详解:以stm32MP1平台为例

0 参考资料 stm32官网 wiki https://www.trustedfirmware.org/ https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git Trusted Firmware-A documentation ARM Power State Coordination Interface SMC Calling Convention (SMCCC) Arm System Control and Management…...

FL Studio 2024 发布,添加 FL Cloud 插件、AI 等功能

作为今年最受期待的音乐制作 DAW 更新之一,FL Studio 2024发布引入了新功能,同时采用了新的命名方式,从现在起将把发布年份纳入其名称中。DAW 的新增功能包括在 FL Cloud 中添加插件、AI 驱动的音乐创作工具和 FL Studio 的新效果。 FL Clou…...

webpack实战 | 医保服务平台信息查询 | 国密SM4 | SM2 | 逆向分析

请求头参数加密,请求参数encData用的是SM4加密,signData用的是SM2加密,响应数据用的是SM4解密 请求头不要也没关系,直接搜signData,都打上断点,点击分页 signData的核心代码 o.doSignature就是4d09模块…...

脉冲扩散模型

论文 Spiking Diffusion Models 主要内容是提出了“脉冲扩散模型(Spiking Diffusion Models, SDMs)”,一种基于脉冲神经网络(SNN)的生成模型,旨在解决传统人工神经网络(ANN)在图像生…...

blender分离含有多个动作的模型,并导出含有材质的fbx模型

问题背景 笔者是模型小白,需要将网络上下载的fbx模型中的动作,分离成单独的动作模型,经过3天摸爬滚打,先后使用了blender,3d max,unity,最终用blender完成,期间参考了众多网络上大佬…...

胤娲科技:AI大模型的隐秘战争——当“智能”成为双刃剑

当AI不再是单纯的助手 想象一下,你正在训练一个AI模型,希望它能成为你的得力助手,帮你解决各种复杂问题。然而,有一天,你突然发现,这个模型不仅没有如你所愿, 反而悄悄地在代码库中埋下了“炸弹…...

RK平台 GPIO序号转换软件

RK平台 GPIO序号转换软件 下载地址 https://download.csdn.net/download/ruidongren/89900151 链接: link...

UDP协议和TCP协议

UDP协议: 是一种无连接的、简单的传输层通信协议,它在IP协议(网络层)之上提供服务。 特点: 无连接:在数据传输前,发送方和接收方之间不需要建立连接,可以直接发送数据。 简单&…...

算法题总结(十三)—— 动态规划(上)

动态规划 动态规划理论基础 什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff…...

Leetcode - 周赛419

目录 一,3318. 计算子数组的 x-sum I 二,3319. 第 K 大的完美二叉子树的大小 三,3320. 统计能获胜的出招序列数 四,3321. 计算子数组的 x-sum II 一,3318. 计算子数组的 x-sum I 本题数据范围较小,可以…...

C# 的两个list怎么判断是否存在交集

要判断两个 List<string>&#xff08;dateList 和 LocalDate&#xff09;是否有交集&#xff0c;可以使用 LINQ&#xff08;Language Integrated Query&#xff09;来简化这个过程。以下三种方法来判断两个列表之间是否有交集。 方法 1: 使用 LINQ 的 Any 方法 using S…...

【Python】基础语法

1. 变量 1.1. 变量的创建 变量的定义规则&#xff1a; 变量只能由数字&#xff0c;字母&#xff0c;下划线构成&#xff0c;不能包含特殊符号数字不能作为变量开头变量名不能和 Python 的关键字重复Python 的变量是区分大小写的 除了上述的硬性规则外&#xff0c;还建议变量…...

scala 类的继承

继承的定义 idea实例 语法 重写 重写&#xff1a;在子类中重新定义父类的同名方法 idea实例 多态 多态&#xff1a;传入的对象不同&#xff0c;调用的方法的效果就不同&#xff01; 原理&#xff1a;参数是父类类型 idea实例 构造器...

穷举vs暴搜vs深搜vs回溯vs剪枝(一)

文章目录 全排列子集找出所有子集的异或总和再求和全排列 II电话号码的字母组合 全排列 题目&#xff1a;全排列 思路 通过深度优先搜索的方式&#xff0c;不断枚举每个数在当前位置的可能性&#xff0c;然后回溯到上一个状态&#xff0c;直到枚举完所有可能性得到正确的结果 r…...

枚举的应用

1.枚举的语法特点 枚举是jdk1.5提供的一个特性 枚举是一个特殊的类&#xff0c;这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。 枚举使用enum关键字定义 class A{} enum A{} 在枚举类中的第一行&#xff0c;就需要提供枚举类的对象&a…...

读数据工程之道:设计和构建健壮的数据系统14源系统

1. 源系统中的数据生成 1.1. 数据工程师的工作是从源系统获取数据&#xff0c;对其进行处理&#xff0c;使其有助于为下游用例提供服务 1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用 1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B…...

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

STMicroelectronics 意法半导体芯片选型表

意法半导体作为全球知名的半导体厂商&#xff0c;其产品广泛应用于各个领域&#xff0c;从消费电子到工业控制&#xff0c;从汽车电子到通信设备&#xff0c;都能看到意法半导体芯片的身影。在电子硬件设计领域&#xff0c;芯片的选型至关重要。亿配芯城&#xff08;ICgoodFind…...

TCP/IP 寻址

TCP/IP 寻址 概述 TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是一组用于数据网络的通信协议。它们定义了数据如何在网络上从一个设备传输到另一个设备。在TCP/IP网络中&#xff0c;每个设备都有一个唯一的地址&#xff0c;称为IP地址&#xff0c;用于标识网络上…...

深入探索 APKTool:Android 应用的反编译与重打包工具

文章目录 一、反编译 APK1.1 解压 APK1.2 DEX 文件转换1.3 资源解码 二、重新打包 APK2.1 资源重新编译2.2 smali 转换为 DEX2.3 打包 APK2.4 签名 APK 三、技术原理3.1 Smali/Baksmali3.1.1 DEX 文件格式3.1.2 Smali 语法3.1.2.1 指令3.1.2.2 寄存器3.1.2.3 操作码3.1.2.4 注释…...

软件测试与软件缺陷的基础知识

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议&#xff08;ICEIPS 2024&#xff09; 2024 3rd International Conference on Energy Internet and Power Systems ICEIPS 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) ICEIPS 2024独立出版&…...

ssm配置模式

新版 用Java类&#xff0c;全注解demo案例 1. AppConfig.java (Spring主配置类)package com.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.cont…...

[MySQL课后作业]人事管理系统的SQL实践

第一题 1.假设某商业集团中有若干公司&#xff0c;人事数据库中有3个基本表: 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CA…...

【MySQL】增删改查-进阶(二)

目录 &#x1f334;新增 &#x1f384;查询 &#x1f6a9;聚合查询 &#x1f3c0;聚合函数 &#x1f3c0;group by子句 &#x1f3c0;HAVING &#x1f6a9;联合查询 &#x1f3c0;内连接 &#x1f3c0;外连接 &#x1f3c0;自连接 &#x1f3c0;子查询 &#x1f3c0…...

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…...

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时&#xff0c;argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数&#xff0c;显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中&#xff0c;main函数的标准参数列表通常如下所示&#xff1a; in…...

缓冲区类QBuffer

1、QBuffer继承自QIODevice 2、是一种随机设备 3、和QFile类似&#xff0c; 4、有了 QBuffer&#xff0c;你可以把 QByteArray 当成文件一样来操作 其主要作用就是像QFile操作文件一样来操作一块QByteArray&#xff08;内存区域&#xff09;&#xff0c;比如读和写 常用方…...

从一个事故中理解 Redis(几乎)所有知识点

作者&#xff1a;看破 一、简单回顾 事故回溯总结一句话&#xff1a; &#xff08;1&#xff09;因为大 KEY 调用量&#xff0c;随着白天自然流量趋势增长而增长&#xff0c;最终在业务高峰最高点期占满带宽使用 100%。 &#xfeff; &#xfeff; &#xff08;2&#xff…...

MySQL程序介绍<二>

目录 mysqlcheck - 表维护程序 Mysqldump - 数据库备份程序 mysqladmin - MySQL 服务器管理程序 mysqlshow - 显⽰数据库、表和列信息 mysqldumpslow - 总结慢查询⽇志⽂件 ​编辑 mysqlbinlog - 处理⼆进制⽇志⽂件 mysqlslap - 负载仿真客⼾端 接着上篇继续介绍MySQL…...