0

我使用信任区仿真运行 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 中的一些错误。有人知道是什么问题吗?

4

1 回答 1

0

其实我已经解决了。问题出在文件 'op_helper.c' 中执行 'eret' 指令:'env->regs [15]=env->elr_el [1] & ~0x1;'。'1' 需要更改为 'cur_el'。此外,此错误已在最新的 qemu 中修复,因此我需要更新我的错误。

于 2016-09-27T15:27:35.600 回答