我正在使用 imx6 sabrelite 板,其中 Linux 操作系统在 core0 上运行,RTOS 在 core1 上运行。我在 RTOS 中配置了 GIC 中断寄存器,但 Linux OS 覆盖了它。我需要启用 IRQ 88,142,143,150 并将其分发到 Linux 源代码中的核心 1(RTOS)。我已经查看了 irq_gic.c 文件,但无法继续下一步。
我已经在串行控制台中尝试了 cat/proc/interrupts,但我看不到上面的 IRQ 号。这是否表示在 Linux 中禁用了上述中断?
如何在Linux源代码中启用和分配中断?
欢迎您提出建议!
提前致谢。
最佳答案
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,则必须将其绑定(bind)到核心 0。
[root@maverick]# echo 1 > /proc/irq/24/smp_affinity
您可以使用
进行相同的修改[root@maverick]# cat /proc/irq/24/smp_affinity
00000001
要了解有关 GIC 的更多信息,请查看您的主线内核 文档/devicetree/bindings/arm/gic.txt
关于linux - 在 Linux 中启用和分配 IRQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851975/