一张图搞定Linux中断处理流程
·CPU硬件自动完成的
·GIC驱动
·Linux内核完成的
·用户编写的中断服务程序
在Linux内核驱动开发中,中断是不可缺少的重要一环。CPU在和外部设备通信,绝大部分是通过中断完成的。
熟悉了中断的各种机制和运行过程,我们在分析不同平台、不同内核版本下的具体驱动,都可以很快上手,快速理解各个外设驱动是如何处理 中断的,为我们分析各种复杂的驱动和子系统奠定了一个良好的内核基础。
硬件中断号到Linux irq中断号的映射,并创建好irq_desc中断描述符。irq_domain结构,用于硬件中断号和Linux IRQ中断号(virq,虚拟中断号)之间的映射;
中断注册时,先获取设备的中断号,根据中断号找到对应的irq_desc,并将设备的中断处理函数添加到irq_desc中;
设备触发中断信号时,根据硬件中断号得到Linux irq中断号,找到对应的irq_desc,最终调用到设备的中断处理函数;
request_irq也是调用request_threaded_irq,只是在传参的时候,线程处理函数thread_fn函数设置成NULL;
由于在硬
1