0 参考资料
ARM Cortex-A(armV7)编程手册V4.0.pdf
ARM体系结构与编程第2版
2 Cortex-A7运行模式
2.1 运行模式
Cortex-A7共有9种运行模式,如下图所示:
除了用户模式之外其它模式均属于特权模式,在特权模式下处理器可以访问所有系统资源,也可以任意切换运行模式。
注:
在新的ARMv7架构中,加入了TrustZone安全拓展,因此新加入了一种运行模式:Monitor模式,此外,新的处理器架构还能支持虚拟化拓展,加入了另外一种运行模式:Hyp模式。
2.2 特权级别
每个工作模式都具有自己的特权级别。特权定义如下:
PL0:在用户模式下执行的应用软件级操作的特权级别。软件在用户模式下执行的操作被描述为无特权操作。在PL0上执行的操作只能进行非特权内存访问。
PL1:除用户模式和Hyp模式外的所有模式下的软件执行均在PL1。通常,操作系统在PL1执行。一般来说,操作系统将在PL1模式及PL0(用户模式)下执行应用程序。
PL2:Hyp模式通常由管理程序使用,如果实施了虚拟化扩展,管理程序将在PL2执行(Hyp模式)。管理程序将控制并启用多个操作系统共存并在同一处理器上执行。
各个模式的特权级定义下图:
2.3 运行模式设置寄存器
运行模式可以通过CPSR寄存器设置,CPSR寄存器定义如下:
最后5bit用来设置运行模式:
运行模式对应的寄存器值如下(红框标记处):
2 Cortex-A7寄存器组
Cortex-A7包含16个32位通用寄存器(R0-R15),其中R13是SP(栈指针)、R14是LR(程序链接寄存器)、R15是PC(程序计数器)。如下图所示:
Cortex-A7共有9种运行模式,这9种运行模式共用了一些寄存器,也有些是模式独占的寄存器。下图被标记为“Banked”的寄存器只有在对应的运行模式下才可见,浅色寄存器表示和第一列共用同一个物理寄存器。
我们可以看到,除了用户模式及系统模式共用SP、LR,其余模式均有自己独立的SP、LR。这也是为什么基于Cortex-A7进行开发时,可以在链接脚本中看到多个栈的定义: