从硬件结构上看, 处理过程分上下两个层面: 中断控制器, 使用中断的设备
从软件结构上看, 处理过程分左右两个部分: 在设备树中描述信息, 在驱动中处理设备树
从图中我们可以看到有顶层的中断控制器(interrupt-controller@4a000000),
也有下面一级的中断控制器gpg、gpf,对于gpg、gpf这两个中断控制器是pinctr节点里面的子节点,对应的设备树描述如下所示:
pinctrl@56000000 {
reg = <0x56000000 0x1000>;
compatible = "samsung,s3c2440-pinctrl";wakeup-interrupt-controller {
compatible = "samsung,s3c2410-wakeup-eint";
interrupts = <0x0 0x0 0x0 0x3 0x0 0x0 0x1 0x3 0x0 0x0 0x2 0x3 0x0 0x0 0x3 0x3 0x0 0x0 0x4 0x4 0x0 0x0 0x5 0x4>;
};gpf {
gpio-controller;
#gpio-cells = <0x2>;
interrupt-controller;
#interrupt-cells = <0x2>;
phandle = <0x6>;
};gpg {
gpio-controller;
#gpio-cells = <0x2>;
interrupt-controller;
#interrupt-cells = <0x2>;
phandle = <0xe>;
};
};
所以对于gpg、gpf这两个中断控制器的处理因该有pinctr的驱动程序来处理,pinctr对应的驱动程序:drivers/pinctrl/samsung/pinctrl-samsung.c
对于顶层的中断控制对应的驱动程序是drivers/irqchip/irq-s3c24xx.c
对于buttons节点对应的驱动程序是我们自己写按键驱动程序button.c,在中断系统中的设备树(四)__设备树描述按键中断中介绍过,内部数据的处理在后面会详细介绍的,每一个中断控制器在linux驱动程序里面都会有一个irq_domain(域),
在解析设备的中断信息时也会涉及到irq_domain(域)