在armv8中,有EL0、EL1、EL2、EL3四个权限级别. 低级别像高级别切换是通过触发异常来进行的。例如: (1)、在EL0时调用svc指令,触发一个同步异常,cpu则会陷入EL1; (2)、在EL0时来了一个IRQ或FIQ,会触发一个异步异常,cpu则会陷入EL1或EL2或EL3(根据SCR寄存器中中断的配置来决定); 高级别向低级别切换是...
正如前面安全状态中所述,当处于 EL0/1/2 时,SCREL3.NS 位控制处理器处于哪个安全状态。然而,EL3 始终处于安全状态,而不管 SCREL3.NS 位如何。在 EL3 中时,SCR_EL3.NS 允许软件控制操作哪些安全状态 TLBI。 例如,在 EL3 处执行: SCR_EL3.NS==0:影响安全 EL0/1 转换机制 SCR_EL3.NS==1:影响非...
但是呢,在高异常等级,通过修改spsel,也可以使用SP_EL0 3、SCR_EL3 :(Secure Configuration Register) NS :0-secure state, 1-NonSecure state IRQ: 0-运行在EL3以下时irq不会target到EL3, 1-irq总是target到EL3 FIQ: 0-运行在EL3以下时fiq不会target到EL3, 1-fiq总是target到EL3 EA, bit [3] : –0...
例如,如果 EL3 允许 AArch32,那么它必须在所有较低的异常级别上都允许 许多实现允许所有执行状态和所有异常级别,但存在有限制的现有实现。 例如,Cortex-A32 只允许任何异常级别的 AArch32 一些现代实现,例如 Cortex-A55,实现了所有异常级别,但只允许 AArch32 在 EL0。(例如可参考这篇文章:Cortex-A76仅EL0支持...
如果处理器支持安全EL2,需要在EL3中使能SCR_EL3.EEL2标志位。设置该标志位允许进入EL2,且使能安全状态下的虚拟化。 在安全虚拟化可用之前,EL3通常运行安全状态切换软件和平台固件。这是因为我们想要尽量减少EL3中的软件数量,让EL3更容易安全。安全虚拟化允许我们将平台固件移动到EL1。虚拟化为平台固件和可信内核提供...
也就是说,当FEAT_DoubleFault开启之后,且SCR_EL3.EASE比特设置为1, 那么此时target到EL3的 Synchronous External abort将会跳转到Serror offset。 在中断产生之后,PC(或PE 或 Core 或 cpu)将跳转到VBAR + 中断offset处。事实上在armv8-aarch64或armv9体系中,有3个VBARELx寄存器,另外对于VBAREL1虽然只有一个,...
此时,中断被当前 EL 处理即可,故 scr.irq 需设置为 0; 当前执行在 EL3,则触发方式为 fiq, 此时,FIQ 需要被设置为 1,中断被路由到 EL3,然后转发给 non secure EL1。 EL3 中断 当前执行在 secure EL1,则触发方式为fiq
ARMv8 相较于 ARMv7,在整体架构上有了较大的变化,ARMv8 实现了 4 个异常等级 EL0~EL3,EL0 运行用户态程序,EL1 运行 Guest OS,EL2 运行 hypervisor,EL3 运行 secure monitor 程序。 EL0、EL1 是 ARM 芯片必须实现的异常级别,EL2、EL3 异常级别是可选的 ...
虚拟化扩展最早是在Armv7-A引入的。在Armv7-A中的Hyp模式等同于AArch32中的EL2,仅仅在非安全世界才存在。作为一个可选特性,Armv8.4-A增加了安全世界下EL2的支持。支持安全世界EL2的处理器,需配置EL3下的SCR_EL3.EEL2比特位来开启这一特性。设置了这一比特位,才允许使用安全状态下的虚拟化功能。
SCR_EL3.IRQ=0, IRQs are routed to FEL SCR_EL3.EA: SError interrupt routing(aarch64); External Abort interrupt routing(aarch32) EA=1: routed to EL3 EA=0: routed to FEL SCR_EL3.NS=1, EL0, EL1是non-secure state SCR_EL3.NS=0, EL0, EL1是secure state ...