You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iMX8M Mini平台ARM Cortex-A53从AArch64(EL3)切换到AArch64(EL1)失败问题排查

ARM Cortex-A53 EL3(AArch64) → EL1(AArch64) 异常切换失败排查

针对你提供的代码,以下是可能的问题点及修复建议:

1. SCR_EL3 配置缺失关键位

你的SCR_EL3设置中,RW位(bit10)配置正确(设为1表示目标EL1为AArch64模式),但遗漏了EA位(bit3)的配置。该位控制SError异常的路由,当目标EL1为AArch64时,需将EA设为1,确保SError异常能正确路由到EL3,避免切换过程中触发未处理异常。添加如下指令:

orr     x2, x2, #(1 << 3)       /* EA=1,将SError异常路由至EL3 */

2. EL1入口地址未对齐

AArch64指令要求4字节对齐,若el1_entry_aarch64标签未对齐,eret后取指令会触发异常。在入口标签前添加对齐指令确保地址合规:

.align 2
el1_entry_aarch64:
    /* EL1初始化代码,例:设置SP_EL1 */
    mov sp, #0x80000000
    ...

3. EL1核心寄存器未初始化

切换至EL1前,需确保SCTLR_EL1处于合法初始状态。若此前切换到AArch32 EL1时修改过该寄存器,切换回AArch64 EL1前需重置。在EL3中提前设置SCTLR_EL1为安全初始值:

mov     x3, #0
msr     sctlr_el1, x3           /* 关闭MMU、缓存等,进入EL1初始状态 */

4. 异常状态检查

若此前切换到AArch32 EL1后存在未处理的挂起异常,eret后可能直接触发EL3异常,导致切换失败。在切换前清除异常掩码并检查挂起状态:

msr     daifclr, #0xf           /* 清除所有异常掩码 */

验证要点

  • 用调试器确认eret执行前SCR_EL3、SPSR_EL3、ELR_EL3的寄存器值与预期一致
  • 检查el1_entry_aarch64的地址是否4字节对齐,且入口代码为合法AArch64指令
  • 确认EL1的SCTLR_EL1初始配置符合AArch64模式要求

内容的提问来源于stack exchange,提问作者Hariharan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:11:15