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

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

3天内不再提示

TF-A启动流程详解

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-09-11 16:59 次阅读

bl 1

bl 1 是 TF-A 的第一个启动阶段,芯片复位以后就会运行 bl1 镜像,TF-A 提供了 bl1 源码。但是,实际上 bl1一般是半导体厂商自己编写的内部 Boot ROM 代码,并没有使用 TF-A 提供的 bl1 镜像。因此 bl1部分的实现就千差万别,不同的半导体厂商有不同的实现方法。

一般 bl1 要做的就是初始化 CPU,如果芯片支持不同的启动设备,那么还需要初始化不同的启动设置,比如 NAND、EMMC、SDUSB或串口等。然后根据 BOOT 引脚的高低电平来 判断当前所选择的启动设备,从对应的启动设备中加载 bl2 镜像,并放到对应的内存中,最后跳转到 bl2镜像并运行。

bl 2

bl 2 会进一步的初始化芯片,比如初始化 DDR、MMU、串口等。bl2 会将剩下三个阶段 (bl31、bl32 和bl33)对应的镜像加载到指定的内存中,最后根据实际情况来启动剩下三个阶段的镜像。

bl 31

在 AArch64 中,bl31 主要是 EL3 的 Runtime 固件。

bl 32

bl32 一般为安全系统(TEE OS)固件,比如 OP-TEE。TF-A 为 AArch32 提供了 EL3 的 Runtime 软件,这个Runtime 软件就是 bl32 固件,sp_min 就是这个 Runtime 软件。大家可以打开 TF-A 的 bl32
源码文件夹,其下就有一个名为“sp_min”的子文件夹,这个就是 bl32 的 sp_min 源码,如图所示:

图片

bl32 提供运行时安全服务,在 TF-A 中默认使用 sp_min。sp_min 是一个最小的 AArch32 安全负载(Secure Payload),整合了 PSCI 库以及 AArch32 的 EL3 运行时软件。sp_min 可以替代可信系统(TEE OS)或者可信执行环境(TEE),比如 OP-TEE。用户可以自行选择 bl32 使用哪个软件包。

bl32 充当安全监控(secure monitor),因此它向非安全系统(non-secure os,比如 linux)提供了一些安全服务。非安全的应用软件可以通过安全监控调用(secure monitor calls)来使用这些安全服务,这些代码支持标准的服务调用,比如 PSCI。

bl 33

bl33 就是 Normal World 下的镜像文件,比如 uboot。

至此,我们对 TF-A 的基本启动流程有了一个大概的了解,我们知道了 TF-A 分为多个阶段,不同的阶段其工作内容不同。但是,在实际的开发中并不一定会用到 TF-A 中所有启动阶段。

TF-A 是用于完成安全启动的,OP-TEE 是 TEE OS,如果使用 OP-TEE 的话它会和 linux 内核同时运行,OP-TEE负责可信应用,linux 就是普通的应用程序。

TF-A 分为了不同阶段:bl1、bl2、bl31、bl32 和 bl33,这个主要是面向 AArch64 的,对于 AArch32 而言只有 4个阶段:

bl1:第 1 个阶段,一般为芯片内部 ROM 代码

bl2:第 2 个阶段,可信启动固件

bl32:EL3 运行时(Runtime)软件

bl33:非安全固件,比如 uboot

