首页 > 其他分享 >ATF引导启动流程整理-Part1:简介部分

ATF引导启动流程整理-Part1:简介部分

时间:2025-01-19 15:55:35浏览次数:1  
标签:ATF 引导 安全 简介 镜像文件 Part1 EL3 ARM

Ch1:背景与基础内容介绍

1.1 背景

最近工作中使用 U-boot 进行内核引导启动调整,发现编译手册中对Uboot镜像编译流程和之前接触的不太一样,在完成U-boot编译流程后,需要单独再进行 ATF 编译。且 ATF 编译过程中需要使用 U-boot.bin产物并且给出硬件配置。此工程的最终生成产物被分成了 atf.bin 和 u-boot.bin。对此我不禁产生了疑问,新增的 ATF 编译流程是什么?实现了什么功能?以及BootLoader引导启动流程有何变化?

1.2 BootLoader简介

首先我们需要了解一下BootLoader是什么。在嵌入式系统中,通常没有BIOS那样的固件程序,因此需要实现整个系统的加载启动任务需要BootLoader来完成,它在操作系统内核运行之前运行,可以完成初始化硬件设备、建立内存空间映射、配置系统的软硬件环境的工作,为最终调用操作系统内核运行准备好运行环境。不同的处理器架构有不同的BootLoader,它不仅依赖于CPU的体系结构,也依赖于嵌入式系统板级设备配置与参数(DDR、Flash等)。

对于Bootloader可总结以下四点:

  • Bootloader是硬件启动时执行的引导程序,是运行操作系统的前提;

  • Bootloader是在操作系统内核或用户应用程序运行之前运行的一段代码;

  • 在嵌入式系统中,整个系统的初始化和加载任务一般由Bootloader来完成;

  • 对硬件进行相应的初始化和设定,最终为操作系统准备好环境。

需要注意的是 BootLoader 是独立于操作系统的,一般由汇编代码和C代码组成,也根据代码实现不同划分为两个阶段:

  1. 第一阶段使用汇编代码实现,完成一些依赖于CPU体系结构的初始化,包括硬件设备初始化、配置C语言运行环境(准备RAM空间,初始化栈等)、调用第二阶段的代码;
  2. 第二阶段通常使用C语言实现,可以实现较复杂的功能,主要包括初始化本阶段的硬件设备、检查系统内存映射、读取内核镜像和根文件系统到内存、为内核设置启动参数、调用内核。

U-boot (Universal Boot Loader),是一个被广泛使用的开源引导加载程序,由DENX开发,支持多种处理器架构,包括ARM、MIPS、PowerPC等,广泛使用与嵌入式Linux系统的引导。此文档只做简单介绍,核心关注ATF部分。

1.3 缩写对照

缩写 全称 意思
TEE Trusted Execution Environment 可信执行环境
SMC Secure Monitor Call 安全监视器调用
REE Rich Execution Environment (非可信)富执行环境
CA Client Application 富执行环境下应用程序
TA Trusted Application 可信执行环境下应用程序
SMCCC SMC Calling Convention SMC调用约定
EL Exception Level 异常等级
SCTLR system control registers 系统控制寄存器
SPSR saved programstatus register 程序状态保存寄存器
CPSR current program status register 当前程序状态寄存器

Ch2:ATF介绍

TF(Trusted Firmware)是ARM在Armv8引入的安全解决方案,它的核心功能为对启动和运行过程进行特权级划分,为安全提供了整体解决方案。相较于Armv7中的Trust Zone(TZ)进行了提高,它包括启动和运行过程中的特权级划分,实现了启动过程信任链的传导,细化了运行过程的特权级区间。TF实际有两种Profile,对ARM Profile A的CPU应用TF-A,对ARM Profile M的CPU应用TF-M。我们一般接触的都是TF-A,又因为这个概念是ARM提出的,有时候也缩写做ATF(ARM Trusted Firmware)。

2.1 安全引导(安全启动)

安全引导(Secure Boot)功能是指在系统的整个启动过程中,使用链式验证电子签名的方式来验证系统中重要镜像文件的可靠性,然后再加载镜像文件的引导过程。安全引导功能可以保护二级厂商系统的独立性和完整性。

