引流关键词: TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,终端安全,secureboot,security,virtulization, FF-A,FFA,SPMC,SPM,SPMD,hypervisor,EP,TCB,context,SP,SPM,VM
快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈
FF-A系列
[FF-A]-01-Introduction
[FF-A]-02-Concepts
[FF-A]-03-Partition setup
目录
Concepts
术语 & 概念
sp
spm
vm
hypervisor
ep : endpoint
TCB
EC : execution contexts 执行上下文
2.1 Partition manager
partition manager负责根据其manifest中规定的要求初始化分区(请参阅第 3 章分区设置)。 partition 描述了系统物理地址空间中的区域以及它需要通过其manifest访问的资源。 partition manager使用manifest来验证资源请求并在验证成功时将资源分配给endpoint。
Firmware Framework相对于partition manager和partition定义了以下信任范围:
- SPM 是分配给安全状态的系统资源或物理地址空间范围的 TCB 的一部分。
- hypervisor和SPM 都是分配给非安全状态的系统资源或物理地址空间范围的TCB 的一部分。
- VM 必须信任 Hypervisor 和 SPM 以保护其资源免受其他端点的影响。
- SP 必须信任 SPM 以保护其安全资源免受其他 SP 的影响。
- SP 不得信任其有权访问的任何非安全资源的状态。 因此,它不能信任也可以访问相同资源的管理程序或 NS endpoint。
partition manager通过利用 CPU 和系统架构实现的以下功能来保护分区资源免受其他 FF-A 组件的影响:
- Arm® TrustZone 安全扩展用于保护分配给处于安全状态的 FF-A 组件的安全物理地址空间范围和系统资源免受处于非安全状态的组件的影响。
- Armv8-A VMSA 提供的基于虚拟内存的内存保护用于保护分配给安全状态和FF-A 组件的物理地址空间范围免受其他FF-A 组件的影响。 SPM 对它的使用在 2.2 SPM 体系结构中进行了描述。 Hypervisor 使用此功能如下。
(1)、如果 EL1&0 阶段 2 转换机制,当启用 EL2 由处于非安全状态的系统内存管理单元 (SMMU) 实现时,管理程序使用它来限制来自设备上游的非安全物理地址空间的可见性 SMMU 仅分配给控制设备的 VM 的那些区域。
(2)、如果安全 EL1&0 阶段 2 转换机制(当启用 EL2 由处于非安全状态的 CPU 实现时),则管理程序使用它来将非安全物理地址空间的可见性从 VM 限制到仅那些具有 已分配给 VM。
partition manager使partition能够交换消息(请参阅第 4 章消息传递)。 它还使分区能够管理对从其他分区分配给它的内存区域的访问(请参阅第 5 章内存管理)。
在本框架的实现中,SPM 必须使用本规范中描述的概念和接口来履行前述职责。 Hypervisor 只能将框架用于正常世界和安全世界之间的通信和内存管理。 在这种情况下,Hypervisor 必须:
- 初始化VM 并通过实现定义机制将它们与其他VM 隔离。
- 实施分区管理器组件,该组件使用固件框架来启用两个端点之间的通信和内存管理。 例如,这可能是在 Hypervisor 中实现的 FF-A 驱动程序。
在此版本的固件框架中,假设分区管理器是通过 IMPLEMENTATION DEFINED 机制初始化的。
2.1 SPM architecture
SPM 的职责分为以下两个组件:
(1)、SPM Core (SPMC) 组件负责:
• 启动时的分区初始化和隔离。
• 运行时的分区间隔离。
• 运行时的分区间通信:
(a)、S-Endpoints。
(b)、S-Endpoints和NS-Endpoints。
(2)、SPM Dispatcher (SPMD) 组件负责:
• SPM 内核在启动时初始化。
• 将FF-A 呼叫从普通世界转发到SPMC。
• 将FF-A 呼叫从SPMC转发到普通世界。
当不需要区分这两个组件时,使用术语 SPM。 这两个组件的一些属性如下:
- 两个组件都可以访问整个物理地址空间,并且是可信计算基础的一部分。
- 如果两个组件位于不同的异常级别:
(1)、他们必须实现并报告一个相互兼容的固件框架版本。 详见 8.1.3 SPM 使用。
(2)、他们必须使用本规范中定义的 ABI 进行通信。 - SPMD 用于初始化 SPMC 的机制是 IMPLEMENTATION DEFINED。
- SPMD 组件必须在 AArch64 的 EL3 或 AArch32 执行状态的监视器模式下执行。
如下表格中列出了 SPMC 配置:
下表列出了该版本框架支持的 SPMC 和 SP 配置的组合:
• 第一行列出了所有可能的 SP 配置。
• 第一列列出了所有可能的 SPMC 配置。
• 行与列的交叉表示该行中的SP 配置是否受该列中的SPMC 配置支持。
2.2.1 SPM architecture with Secure EL2
S-EL2 SPMC(参见表 2.1 中的 SPM 配置 2)是在 Armv8.4 或更高版本系统上在安全状态下执行最小特权原则的基础,如第 1 章介绍中所述。 它必须至少支持以下 SP 配置之一。
(1)、 SPMC 使用 Armv8.1 VHE 来管理一个或多个运行在 S-EL0 或 Secure User 模式下的 SP。 它履行了 2.2 SPM 架构中列出的所有职责。 分配给 SP 的物理地址空间通过安全 EL2&0 转换机制实现的单级地址转换与其他 FF-A 组件隔离。
(2)、SPMC管理一个或多个以S-EL1或S-Supervisor模式运行的SP。 它履行了 2.2 SPM 架构中列出的所有职责。 当启用 EL2 时,分配给 SP 的物理地址空间通过安全 EL1&0 第 2 阶段转换机制与其他 FF-A 组件隔离。
这些配置的示例如图 2.1 所示
2.2.2 SPM architecture without Secure EL2
2.2.2.1 S-EL1 SPM core component
2.2.2.2 Secure Supervisor mode SPM core component
2.2.2.3 EL3 SPM core component
2.3 FF-A instances
FF-A instance是处于异常级别边界的两个 FF-A 组件的有效组合。 这些实例用于描述固件框架指定的接口。 FF-A 实例通过smc/hyc通信。 每个接口中调用者和被调用者的职责取决于调用它的 FF-A 实例
- 一个实例是physical instances,如果:
每个组件都可以独立管理其翻译机制。
每个组件的转换机制将虚拟地址映射到物理地址。 - 如果实例不是物理实例,则实例是virtual instances。
- SPMC 和SPMD 之间的实例称为secure physical FF-A instances。
- SPMC 和 SP 之间的实例称为secure virtual FF-A instances。
- 在普通世界中,实例之间:
Hypervisor 和 VM 称为non-secure virtual FF-A instances。
Hypervisor 和 SPMD 被称为non-secure physicalFF-A instances。
操作系统内核和 SPMD 在没有hypervisor的情况下称为non-secure physicalFF-A instances。
总结: 以上废话那么多,其实就是说两个意思:
- 1、instance的概念,如下图所示,红色圈起来了
- 2、有两种instance : physical FF-A instances 和 virtual FF-A instances. 如果instance两侧的组件都能有独立的MMU,则称之为物理的instance,反之则称为虚拟的instance
2.4 Conduits
2.5 Execution state
- The SPM in S-EL2 or EL3 must run in AArch64.
- The SPM in S-EL1 could run in AArch64 or AArch32.
- The Hypervisor in EL2 must run in AArch64.
- A S-EL0 SP could run in AArch64 or AArch32.
- An endpoint in S-EL1 or EL1 could run in either AArch64 or AArch32
总结:
1、SPM、Hypervisor 必需是aarch64,即EL2必需是64位
2、SPM 运行在S-EL1时(即SPMC at S-EL1), 可以是aarch64 也可以是 aarch32
3、S-EL1 SP、EL1 SP 可以是aarch64也可以是aarch32
4、S-EL0 SP 可以是aarch64也可以是aarch32
2.6 Memory types
在system reset 或 during system boot期间,每个内存区域都被分配给安全或非安全物理地址空间。 Normal World只能访问非安全物理地址空间中的内存区域。 Secure World可以访问两个地址空间中的内存区域。 转换表描述符中的非安全 (NS) 属性位确定访问是安全还是非安全内存。 在这个版本的框架中:
• 使用任何组件的转换机制中设置的 NS 位访问的内存称为Normal Memory。
• 在组件转换机制中清除 NS 位的情况下访问的内存称为Secure Memory。
2.7 Memory granularity and alignment
2.8 Partition identification and discovery
- Partitions是由16-bits ID和UUID(Unique Universal Identifier)标志的
- 一个Partition可以使用FFA_ID_GET来获取自己的ID
- 所有的FF-A组件都可以使用FFA_PARTITION_INFO_GET获取其它SP的ID
- 每一个SP都有一个ID,这个ID可以是定义在SP的manifest中的,也可以是在开机的时候动态分配的
2.9 Execution context
- 每一个endpoint都有一个或多个EC(execution contexts), 一个EC包含通用寄存器、系统寄存器、任何memory map的寄存器。这些寄存器必须由SPM maintained.
- SPM负责allocating、initializing、running这些SP中的EC,可能是physical PE,也可能是virtual PE.
- 一个EC由16-bit ID标志,这个ID也称为vCPU或执行上下文ID
术语
- UP endpoint : 一个SP中只有EC,也就只有一个PE
- MP endpoints:一个SP中有多个EC
migrating(迁移):
- UP endpoint必须能够migrating
- MP edpoints可以在这些PE之间migrating,也可以固定到特殊PE上(这种也叫pinned contexts)
- migrating的能力规定在endpoint manifest中
- S-EL0 partition必须是UP endpoint
一个SP中EC的个数不一定等于PE的个数,这个是在endpoint的manifest规定的。例如在VM的manifest规定哪些vcpu可以使用
2.10 System resource management
2.11 Primary scheduler
2.12 Run-time states
- Idle 闲置的。 执行上下文正在等待分配 CPU 周期来完成工作。
- Busy 忙碌的。 执行上下文已被分配 CPU 周期并正在执行工作,例如,运行应用程序线程来处理一条或多条消息。
- Preempted 被抢占。 执行上下文在工作时被中断抢占。