在Linux中启用和分发IRQ

时间:2017-01-25 12:44:37

标签: linux linux-kernel interrupt irq imx6

我正在使用imx6 sabrelite板,其中Linux OS在core0上运行,而在core1上运行RTOS。我在RTOS中配置了GIC中断寄存器,但Linux OS会覆盖它。我需要启用IRQ 88,142,143,150并将其分发到linux源代码中的核心1(RTOS)。我已经浏览了irq_gic.c文件,但无法进一步了解。

我在串口控制台中尝试了cat / proc / interrupts,我看不到上面的IRQ号码。是表示在Linux中禁用了上述中断?

如何在Linux源代码中启用和分发中断?

欢迎您的建议!

提前致谢。

1 个答案:

答案 0 :(得分:0)

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的更多了解,请查看主线内核 文档/的DeviceTree /绑定/臂/ gic.txt