我正在使用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源代码中启用和分发中断?
欢迎您的建议!
提前致谢。
答案 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