其中 bl1、bl2 和 bl32 都属于 TF-A 的一部分(如果你使用 TF-A 提供的 bl1 的话)。

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

    关注

    455

    文章

    50714

    浏览量

    423157
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304823
  • ROM
    ROM
    +关注

    关注

    4

    文章

    563

    浏览量

    85733
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209332
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68525
收藏 人收藏

    评论

    相关推荐

    如何使用Yocto更新已更改的TF-A设备树来产生新的镜像文件?

    求助大佬, 我用Yocto构建了STM32MP157的镜像文件,但我需要更改和移植TF-A和U-BOOT来适配我的板子, 我按照它正点原子教程里更改了.bl2和创建了新的.dtsi设备树文件,但
    发表于 03-29 08:01

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

    1、什么是ATF首先什么是TF-A(ATF)?ATF就是一个固件, 一段代码,一个为armv7-A/armv8-A/armv9-A提供的参考实现代码。(注意,这只是参考实现,你也可以不
    发表于 06-15 16:57

    TF-A与U-boot的打印输出显示了不同的信息是为什么呢

    我已将 TF-A 放入详细打印中,导致打印出有关 BSEC 访问的信息。但是 TF-A 与 U-boot 的打印输出显示了不同的信息,或者至少是令人困惑的信息。是什么赋予了?(TF-A 2.6-r1
    发表于 12-01 07:30

    stm32mp157f启动时出现TF-A异常是为什么?如何解决?

    我有一个基于 stm32mp157f 的定制板。(因此,有自定义设备树。)我目前在 TF-A 中看到一个我无法解释的异常。INFO: Reset reason (0x14):INFO:Pad
    发表于 12-07 06:34

    为157F-DK2设置TF-A sp_min总是报错的原因?

    您好,我正在尝试为 157F-DK2 设置 TF-A sp_min。这是我的信息。搭建环境Ubuntu 22.04用于 OpenSSL 3.0 支持需要,因为 trusted-firmware-a
    发表于 12-08 07:40

    如何去调试U-Boot和TF-A中的USB以及OTG控制器呢

    能够通过 USB-OTG 加载 TF-A 图像并运行它,但之后 USB-OTG 连接停止工作。来自 TF-A 的最后一条消息是:“信息:DFU USB 启动……”在 U-Boot 中手动运行
    发表于 12-20 07:00

    怎样配置TF-A模块来管理时间戳篡改呢

    我正在开发一个基于 STM32mp153 MPU 和 Linux 操作系统的项目。我已经配置了 TF-A 模块来管理时间戳篡改。当篡改事件发生时,它会在标准输出中报告。我想将 TF-A 检测
    发表于 12-23 08:56

    请问如何使用TF-A中的I2C1来控制STPMIC1?

    在我们的定制板中,我们使用 I2C1 来控制和配置 STPMIC1。我想在 TF-A 中使用 I2C1,这样 PMIC 就可以配置为在引导期间为 DDR 供电。TF-A 默认不支持 I2C1,但
    发表于 01-16 08:19

    什么会导致fsbl tf-a引导加载程序在闪烁后崩溃?

    好,并以 100% 完成,但稍等片刻,我就遇到了错误。似乎 TF-A 在加载后崩溃或无法启动。我正在寻找原因以及如何解决。附件是我在编程器中使用的 TSV 文件。我正在使用 EcoSystem 4.1.0。
    发表于 02-01 07:31

    如何使用STM32CubeProgrammer在没有USB的情况下将TF-A、u-boot、根文件系统刷入SD卡?

    以下 Wiki 页面显示了如何使用 STM32CubeProgrammer 将 TF-A、u-boot、根文件系统刷入 SD 卡。在上面的 wiki 页面中,我可以使用 USB将 TF-A
    发表于 02-03 10:40

    如何从TF-A或uboot加载/启动Cortex-M4?

    是否可以从 TF-A 或 uboot 加载/启动 Cortex-M4?对于我们的用例,我们希望 Cortex-M4 中的 RTOS 尽快运行。在 linux 完成启动之前。
    发表于 02-07 06:51

    SOC的多核启动流程和概念详解

    本文以为armv8-aarch64、armv9为例、TF-A代码为例,不讨论其它硬件架构和固件软件中的设计。
    发表于 06-08 09:32 2252次阅读
    SOC的多核<b class='flag-5'>启动</b><b class='flag-5'>流程</b>和概念<b class='flag-5'>详解</b>

    TF-A主要保护的是什么

    大量的嵌入式设备使用 ARM 为核心的芯片,为了保证安全 ARM 推出了 Arm Trusted Firmware 的可信固件,简称 TF-A。它是一个开源的软件,最早是用在 Armv8-A。它
    的头像 发表于 09-11 16:25 727次阅读

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

    TF-A 不同启动阶段 FSBL:First stage boot loader,第一阶段启动文件 SSBL:Second stage boot loader,第二阶段启动文件
    的头像 发表于 09-11 16:54 915次阅读
    <b class='flag-5'>TF-A</b>的不同<b class='flag-5'>启动</b>阶段有哪些

    TF-A移植是什么意思

    TF-A 移植 当我们实际做产品的时候我们的硬件平台肯定会和芯片原厂的有区别,比如 DDR 容量会改变,自己的硬件没有使用到官方开发板所使用的 PMIC芯片等等。因此这里就涉及到将半导体原厂提供
    的头像 发表于 09-11 17:04 776次阅读
    <b class='flag-5'>TF-A</b>移植是什么意思