安全引导功能的原理就是采用链式验签的方式启动系统,也就是在系统启动过程中,在加载下一个阶段的镜像之前都会对需要被加载的镜像文件进行电子验签,只有验签操作通过后,该镜像才能被加载到内存中,然后系统才会跳转到下一个阶段继续执行,整个验签链中的任何一环验签失败都会导致系统挂死,系统启动过程中的第一级验签操作是由Chip ROM来完成的。

只要芯片一出厂,用户就无法修改固化在芯片中的这部分代码,因此无法通过修改第一级验签结果来关闭安全引导功能。而且验签操作使用的RSA公钥或者哈希值将会被保存在OTP/efuse中,该区域中的数据一般只有Chip ROM和TEE能够读取且无法被修改。RSA公钥或者哈希值将会在产品出厂之前被写入到OTP/efuse中,而且不同厂商使用的密钥会不一样。

安全引导可用于保证系统的完整性,防止系统中重要镜像文件被破坏或替换。一般情况下,安全引导需要保护:

  • 系统的BootLoader镜像文件
  • TEE镜像文件(TEE,Trusted Execution Environment,可信执行环境)
  • Linux内核镜像文件
  • Recover镜像文件
  • 在ARMv8中使用的ATF镜像文件

将TEE镜像文件的加载操作加入安全引导功能中可阻止黑客通过替换TEE镜像文件的方式来窃取被TEE保护的重要资料。

当前使用ARM芯片的系统中大部分使能了安全引导功能,该功能对于用户的最直接感受就是,当用户非法刷入其他厂商的ROM后无法正常启动,这是因为非法刷机将导致系统中的重要镜像文件被替换,系统在启动过程中对镜像文件的电子验签失败,如果BootLoader验证失败,则系统在进入BootLoader阶段之前就会挂死。

在ARMv8架构中ARM提供了ARM可信固件(ATF)。Bootloader、Linux内核、TEE OS的启动都由ATF来加载和引导。对于ARMv8, Bootloader、Linux内核和TEE OS镜像文件的验签工作都是在ATF中完成的。

2.2 ARM Trust Zone简介

Trust Zone 是 ARM 为设备安全开发的一个硬件架构。它通过硬件隔离的方式将系统分为了两个环境——Non Secure 和 Secure ,也叫做 Normal 和 Trusted。Normal 环境中可以运行地软件比较丰富和复杂,比如 Linux,因此有时也称在 Normal 环境为 REE(Rich Execution Environment)。在 Trusted 环境中运行地软件很“小”,提供的功能也有限,通常称 Trusted 为 TEE(Trusted Execution Environment,可信执行环境)。

硬件隔离是说是使用 TrustZone 可以将设备中的外设(UART、I2C、SPI、DDR 等)分为两个部分,其中一部分可以在 Normal 环境下进行操作,另外一部分在 Trusted 的环境下进行操作。硬件隔离实现在两个方面:芯片外设隔离、内存隔离(对于DDR,需要将整个区域划分为若干安全和非安全区域。通过TZASC可实现)。示意图如下所示。

2.3 ATF简介

ATF 在CPU和内存中区隔出两个空间:Secure空间和Non-Secure空间,同时划分了EL0(Exception level 0)到EL3四个特权级;其中EL0和EL1是ATF必须实现的,EL2和EL3是可选的。实际上,没有EL2和EL3,整个模型就基本退化成了ARMv7的TZ版本。ATF带来最大的变化是信任链的建立(Trust Chain),整个启动过程包括从EL3到EL0的信任关系的打通,过程比较抽象。

根据上图可以看出划分中EL0、EL1、EL2都存在安全/非安全两种状态,EL3一直处于安全状态。由此非安全部分包括:NS.EL0、NS.EL1、NS.EL2;安全部分包括 EL3、S.EL2(ARMv8.4新增)、S.EL1、S.EL0。无论从安全切换到非安全,还是非安全切换到安全都需要经过EL3,从NS.EL1切换到S.EL1流程图如下:

  1. Rich OS通过SMC异常进入EL3。
  2. EL3中执行对应的异常处理函数,并进行SCTLR_EL3.NS位设置1->0;保存非安全寄存器状态;恢复安全寄存器状态。
  3. 从异常处理中退出并将CPU从EL3切换到S.EL1。

