0

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

我在串行控制台中尝试过 cat /proc/interrupts ,但我看不到上面的 IRQ 编号。这是否表明上述中断在 Linux 中被禁用?

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

欢迎您提出建议!

提前致谢。

4

1 回答 1

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 的更多了解,请查看主线内核 Documentation/devicetree/bindings/arm/gic.txt

于 2017-01-25T15:57:31.240 回答