嗨 所有 我试图EL2例外从EL3做过渡,但EL3模式ERET后,将模式更改为EL2,但只要何时会执行EL2的第一条指令,然后去例外...
对于Armv8-A中的每个安全到非安全的过渡,都会发生这种情况。
如果您知道为什么会发生,请指导。
嗨 所有 我试图EL2例外从EL3做过渡,但EL3模式ERET后,将模式更改为EL2,但只要何时会执行EL2的第一条指令,然后去例外...
对于Armv8-A中的每个安全到非安全的过渡,都会发生这种情况。
如果您知道为什么会发生,请指导。
对于背景阅读,我建议您看一下此页面上链接的“引导:裸机”指南:
developer.arm.com/.../学习架构
特别是第5.5章,它讨论了在异常级别之间转换。
关于您的特定问题,可能有几处错误。当您重新输入EL3时,ESR_EL3中的值应告诉您。常见问题:
SCR_EL3.RW
有两个控制下级EL的执行状态(AArch32或AArch64)的控件。在ERET和RW位(SCR_EL3.RW和HCR_EL2.RW)之前,有您要编程到SPSR_EL3中的值。从EL3输入EL2时,需要确保将SCR_EL3.RW设置为与您在SPSR中输入的内容匹配(即它们都说AArch64或都说AArch32)。
SCR_EL3.NS
在Armv8.0和Armv8.2-A处理器上,EL2仅以非安全状态存在。SCR_EL3.NS位控制较低的EL是“非安全”还是“安全”。因此,要输入EL2,您需要将NS位配置为1(非安全)
这些是其他常见问题,但与您描述的症状不太吻合。
EL2 MMU寄存器
SCTLR_EL2寄存器控制MMU和EL2的缓存-它没有定义的复位值。在首次进入EL2之前,您需要确保已将其初始化为安全的初始值。向其写入0通常就足够了。
地址空间
再次假设使用8.0或8.2处理器。在非安全状态下,您只能访问非安全物理地址。您需要确保输入EL2的地址是NS物理地址。