arch/arm64/kernel/entry.S
。irq_handler
中;代码比较简单,如下:
/*
* Interrupt handling.
*/
.macro irq_handler
ldr_l x1, handle_arch_irq
mov x0, sp
irq_stack_entry
blr x1
irq_stack_exit
.endm
来张图:
el0_irq
处,EL1则跳转到el1_irq
处;set_handle_irq
接口来设置handle_arch_irq
的函数指针,让它指向gic_handle_irq
,因此中断触发的时候会跳转到gic_handle_irq
处执行;gic_handle_irq
函数处理时,分为两种情况,一种是外设触发的中断,硬件中断号在16 ~ 1020
之间,一种是软件触发的中断,用于处理器之间的交互,硬件中断号在16以内;irq domain
去查找对应的Linux IRQ中断号,进而得到中断描述符irq_desc
,最终也就能调用到外设的中断处理函数了;全部0条评论
快来发表一下你的评论吧 !