我正在尝试理解QEMU如何处理ARM处理器的中断。我有一个裸机二进制文件(即,不是Linux——只是一些汇编代码),它是为ARM1176构建的。在QEMU中运行时,在初始化期间,二进制blob中的代码设置CPSR的第13位,指示中断向量表位于
这很好,但当我查看在QEMU中连接中断时,我找到的每个参考都是连接我的自己的irq_handler。如果您分配了一个irq,我需要提供一个
我确定我理解上有所欠缺,但是难道没有一种方法可以让QEMU跳转到中断向量表并在触发中断时运行那里的代码,例如使用
0xFFFF0000
。连接GDB并转储该地址处的指令,我确实可以看到相应的中断向量表。在IRQ上,它跳转到0xFFFF0018
,它只是跳转到0xFFFF00070
,其中包含第一个irq_handler的代码,并最终跳转到第二个irq_handler。这很好,但当我查看在QEMU中连接中断时,我找到的每个参考都是连接我的自己的irq_handler。如果您分配了一个irq,我需要提供一个
qemu_irq_handler
,当IRQ被触发时调用该处理程序。但在这种情况下,我不想调用自己的处理程序。我假设QEMU会模拟ARM处理器并在我调用qemu_set_irq()
并开始在那里运行代码时跳转到0xFFFF0018
。我确定我理解上有所欠缺,但是难道没有一种方法可以让QEMU跳转到中断向量表并在触发中断时运行那里的代码,例如使用
qemu_set_irq()
吗?
cpu_interrupt(&env, CPU_INTERRUPT_HARD);
似乎是我正在寻找的。这会跳转到中断向量表并从那里继续执行。 - user2071017