NOTE:SMC是在Trust Zone中引入的方法,是为了在安全区和非安全进行切换时的接口。

标签:ATF,引导,安全,简介,镜像文件,Part1,EL3,ARM
From: https://www.cnblogs.com/silas041301/p/18679630

相关文章

  • Python的简介-课前甜点
    Python的简介-课前甜点1.`Python`需求的任务2.Python代码的实现3.代码修改的位置4.运行结果5.注意事项6.其他文章链接快来试试吧......
  • 「TC SRM625 D1L3」Seatfriends
    思路首先,对于计数题,不是\(\text{dp}\)就是排列组合,这题多思考一会儿就发现单纯\(\text{dp}\)和排列组合是做不出来的。然后激动人心地发现,这题是\(\text{dp}\+\)排列组合。现在来思考怎么做,我们可以发现如果不考虑区间两两之间的空座位,当成选为一个个集合的话是非常好......
  • 【SQL教程】Day01-03: MySQL简介及安装指南
    MySQL是目前应用最广泛的开源关系数据库管理系统。它最初由瑞典的MySQLAB公司开发,后来该公司在2008年被SUN公司收购,紧接着在2009年SUN被Oracle公司收购,从而使得MySQL成为Oracle旗下的产品。MySQL的特点和发展历程使其成为全球许多企业和开发者的首选数据库。1.MySQL架构概览......
  • 实施零信任模型的方法指南 支柱1用户 集成ICAM平台(Integrated ICAM Platform)
    1.9.1功能描述国防部各组织和整个企业采用企业级身份管理和公钥基础设施(PKI)系统,用于跟踪整个网络中的用户、管理员和非人员实体(NPE)的身份,并确保访问权限仅限于有需要且有知情权的人员,各组织可以通过凭证管理系统、身份治理和管理工具以及访问管理工具来验证其是否为必需......
  • 网络攻击(一)--安全渗透简介
    1.安全渗透概述目标了解渗透测试的基本概念了解渗透测试从业人员的注意事项1.1.写在前面的话在了解渗透测试之前,我们先看看,信息安全相关的法律是怎么样的中华人民共和国网络安全法《中华人民共和国网络安全法》由全国人民代表大会常务委员会于2016年11月7日发......
  • 编译器设计史 | 工作原理 | C 编译器简介
    注:机翻,未校。HistoryofCompilerDesign编译器设计的历史PriteshPawarOct20,2021InthisblogI’llbetryingtoshadowthehistoryofcompilersindetailalongwiththebasicintroductiontocompilersandit’soptimization.在这篇博客中,我将尝试详......
  • STM32简介
    1、STM32是基于ARM-Cortex-M内核开发的32位微控制器。STM32分为高性能系列,主流系列,低功耗系列、无线系列:视频采用STM32F1系列高性能系列:STM32F2,F4,F7,H7(3224内核跑分,双核微控制器=550MHz的Cortex-M7+240MHz的Cortex-M4)2、ARM内核型号:经典ARM处理器:ARM7、ARM9、ARM11Corte......
  • 小程序云测服务简介
    MiniTest小程序云测服务简介MiniTest微信小程序云测是一套由微信测试团队自主研发,联合WeTest云真机能力,共同推出的小程序自动化测试服务。服务基于云真机,支持开发者简单快捷地实现小程序真机自动化测试和性能分析等能力。服务平台特色功能如下:丰富的自动化测试能力全面的性......
  • ArkTS简介与代码示例
    鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为用户提供跨设备无缝协同体验,支持多种终端设备,如智能手机、平板电脑、智能穿戴设备等。为了适应不同的应用场景和硬件能力,鸿蒙提供了多语言编程的支持,其中包括ArkTS(ArkTypeScri......
  • [数据结构学习笔记13] 递归简介(Recursion)
    递归让我们把问题由大分小,小到我们能够轻松处理。递归方法有两个要注意的点:1.递归方法会重复的被调用;2.必须有一个终止条件,否则方法调用不停,会导致stackoverflow。看下面的一个例子,这个没有终止条件,会报错!functionhello(){console.log("I'malittlefunction,shorta......