我使用信任区域模拟运行qemu。 64位Linux在普通世界(NWD)EL1中运行,一些专有代码在EL3和安全世界(SWD)EL1中运行。我也有这样的中断配置: 1)为社署分配FIQ; 2)为NWD分配IRQ。
还有三种情况可以被FIQ中断nwd: 1)NWD在内核模式下执行(64位Linux) 2)NWD以64位用户模式执行 3)NWD以32位用户模式执行
当FIQ发生时,它被EL3困住。然后由EL3的代码保存NWD上下文,并且FIQ的处理程序开始执行。 从el3返回到NWD 1),2)案例都很好 - 中断过程继续工作。 但是从案例3中从el3返回到NWD之后,对于中断的过程发生了分段故障。这也是spsr_el3寄存器的值,从el3返回到NWD EL0 - 0x600f0010 - 看起来没问题。 此外,我已经在案例3的EL3中比较了保存和恢复的上下文,它也看起来不错。 看起来这是qemu中的一些错误。有人知道这是什么问题吗?
答案 0 :(得分:0)
其实我已经解决了这个问题。在'eret'指令的实现中,问题出现在'op_helper.c'文件中:'env-> regs [15] = env-> elr_el [1]& 〜为0x1;”。 '1'需要更改为'cur_el'。此错误已在最新的qemu修复,所以我需要更新我的。