我试图了解 QEMU 如何处理 ARM 处理器的中断。我有一个为 ARM1176 构建的裸机二进制 blob(即,不是 linux——只是一些汇编代码)。在 QEMU 中运行时,在初始化期间二进制 blob 中的代码设置 CPSR 的第 13 位,指示中断向量表位于0xFFFF0000
. 连接 GDB 并将指令转储到该地址,我确实可以看到相应的中断向量表。在 IRQ 上,它跳转到0xFFFF0018
,它只是跳转到0xFFFF00070
,它包含第一个 irq_handler 的代码,并最终跳转到第二个 irq_handler。
这很好,但是当我查看在 QEMU 中连接中断时,我发现的每个引用都在连接我自己的 irq_handler。如果你分配一个 irq,我需要提供一个qemu_irq_handler
在 IRQ 被触发时被调用的。但在这种情况下,我不希望我自己的处理程序被调用。例如,我假设 QEMU 会模拟 ARM 处理器并跳转到0xFFFF0018
当我调用qemu_set_irq()
并开始在那里运行代码时。
我确定我的理解有些欠缺,但是有没有办法让 QEMU 在触发中断时跳转到中断向量表并在那里运行代码,例如,使用qemu_set_irq()
?