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

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

3天内不再提示

ARM ATF入门-安全固件软件介绍和代码运行

yzcdx 来源:OS与AUTOSAR研究 2023-02-03 17:19 次阅读

大家都知道硬件之上是软件,本公众号主要介绍“OS与AUTOSAR”,那么除了这两种类型的软件,是否还有别的软件?本文以ARM SOC硬件为例,“打破砂锅,问到底”,来看看还有哪些软件我们没接触到,在OS之下和SOC硬件之上的,各种卖给我们底层软件的厂商(一般都是SOC芯片原厂)所掩盖的核心技术,另外结合开源代码进行理解。

  1. 1.OS之下,SOC硬件之上有什么软件?

我们在定位OS的问题的时候突然一个SMC指令之后的代码找不到了,代码不在OS里面也不在u-boot里面,到底在哪里,之后的运行又是什么,带着这个问题,我们“打破砂锅问到底”,看看到底怎么回事。

在之前的文章AUTOSAR入门-汽车电子构架演进(四) 未来已来,有一个NXP汽车软件方案图,可以同时支持AP和BP,很经典,我们回顾下:

f32f15e2-a3a2-11ed-bfe3-dac502259ad0.png

可以看到标识的是Firmware(固件),我们首先会想到这就像电脑里面的BIOS,焊在电脑主板上的一个存储芯片,开机启动的时候,CPU寻址就会去执行里面的代码。那么这个东西的确是个软件啊,有软件就有代码,有代码就有开源的,来一起盘它

NXP的图,以功能为核心是给客户看的,掩盖了其使用ARM技术的细节,也就是软件实现的细节,并不能直接反映ARM软件的框架。然后重新起个高大上的模块名字,好忽啊,我们直接来看ARM的特权级(重要:本文以下都是针对ArmA核):

f39ce0b8-a3a2-11ed-bfe3-dac502259ad0.png

这个图了解ARM的都太熟悉了,EL(exception level)就是异常等级,为什么会有异常等级,那就是特权(privilege),不同的软件有不同的特权,EL0的特权最小,只能运行App,EL3的特权是最大的,也就是说对所有硬件的访问权限也是最大的。

ARMv8分为SecureWorld和Non-Secure World(NormalWorld),四种异常级别从高到低分别为EL3,EL2,EL1,EL0。

  1. EL0:非安全态的Apps,安全态的Trusted Apps,EL0是无特权模式,所有APP应用都在EL0。

  2. EL1:非安全态的Normal world OS,安全态的Trusted OS ,EL1是一个特权模式,能够执行一些特权指令,用于运行各类操作系统例如LinuxFreeRTOS、TEE等)。

  3. EL2:Hypervisor虚拟层

  4. EL3:Secure Monitor,Arm trusted firmware安全固件,EL3具有最高管理权限,是一个微型的runtime系统,为OS提供服务,负责安全监测和Secure World和Normal World之间的切换。

关于ARM体系结构的基础知识可以自己找资料看看。OS下面的软件有Hypervisor和Securemonitor。Hypervisor是虚拟机,后续有机会了介绍下,本文聚焦到Secure monitor

Secure monitor到底是什么,如下图中红框中:

f3cd7836-a3a2-11ed-bfe3-dac502259ad0.png

其中有U-Boot大家都比较熟悉,是一个bootloader, bootloader程序会先初始化 DDR等外设,然后将 Linux内核从 flash(NAND NOR FLASH SD MMC等 )拷贝到 DDR中,最后启动 Linux内核。后续有文章再详细介绍。

这里我们看BL1、BL2、BL31、BL32、BL33是什么东西,下面介绍下ATF的概念:

ATF:Arm TrustedFirmware(ARM安全固件),运行在EL3异常级别,ATF为Armv7-A 和 Armv8-A提供了一些安全可信固件。具体包括上面说的:ATF= BL1、BL2、BL31、BL32、BL33,其中BL33有就是U-Boot。都运行在EL3模式。具体为:

BL1:也叫bootrom,rom的意思就是只读的,具有最高的执行权限EL3,在 CPU 出厂时就被写死了。为什么要写死,这里有一个安全驱动概念(Secure Boot)。CPU上电启动的时候,加载镜像的顺序为BL1 -》 BL2 -》 BL31 -》 BL32 -》BL33(uboot)-》OS(Linux),但是如果其中的一个镜像被换掉了怎么办?这里不是说网络攻击换掉,就是物理上拿到电路板,然后把存储SD卡拔掉换了自己的OS,那不是想干啥就干啥,完全控制了硬件设备,俗称“越狱”。答案就是没一个镜像进行签名校验。

