棋子 · 2020年01月08日

在ARMV8-A中如何从安全(EL3)转换为非安全异常级别?

嗨 所有 我试图EL2例外从EL3做过渡,但EL3模式ERET后,将模式更改为EL2,但只要何时会执行EL2的第一条指令,然后去例外...

对于Armv8-A中的每个安全到非安全的过渡,都会发生这种情况。

如果您知道为什么会发生,请指导。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2020年01月08日

对于背景阅读,我建议您看一下此页面上链接的“引导:裸机”指南:

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物理地址。

你的回答
关注数
1
收藏数
0
浏览数
3145
极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息