为什么 Arm® Cortex®-R52+ 上电之后,运行在 hyp , 而不是 el3
这个问题涉及到 ARMv7 和 ARMv8 架构中异常级别(Exception Levels)的区别,以及具体芯片的实现选择。
我来帮你理清一下。
- 异常级别背景
ARMv7 有几种运行模式,其中和虚拟化相关的是:
Hyp mode(监控模式),用于在 ARMv7 上实现虚拟化。
非安全状态的 PL1 和 PL2(Hyp 属于 PL2),安全状态的 Monitor mode(用于 TrustZone 切换)。
ARMv8-A/R 引入了 Exception Levels (EL0 - EL3):
EL3:最高特权,负责安全状态切换(Secure ↔ Non-secure)。
EL2:用于虚拟化(Hypervisor)。
EL1:OS 内核级别。
EL0:应用级别。
ARM Cortex-R52 是基于 ARMv8-R 架构的,它支持 EL0/EL1/EL2,并且可以选择是否实现 EL3。
- Cortex-R52 的 EL 配置
Cortex-R52 有两种可能的配置:
支持 EL3:那么复位后,CPU 会从 EL3 开始执行(最高特权,安全状态)。
不支持 EL3:那么复位后,CPU 会从 EL2(即 Hyp mode,在 ARMv8-R 里叫 EL2)开始执行,并且此时系统没有安全非安全状态切换能力,默认处于安全状态(或者由硬件固定为安全)。
- 你的情况:上电运行在 EL2(Hyp)而不是 EL3
这通常是因为:
芯片设计时选择不实现 EL3。
在 ARMv8-R 架构中,EL3 是可选的。如果 R52 被配置为没有 EL3,那么复位后 CPU 就进入 EL2,并且系统处于安全状态(或者单一状态,没有 TrustZone 概念,取决于具体实现)。
在 ARMv8-R 里,EL2 是必须实现的(因为 R52 强调实时与虚拟化,EL2 用来做空间隔离,两个虚拟机)。
如果芯片是用于汽车或工业控制,可能不需要 TrustZone 安全扩展,因此去掉 EL3 可以简化设计。
-
如何确认
查看芯片的数据手册或 TRM(Technical Reference Manual)会说明复位后的异常级别,以及 EL3 是否存在。
例如,某些 Cortex-R52 实现可能通过输入信号 INITNS 或配置引脚来决定复位时的安全状态,但如果没有 EL3,就固定从 EL2 开始。
-
总结
Cortex-R52 上电运行在 Hyp(EL2)而不是 EL3 的原因:
该芯片的实现中 EL3 被移除(可选功能未实现)。
因此复位直接进入 EL2,这是符合 ARMv8-R 架构规定的。
如果需要进入 EL1 或 EL0,软件可以通过改变 SCR_EL3(如果存在 EL3)或 HCR_EL2 的配置,然后执行 ERET 来实现特权级切换。