例如BL33加载OS,需要OS镜像算出hash利用私钥加密,然后BL31在加载OS的时候会读取这个加密的Hash,利用自己的公钥解密,解密后的hash是对的就进行加载。那么这么一级一级按照加密向前传递,那第一个根BL1如果可以在SD卡上伪造,那校验就没用了。所以BL1需要只读,并且作为只读硬件直接搞进到CPU里面,你从板子上也拆不下来,更替换不了。因为要写死到CPU内部,所以独立出来了,也是其由来的原因。

BL2:BL2在flash中的一段可信安全启动代码,主要完成一些平台相关的初始化,比如对ddr的初始化等。因为BL31和BL32是一个runtime,也就是上电后一直运行的程序,那么需要加载到内存里面,需要先初始化内存ddr,BL2就干这个事情的。所谓的Loder。

BL31:作为EL3最后的安全堡垒,它不像BL1和BL2是一次性运行的。如它的runtime名字暗示的那样,它通过SMC指令为Non-Secure OS持续提供设计安全的服务,在Secure World和Non-Secure World之间进行切换。是对硬件最基础的抽象,对OS提供服务。例如一个EL3级别的特权指令,比如关机、休眠等OS是无权处理的,就会交给BL31来继续操作硬件处理。

BL32:是所谓的secure os,运行在Secure mode。在ARM平台下是ARM 家的 Trusted Execution Environment(TEE)实现。OP-TEE 是基于ARMTrustZone硬件架构所实现的软件Secure OS。

一般在BL32会运行OPTee OS + 安全app,它是一个可信安全的OS运行在EL1并在EL0启动可信任APP(如指纹信息,移动支付的密码等),并在Trust OS运行完成后通过SMC指令返回BL31,BL31切换到Non-Seucre World继续执行BL33。关于OPTEE和Secure mode及TurstZone的机制,有机会再写一个文章介绍。

BL33:这里就是Normal Wrold了,运行的都是非安全固件,也就是我们常见的UEFI firmware或者u-boot,也可能是直接启动Linux kernel。

启动BL1,BL2,BL31,BL32则是一个完整的ATF信任链建立流程(ARM Trusted Firmware),像常见的PSCI(Power State Coordination Interface)功能则是在ATF的BL31上实现。对基本概念有认识了后,你就知道OS之下还有的这些软件通常称为ATF,其启动流程如下:

f3fb4afe-a3a2-11ed-bfe3-dac502259ad0.png

详细为:

f40eb274-a3a2-11ed-bfe3-dac502259ad0.png

2. ATF代码下载编译运行

2.1 ATF代码下载编译

ATF代码下载:


	
git clone https://github.com/ARM-software/arm-trusted-firmware.git
ATF代码编译:

	
makeCROSS_COMPILE=aarch64-linux-gnu-PLAT=qemuDEBUG=1all

f4303fca-a3a2-11ed-bfe3-dac502259ad0.png

编译完成后在arm-trusted-firmware/build/qemu/debug目录下生成bl1.bin、bl2.bin、bl31.bin

ATF的BL33使用的u-boot,代码下载:


	
git clone https://source.denx.de/u-boot/u-boot.git
编译:

	
cd u-boot
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make qemu_arm64_defconfig
make -j8

	

编译完成后在当前目录下生成u-boot.bin

2.2 qemu运行ATF

首先需要qemu,执行

qemu-system-aarch64 –version

看下系统是否安装过,如果没安装过,需要安装:


	
git clone https://git.qemu.org/git/qemu.git
cd qemu
./configure --target-list=aarch64-softmmu --prefix=
make -j8
sudo make install

	

有了qemu,然后新建一个run目录,把各个镜像软连接进来:

mkdir run
cd run
ln-s ~/arm/arm-trusted-firmware/build/qemu/debug/bl1.binbl1.bin
ln-s~/arm/arm-trusted-firmware/build/qemu/debug/bl2.bin bl2.bin
ln-s ~/arm/arm-trusted-firmware/build/qemu/debug/bl31.binbl31.bin
ln -s ~/arm/u-boot/u-boot.bin bl33.bin

在run目录执行命令:

qemu-system-aarch64-nographic-machine virt,secure=on
-cpu cortex-a53 
-smp 2 -m 2048 
-d guest_errors,unimp 
-bios ./bl1.bin 
-semihosting-config enable=on,target=native

f44e39a8-a3a2-11ed-bfe3-dac502259ad0.png

可以看到u-boot已经启动了,我们输入u-boot支持的version命令会有输出。

这里主要分析ATF,qemu只加载了ATF包括u-boot。如果想一块加载Linux可以参考:https://zhuanlan.zhihu.com/p/521196386

审核编辑 :李倩


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

    关注

    134

    文章

    8659

    浏览量

    362167
  • OS
    OS
    +关注

    关注

    0

    文章

    91

    浏览量

    34608
  • 软件
    +关注

    关注

    67

    文章

    4353

    浏览量

    85722

