快速链接:
引流关键词: optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…
目录
第一部分 简介
1、Overview
Arm architecture为 processor 或 core的设计提供了基础,通常我们可以将processor 或 core称为Processing Element(PE)。
Arm 架构用于一系列技术,集成到System-on-Chip(SoC) 设备中,例如智能手机、微型计算机、嵌入式设备,甚至服务器。
该架构为软件开发人员公开了通用指令集和工作流程,也称为Programmer’s model。这有助于确保架构不同实现之间的互操作性,以便软件可以在不同的 Arm 设备上运行。
2、About the Arm architecture
Arm architecture是当今比较主流的一类处理器架构,每年有着数十亿级的基于ARM的设备产生.
ARM architecture又分为3类: A, R, M
这三类允许 Arm 架构根据不同用例的需求进行定制,同时仍然共享一些基本功能 。
注:Arm Cortex 是用于 Arm 处理器 IP 产品的品牌名称。 arm的合作伙伴提供使用 Arm 架构的其他处理器品牌
3、架构(architecture)到底是什么意思呢
当我们使用术语架构时,我们指的是功能规范。 在 Arm 架构的情况下,我们指的是处理器的功能规范。 架构指定处理器的行为方式,例如它有什么指令以及指令做什么。
您可以将架构视为硬件和软件之间的规则。 该架构描述了软件可以依赖硬件提供哪些功能。 一些功能是可选的,我们将在稍后的微架构部分讨论。
架构可能会规定:
4、Architecture and micro-architecture
架构(Architecture)不会告诉您处理器是如何构建和工作的。 处理器的构建和设计被称为微架构。 微架构( micro-architecture)告诉你处理器是如何工作的。
微架构(Micro-architecture)包含:
- Pipeline length and layout.
- Number and sizes of caches.
- Cycle counts for individual instructions.
- Which optional features are implemented
例如,Cortex-A53 和 Cortex-A72 都是 Armv8-A 架构的实现。 这意味着它们具有相同的架构,但它们具有非常不同的微架构,如下图所示
5、Arm architecture的版本
Arm 架构是最著名的 Arm 规范,但它并不是唯一的规范。 Arm 对构成现代片上系统 (SoC) 的许多组件具有类似的规范。 下图提供了一些示例:
- Generic Interrupt Controller
- System Memory Management Unit (SMMU or IOMMU)
- Generic Timer
- Server Base System Architecture and Trusted Base System Architecture
- Advanced Microcontroller Bus Architecture(AMBA)
6、Arm documentation的定义
- Arm Architecture Reference Manual (Arm ARMs) - 架构类的文档, 一般就看这个
- Arm Cortex processor has a Technical Reference Manual (TRM) - arm core的文档, 基本不用看
- Arm Cortex processor also has a Configuration or Integration Manual (CIM) - 可能是给ASIC看的
例如你要学习 Cortex-A75 processor,可以去查看以下文档:
7、ARM timeline
(注:以下的time都是自己整理,不一定都正确)
第二部分 armv7/armv8/armv9 架构部分的特性总结
关注"Arm精选"公众号,备注进ARM交流讨论区。
1、Armv9-A architecture
Armv9-A 架构建立在 Armv8-A 架构的基础上并向前兼容。 Armv9-A 架构构成了 Arm 基础系统架构的基础——该规范概述了一种标准,可确保硬件和固件在系统级的广泛应用中具有兼容性。
Armv9-A 架构引入了一些主要的新特性:
- SVE2: extending the benefit of scalable vectors to many more use cases
- Realm Management Extension (RME): extending Confidential Compute on Arm platforms to all developers. Read more about Confidential Compute and Arm architecture security features
- BRBE: providing profiling information, such as Auto FDO
- Embedded Trace Extension (ETE) and Trace Buffer Extension (TRBE): enhanced trace capabilities for Armv9
- TME: hardware transactional memory support for the Arm architecture
2、Armv8-A architecture
Armv8-A 架构引入了使用 64 位和 32 位执行状态的能力,分别称为 AArch64 和 AArch32。 AArch64 执行状态支持 A64 指令集。 它在 64 位寄存器中保存地址,并允许基本指令集中的指令使用 64 位寄存器进行处理。 AArch32 执行状态是一个 32 位执行状态,它保留了与 Armv7-A 架构的向前兼容性,增强了该配置文件,使其可以支持 AArch64 状态中包含的某些功能。 它支持 T32 和 A32 指令集。
Armv8-A 架构允许不同级别的 AArch64 和 AArch32 支持,例如:
- AArch64 only designs
- AArch64 designs that also support AArch32 operating systems and virtual machines
- AArch64 support with AArch32 at (unprivileged) application level only
3、Armv7-A architecture
Armv7-A 架构引入了架构配置文件的概念,这个概念在 Armv8-A 和 Armv9-A 中得到延续。 Armv7-A架构:
- 以多种模式实现传统的Arm架构
- 支持基于内存管理单元 (MMU) 的虚拟内存系统架构 (VMSA)
- 支持 Arm (A32) 和 Thumb (T32) 指令集
该架构还支持多种扩展:
- Security Extensions
- Multiprocessing Extensions
- Large Physical Address Extension
- Virtualization Extensions
- Generic Timer Extension
- Performance Monitors Extension
所有这些扩展都是可选的,它们提供的大部分功能都包含在 Armv8-A 架构中。
4、Armv9-A特性总结
Arm Application-profile (A-profile) 架构面向高性能市场,例如 PC、移动、游戏和企业。 A-profile 架构的最新版本是 Armv9-A 和 Armv8-A。 Armv9-A和Armv8-A的特性对比请看下表:
Feature | Architecture versions | Description |
---|---|---|
AArch64 | Armv8.0-A Armv9.0-A | AArch64 是 Arm 架构的 64 位执行环境。包括: (1)、 大物理和虚拟地址空间 (2)、 64 位寄存器 (3)、 高性能的自旋锁 (4)、 高效的缓存管理 (5)、 为 C++11、C11、Java 内存模型设计的 Load-Acquire、Store-Release 指令。 (6)、 Arm 架构的 64 位执行环境。 |
AArch32 | Armv8.0-A Armv9.0-A(EL0 only) | Arm 架构的 32 位执行环境。 提供与 Armv7-A 及更早版本的兼容性。 |
Virtualization | Armv8.0-A Armv9.0-A | 支持hypervisors 和virtualization |
TrustZone | Armv8.0-A Armv9.0-A | TrustZone 通过内置于 CPU 中的硬件强制隔离提供了一种高效的、系统范围的安全方法。 |
Realm Management Extension (RME) | Armv9.0-A | Realm Management Extension (RME) 建立在 TrustZone 之上,具有以下功能: (1)、两个额外的安全状态 (2)、两个额外的物理地址空间 (3)、在安全状态之间动态移动资源的能力 这些功能支持 Arm 机密计算架构 (Arm CCA) 和动态 TrustZone。 |
Hardware-accelerated cryptography | Armv8.0-A Armv9.0-A | ARM cryptography extension |
Neon | Armv8.0-A Armv9.0-A | Neon 技术是一种打包的 SIMD 架构。 Neon 寄存器被视为相同数据类型元素的向量,Neon 指令同时对多个元素进行操作。 该技术支持多种数据类型,包括浮点和整数运算。 |
Virtualization Host Extension (VHE) | Armv8.1-A Armv9.0-A | 这些增强功能通过减少在host os和guest os之间转换时相关的软件开销来提高 Type 2 hypervisors的性能。 这些扩展允许host os在 EL2 上执行,而不是在 EL1 上执行,而无需进行大量修改。 |
Privilege Access Never (PAN) | Armv8.1-A Armv9.0-A | PAN 允许内核阻止访问非特权位置,从而提供更高的健壮性。 |
Statistical Profiling Extension (SPE) | Armv8.2-A Armv9.0-A | 在指令或微操作的基础上设置采样标准,然后定期采样。 然后,每个样本将与该样本关联的上下文收集到一个分析记录中,在任何给定时间只编译一个记录。 当在长时间运行大型工作负载的系统上连续采样时,分析大型工作样本集可以提供对软件执行及其相关性能的深入了解。 |
Scalable Vector Extensions (SVE) | Armv8.2-A | SVE 为具有可变矢量长度的 SIMD 提供支持。 SVE 支持向量长度不可知的编码风格,其中代码不需要重新编写或重新编译,因为它动态地适应实现的向量长度。 SVE 架构允许实现向量长度高达 2048 位,其中向量长度必须是 128 位的倍数。 SVE 还支持为固定向量长度编写的代码。 |
Pointer authentication | Armv8.3-A Armv9.0-A | 计算机攻击正变得越来越复杂。 这方面的示例是利用机制,例如在Return-Orientated Programming(ROP) 和Jump-Orientated Programming(JOP) 中使用gadgets 。 为了缓解此类漏洞,Armv8.3-A 引入了一项功能,可在将寄存器的内容用作间接分支或数据引用的地址之前对其进行身份验证。 对于地址验证,该功能使用 64 位地址值中的高位,通常与地址空间的签名扩展相关联。 这允许在值的高位中引入Pointer Authentication Code (PAC) 作为新字段。 |
Nested Virtualization | Armv8.3-A Armv9.0-A | 人们对云计算越来越感兴趣,尤其是对日益普遍的用例感兴趣,即用户从基础设施即服务 (IaaS) 提供商处租用虚拟机。 嵌套虚拟化是一个有吸引力的提议,其中打算在此虚拟机上运行的工作负载包括使用管理程序。 |
Memory Tagging Extension (MTE) | Armv8.5-A Armv9.0-A | Memory tagging extension(MTE)使开发人员能够识别他们程序中的内存安全违规。 |
Branch Target Identification (BTI) | Armv8.5-A Armv9.0-A | BTI 允许软件识别跳转分支的有效目标。 BTI 补充了对指针身份验证的支持,提供了针对 JOP 技术的防御。 |
GEneral Matrix Multiply (GEMM) | Armv8.6-A Armv9.0-A | 添加新的高级 SIMD (Neon) 和 SVE 指令以加速矩阵运算,大大减少所需的内存访问次数。 |
BFloat16 | Armv8.6-A Armv9.0-A | 支持 BFloat16 数据类型的高级 SIMD (Neon) 和 SVE。 BF16 最近成为一种专门为神经网络的高性能处理量身定制的格式。 |
High precision timers | Armv8.6-A Armv9.0-A | 通用定时器频率增加到 1GHz 的新标准。 |
64-byte load and stores | Armv8.7-A Armv9.0-A | 企业系统的一个增长趋势是引入可以使用 64 字节原子加载或存储访问的加速器。 这些用于向队列添加项目,并且在某些情况下可以表示入队操作的成功或失败。 |
Scalable Vector Extension v2 (SVE2) | Armv9.0-A | SVE2 是 Armv8-A SVE 的超集,具有扩展的功能。 SVE2 指令集增加了全面的定点算术支持。 |
Transactional Memory Extension (TME) | Armv9.0-A | 事务内存扩展为 Arm 架构带来了硬件事务内存 (HTM) 支持。 事务内存用于解决编写高并发、多线程程序的困难,通过减少由于锁争用导致的序列化,粗粒度、线程级并行的数量可以随着 CPU 的数量更好地扩展。 |
Branch Record Buffer Extensions (BRBE) | Armv9.2-A | — |
第三部分 arm core的介绍和总结
TODO
第四部分 ARM 指令集介绍
1、怎样去学习ARM?
- ➀ 学习指令集
- ➁ 学习架构
- ➂ 学习arm core
- ➃ 学习arm IP
- ➄ 学习SOC手册
- ➅ 学习规范,包括FF-A规范
- ➆➇➈ 根据自己的需求,学习相关软件或OS
2、armv8汇编学习-书籍推荐
学个鸡腿学, 其实不用看这样的书。点击此处看这个链接就可以了
ARM Assembly Language, 2nd Edition
ARM 64-Bit Assembly Language
添加vx : arm_2023,备注进ARM交流讨论区