一、armV8 不仅有4级特权级别,还有2种模式即安全状态和非安全状态:
1、安全状态,Secure state:在安全状态下,一个处理器单元(Processing Element)可以访问secure和non-secure下的物理地址空间,以及secure的bank 寄存器。
2、非安全状态,Non-secure:非安全状态也被称为Normal world,在这种状态下,PE只能访问Non-secure的物理地址空间,并且访问系统寄存器也是non-secure的访问。
这里有个疑问安全状态下是不是不能访问系统控寄存器?还需要去扒arm官方文档。
注意:安全和非安全的本质是物理空间的隔离,即分为安全的物理地址和非安全的物理地址:
安全物理地址空间和非安全物理地址空间是相互独立的,并且是并行存在的。一个系统可以设计成有两个完全独立的存储系统。然而,大多数真实系统都将安全和非安全作为访问控制的属性。普通(非安全)世界只能访问非安全物理地址空间。安全的世界对这两个物理地址空间都可以访问。同样,这是通过转换表来控制的。
二、安全状态与非安全状态间切换
EL3是sec-world和non-sec world之间的gateway, 也就是说sec 想变成 non-sec,一定要经过EL3这条路。这同样可以说明跑在EL3下的管理程序为什么叫做 Secure monitor。如下图所示,为AArch64状态下的异常等级示意图:
根据这张图片,EL1 non-sec如何变成 EL1 sec ? 我们可以得出答案,先进入EL3 non-sec,设置SCR_EL3.NS 为1,这样就进入了EL3 sec,最后通过eret返回到el1 sec:
EL1 NSEC => EL3 NSEC
EL3 NSEC => EL3 SEC
EL3 SEC => EL1 SEC
除非从EL3改变了安全状态,否则安全状态不会随着异常级别的更改而更改。