1.在中断数量较少,且Linux内核版本较老的版本中对内核的管理方法
没有多余的中断控制器,直接就是一一对应,通过硬件中断号找到虚拟中断号,然后再通过虚拟中断号找到对应的处理函数

如果存在子中断控制器也是进行一一对应来处理

通过一一对应来解决虚拟中断号到硬件中断号的对应关系


主要解决两个事情1.通过硬件中断发生时根据硬件中断号来找到虚拟中断号,再通过虚拟中断号去调用相关的中断处理程序2.通过虚拟中断号找到硬件中断,对硬件中断进行相关的设置
在老版本的Linux中,编写驱动程序的时候需要先找到irqs.h这个头文件去找到对应的虚拟中断号,就是说在老版的系统中,虚拟中断号和硬件中断是写死的。


现在的做法:硬件中断号与虚拟中断号进行解耦,虚拟中断号(申请中断时得到的中断号)看可以认为是一个下标。

在申请中断的时候,先在中断描述符数组中查询一个空位置,找到一个空位置之后,该位置的下标就是该硬件中断对应的虚拟中断号,与此同时该虚拟中断号会存储在该中断控制器对应的irq_domain数组中,该数组记录了虚拟中断与硬件中断号之间的对应关系,只有在使用的时候该对应关系才会进行填充,不再是和以前那样子直接在一开始就写死。

使用该过程如下





内核在解析设备树时候就会将硬件中断与虚拟中断进行映射

每个中断控制器里面有两个关键函数,一个用来记录硬件中断号与虚拟中断号的对应方式,另一个用来解析设备树,得到硬件中断号和中断类型