linux - 在 Linux 中启用和分配 IRQ

标签 linux linux-kernel interrupt irq imx6

我正在使用 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/

相关文章:

multithreading - kthread停止运行

linux - __get_free_page,物理地址和交换

c++ runtime_error捕获在集群节点之间不一致

c - Linux 3.0 : "glibc detected" abort - tuning corruption detected feature?

linux - SPI:Linux 驱动模型

interrupt - 如何知道接收到信号时正在执行哪一行代码

operating-system - 处于管理模式时不会触发外部中断

r - 如何在 Linux 上从 R 访问 Olap-Cubes

c - 如何理解bitmap_set()?

c - msp430g2452 无法从开关捕获中断