中断号分为硬件中断号(HW ID)
和软件中断号(IRQ number)
。
这里有两个中断控制器
,处理完毕进入 CPU。外设和中断控制器连接在一起,外设给中断控制器的是硬件中断号,如果中断控制器有级联,那么硬件中断号在不同的中断控制器中可能会重复。但是到了 CPU 以后,我们需要对不同中断控制器给过来的硬件中断号进行翻译,翻译成在软件中唯一的软件中断号
,叫 irq number。
注意,我们在设备树中配置的是硬件中断号,在软件中申请中断 request_irq 使用的是软件中断号,所以申请之前要先从设备树获取硬件中断号,然后使用 irq_of_parse_and_map 进行翻译再使用,这个后面会详细讲,并给出示例。
1、硬件中断号与软件中断号
在 Linux kernel 中我们使用下面两个 ID 来标识一个来自外设的中断:
1、IRQ number。CPU需要为每个外设中断编号,我们称之 IRQ Number。这个 IRQ number 是一个虚拟的 interrupt ID,和硬件无关,仅仅是被 CPU 用来标识个外设中断。
2、HW interrupt ID。对于 interrupt controller 而言,它收集了多个外设的 interrupt request line 井向上传递,因此,interrupt contro