我想了解QEMU如何處理ARM處理器的中斷。我有一個裸機二進制blob(即,不是linux - 只是一些彙編代碼),它是爲ARM1176構建的。在QEMU中運行時,在初始化過程中,二進制BLOB中的代碼將CPSR的位13置位,表示中斷向量表位於0xFFFF0000
。連接GDB並在該地址轉儲指令,我確實可以看到相應的中斷向量表。在IRQ上,它跳轉到0xFFFF0018
,它跳轉到0xFFFF00070
,它有第一個irq_handler的代碼,最後跳轉到第二個irq_handler。QEMU中的ARM中斷處理
這很好,但是當我在QEMU中查看中斷時,我發現每個引用都會連接我自己的irq_handler。如果你分配一個irq,我需要提供一個在IRQ被觸發時被調用的qemu_irq_handler
。但在這種情況下,我不希望自己的處理程序被調用。我假設QEMU將模擬ARM處理器,並跳到0xFFFF0018
,例如,我調用qemu_set_irq()
並開始在那裏運行代碼。
我確定我的理解有些問題,但是在沒有辦法讓QEMU跳轉到中斷向量表並在觸發中斷時運行代碼,例如qemu_set_irq()
?
實際上,調用'cpu_interrupt(&env,CPU_INTERRUPT_HARD)'是我看到的。它跳轉到中斷向量表並繼續從那裏執行。 – user2071017 2013-02-25 04:45:31