I am trying to understand how QEMU handles interrupts for ARM processors. I have an empty binary blob (i.e. Not linux - just some build code) that was built for ARM1176. When launched in QEMU during initialization, the code in the binary block sets CPSR bit 13, indicating that the interrupt vector table is at 0xFFFF0000. Having connected GDB and having reset instructions to this address, I really see the corresponding table of interrupt vectors. On IRQ, it goes on to 0xFFFF0018, which simply makes the transition to 0xFFFF00070, which has the code for the first irq_handler and ultimately goes to the second irq_handler.
This is good, but when I look at connecting interrupts in QEMU, every link I find connects my own irq_handler. If you allocate irq, I need to provide qemu_irq_handlerwhich is called when IRQ starts. But in this case, I do not want my handler to be called. I assumed that QEMU would emulate an ARM processor and go to 0xFFFF0018when I, for example, call qemu_set_irq()and run the code there.
I'm sure something is missing in my understanding, but is there no way to get QEMU to go to the interrupt vector table and run the code there when the interrupt starts, for example, using qemu_set_irq()?
source
share