ARM芯片有硬件中断号,比如0~15是SGI中断
linux内核规定了软件中断号及软件中断号的功能;不直接使用ARM芯片的硬件中断号是因为linux内核是适配多架构操作系统,比如有些芯片硬件中断号20是GPIO中断,有些芯片是25;linux统一规定了某个中断号对应GPIO中断。这样就存在硬件中断号和软件中断号的映射(IRQ domain)
下面除非特别说明,否则出现的中断号都是软件中断号
相关API
request_irq() // 注册中断,第一个参数就是软件中断号 freee_irq() // 注销中断
代码分析
request_irq()
每个中断号都对应一个 struct irq_desc 实例,request_irq() 的目的就是填写对应中断号的 struct irq_desc,比如填写中断处理函数。
当触发中断时,就可以取出对应中断号的中断服务函数执行。