tips:加E后缀的是车规级别的芯片,是给车辆使用的。
微架构:微架构是在架构的基础上实现的具体IP产品,比如ARM v8.0 架构的 A72,ARM v9.0的A715都是微架构。
1.TRM(Technical Reference Manual):Arm Cortex processor has a Technical Reference Manual,ARM 核的文档,具体实现定义的,比如查看某个寄存器的具体实现;
2.Arm ARMs(ARM Architecture Reference Manual):架构类文档,最常用;
3.CIM(Configuration or Integragtion Manual):Arm Cortex processor also has a Configuration or Integragtion Manual,一般给ASIC看的,会有板卡飞线等信息。
Exception Level(EL) | Stack pointer(SP) options | 含义 |
---|---|---|
EL0 | SP_EL0t | EL0下的 SP_EL0 |
EL1 | SP_EL1t ,SP_EL1h | 在EL1中使用SP_EL0,SP_EL1 |
EL2 | SP_EL2t ,SP_EL2h | 在EL2中使用SP_EL0,SP_EL2 |
EL3 | SP_EL3t ,SP_EL3h | 在EL3中使用SP_EL0,SP_EL2 |
SP 栈指针一共有4个寄存器SP_EL0,SP_EL1,SP_EL2,SP_EL3。
在EL0只能使用SP_EL0寄存器;在EL1不仅能能使用SP_EL1寄存器,还能使用SP_EL0寄存器;在 EL2不仅能能使用SP_EL2寄存器,还能使用SP_EL0寄存器;在EL3不仅能能使用SP_EL3寄存器,还能使用SP_EL0寄存器;
t:就是SP_EL0 ;h:就是SP_ELn
1、ARM有多少种模式?
7种,8种,9种都正确。在ARMv7中大部分都是9种模式;部分核是8种模式,不支持Hyp模式;部分是7种,不支持Hyp模式和Secure Monitor 模式
架构 | 微架构 | User | Privilege | Secure Monitor | Hypervisor |
---|---|---|---|---|---|
ARMv4 | ARM 7 | √ | √ | ||
ARMv5 | ARM 7 | √ | √ | ||
ARMv7 | Cortex-A8 | √ | √ | √ | |
ARMv7 | Cortex-A9 | √ | √ | √ | |
ARMv7 | Cortex-A5 | √ | √ | √ | |
ARMv7 | Cortex-A7 | √ | √ | √ | √ |
ARMv7 | Cortex-A15 | √ | √ | √ | √ |
ARMv8 | Cortex-A53 | √ | √ | √ | √ |
ARMv8 | Cortex-A53 | √ | √ | √ | √ |
ARMv8 | Cortex-A57 | √ | √ | √ | √ |
ARMv8 | Cortex-A72 | √ | √ | √ | √ |
ARMv8 | Cortex-A35 | √ | √ | √ | √ |
ARMv8 | Cortex-A73 | √ | √ | √ | √ |
ARMv8 | Cortex-A55 | √ | √ | √ | √ |
ARMv8 | Cortex-A75 | √ | √ | √ | √ |
ARMv8 | Cortex-A76 | √ | √ | √ | √ |
在不考虑RME扩展的前提下
1.ARM架构定义了两种安全状态 Secure state和Non-secure state;
2.ARM架构定义了两套物理地址空间:Secure和Non-secure;
3.如果PE是Non-secure state,那么它只能访问非安全物理地址空间:
4.如果PE是Secure state,那么它既能访问安全物理地址空间,也能访问非安全物理地址空间;
5.EL3永远是Secure state;
6.EL2/EL1/ELO是安全状态还是非安全状态,要根据SCREL3.NS比特:
7.SCR EL3.NS比特只能在EL3被修改
8.EL2是安全状态必须满足以下条件:(1)FEAT SEL2 is implemented(2)The Effective value of SCR EL3.EEL2 is 0b1(3)The Effective value of SCR EL3.NS is 0b0.
这个是由于v8中最初是32位架构,后面推出64位架构,V9第一款也是支持32和64,但是后面出的就是全支持64位架构,所以需要学习下这个执行状态切换,但是在未来都会使用64位架构,就不会存在这个问题了。
1.执行状态只能在异常从lower Exception level进入higher Exception level时,或从higher Exception level异常返回到lower Exception level时发生修改
2.如果异常进入或异常返回没有发生Exception Level变化,那么此时执行状态是不能被修改的
3.当产生一个异常从lower Exception level进入higher Exception level时,此时执行状态可能不变,或从aarch32变成arch64,不能从aarch64变成aarch32
4、当一个异常返回从higher Exception level到lower Exception level时,此时执行状态可能不变,或从aarch64变成aarch32,不能从aarch32变成aarch64
5.reset也能导致执行状态的变化
在64位架构上可以运行64位或者32位,但是在32位架构之上只能运行32位
在 ARMv8 中,执行发生在四个异常级别之一。在 AArch64 中,异常级别决定了特权级别,类似于ARMv7中定义的特权级别。异常级别决定特权级别,因此在ELn执行对应于特权PLn。类似地,具有比另一个更大的n值的异常级别处于更高的异常级别。一个数字比另一个小的异常级别被描述为处于较低的异常级别。
异常级别提供了适用于 ARMv8 架构的所有操作状态的软件执行权限的逻辑分离。它类似于并支持计算机科学中常见的分层保护域的概念。
AArch64,64位执行状态:
1.提供31个64位通用寄存器,其中X30用作过程链接寄存器。
2.提供64位程序计数器(PC)、堆栈指针(SPs)和异常链接寄存器(ELRS)。
3.为SIMD向量和标量浮点支持提供32个128位寄存器。
4.提供单个指令集A64定义了ARMV8异常模型,有四个异常级别,EL0-EL3,提供了一个执行特权层次结构
5.提供对64位虚拟寻址的支持
6.定义许多包含PE状态的进程状态(PSTATE)元素。A64指令集包括直接操作各种PSTATE元素的指令
7.使用表示可以访问寄存器的最低异常级别的后缀来命名每个系统寄存器。
AArch32,32位执行状态:
1.提供13个32位通用寄存器,以及一个32位PC、SP和link寄存器(LR)。LR同时用作ELR和过程链接寄存器。其中一些寄存器具有多个存储实例,用干不同的PE模式,
2.为从Hyp模式返回的异常提供一个ELR。
3.为高级SIMD向量和标量浮点支持提供32个64位寄存器。
4.提供两个指今集,A32和T32
5.支持基于PE模式的ARMv7-A异常模型,并将其映射到基于异常级别的ARMV8异常模型。
6.提供对32位虚拟寻址的支持。
7.定义许多包含PE状态的进程状态(PSTATE)元素。A32和T32指令集包括直接操作各种PSTATE元素的指令,以及使用应用程序(APSR)或当前程序状态寄存器(CPSR)访问PSTATE的指令