原文标题:ARM ATF入门-安全固件软件介绍和代码运行

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32CubeL5 TFM 应用程序入门

    目录预览 1 概述 2 文档和开源软件资源  3 STM32Cube 概述 4 Arm可信固件-M(TF-M)简介  5 安全启动和安全
    的头像 发表于 12-30 14:20 2218次阅读

    安全微控制器的固件

     强烈建议TI开发Hercules™ ARM®安全微控制器的固件库!!!类似ST的STM32系列的固件库!安全不单强调 MCU的硬件
    发表于 05-22 01:15

    STM32固件库使用介绍分享!

    32位基于ARM微控制器STM32F101xx与STM32F103xx 固件函数库介绍 本手册介绍了32位基于ARM微控制器STM32F1
    发表于 07-30 02:37

    固件漏洞安全问题的解决办法

      当下物联网时代,越来越多的设备接入到网络,随之而来的安全性问题也逐渐被重视起来。对于物联网设备来说,固件是极易受到攻击的部位,作为一个系统最基础最底层的工作软件固件在很大程度上决
    发表于 09-07 17:16

    ARM安全技术介绍

    ARM安全技术-使用***技术构建安全系统(翻译)**第一章 介绍**本章提供了一些与嵌入式系统安全相关的背景知识。本章包括以下部分:•什么
    发表于 07-26 07:39

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

    1、什么是ATF首先什么是TF-A(ATF)?ATF就是一个固件, 一段代码,一个为armv7-A/armv8-A/armv9-A提供的参考
    发表于 06-15 16:57

    以hello world为例介绍如何让代码部署并运行ARM平台上

    1、以hello world为例介绍如何让代码部署并运行ARM平台上CI(Continuous Integration)让我们可以不断对小的代码
    发表于 07-11 15:44

    Arm的领域管理扩展(RME)介绍

    软件或TrustZone固件不能访问。由于这个地址空间,Arm CCA构造了受保护的执行环境,称为领域。 领域允许保护权限较低的软件,如应用程序或虚拟机(VM)其内容。领域还可以防止
    发表于 08-02 11:40

    Arm平台安全架构固件框架1.0

    Arm的平台安全架构(PSA)是一套完整的: •威胁模型。 •安全分析。 •硬件和固件体系结构规范。 •开源固件参考实施。 •独立评估和认证
    发表于 08-08 07:14

    在Vitis中调试ARM可信固件和U-boot

    在本篇博文中,我们将探讨如何在 Vitis 中调试 Zynq UltraScale 器件启动镜像。这些启动镜像包括 ARM 可信固件 (ATF) 和 U-boot。
    的头像 发表于 08-02 10:14 2825次阅读
    在Vitis中调试<b class='flag-5'>ARM</b>可信<b class='flag-5'>固件</b>和U-boot

    UM1467_STM32F4DISCOVERY 套件的软件固件环境入门

    UM1467_STM32F4DISCOVERY 套件的软件固件环境入门
    发表于 11-22 08:21 0次下载
    UM1467_STM32F4DISCOVERY 套件的<b class='flag-5'>软件</b>和<b class='flag-5'>固件</b>环境<b class='flag-5'>入门</b>

    UM2262_X_CUBE_SBSFU安全启动和固件更新软件入门

    UM2262_X_CUBE_SBSFU安全启动和固件更新软件入门
    发表于 11-22 19:16 0次下载
    UM2262_X_CUBE_SBSFU<b class='flag-5'>安全</b>启动和<b class='flag-5'>固件</b>更新<b class='flag-5'>软件</b><b class='flag-5'>入门</b>

    ARM SCP入门-AP与SCP通信

    当Linux想要关机或者休眠的时候,这涉及到整个系统电源状态的变化,为了安全性Linux内核没有权利去直接执行了,需要陷入到EL3等级去执行,可以参考之前文章ARM ATF入门-
    的头像 发表于 07-16 11:25 3738次阅读
    <b class='flag-5'>ARM</b> SCP<b class='flag-5'>入门</b>-AP与SCP通信

    车规MCU的安全启动固件

    安全启动固件(Secure Boot Firmware) 车规MCU的安全启动固件(Secure Boot Firmware)是一种用于保护汽车电子系统免受恶意
    的头像 发表于 10-27 17:20 1528次阅读
    车规MCU的<b class='flag-5'>安全</b>启动<b class='flag-5'>固件</b>

    ATF启动流程介绍

    一、BL32(TEE OS)的准备 ATF启动流程 ATF流程 ATF冷启动实现分为5个步骤: • BL1 - AP Trusted ROM,一般为BootRom。 • BL2 - Trusted
    的头像 发表于 11-02 17:51 583次阅读
    <b class='flag-5'>ATF</b>启动流程<b class='flag-5'>介绍</b>