ARM SMP 内核通常与 GIC 相关联,提供每处理器中断 (PPI)、共享处理器中断 (SPI) 和软件生成中断 (SGI)。
从设备树文件调用的 GIC 驱动程序。您可以在 .dtsi 文件 (arch/arm/boot/dts/imx6qdl.dtsi) 中检查相同的条目
intc: interrupt-controller@0x00a01000 {
compatible = "arm,cortex-a9-gic";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x00a01000 0x1000>,
<0x00a00100 0x100>;
interrupt-parent = <&intc>;
};
您可以在设备树中为您的驱动程序创建条目:
my_driver my_driver@0x0{
compatible = "eeti,egalax_ts";
interrupt-parent = <&intc>;
interrupts = <X Y Z>
};
X: 0 表示 SPI 中断,1 表示 PPI。
Y:中断类型的中断号。
Z:触发类型和电平标志
您需要通过功能从驱动程序启用中断(您在上面提到的):
request_irq(IRQ_NUM, my_interrupt_handler,IRQ_FLAG, "my_driver", my_dev);
一旦您的中断将被注册,那么您可以在 cat /proc/interrupts 中看到相同的条目。
要将中断分发到核心 0,则必须将其绑定到核心 0。
[root@maverick]# echo 1 > /proc/irq/24/smp_affinity
您可以使用
[root@maverick]# cat /proc/irq/24/smp_affinity
00000001
有关 GIC 的更多了解,请查看主线内核 Documentation/devicetree/bindings/arm/gic.txt