我使用信任区仿真运行 qemu。64 位 Linux 在普通世界 (NWD) EL1 中运行,一些专有代码在 EL3 和安全世界 (SWD) EL1 中运行。我也有这样的中断配置:1)为SWD分配了FIQ;2) 为 NWD 分配 IRQ。
还有三种情况 NWD 可以被 FIQ 中断:1)NWD 在内核模式(64 位 Linux)下执行 2)NWD 在 64 位用户模式下执行 3)NWD 在 32 位用户模式下执行
当 FIQ 发生时,它被 EL3 捕获。然后 NWD 上下文被 EL3 的代码保存,FIQ 的处理程序开始执行。从 el3 返回 NWD 1),2) 情况后一切正常 - 中断的过程继续工作。但是在案例 3 中从 el3 返回到 NWD 后,中断过程发生了分段错误。这也是从 el3 返回到 NWD EL0 - 0x600f0010 - 看起来没问题之前的 spsr_el3 寄存器的值。此外,我已经比较了案例 3 中保存和恢复的上下文,它看起来也不错。看起来这是 qemu 中的一些错误。有人知道是什么问题吗?