【问题标题】:Interrupt handler triggered when free_irq is called调用 free_irq 时触发的中断处理程序
【发布时间】:2014-01-31 12:38:09
【问题描述】:

我的问题是: 调用 free_irq 时会触发中断处理程序。我注意到在内核消息中调用了处理程序,但由于我们的设备没有请求中断,它提示没有收到中断。 这是预期的行为吗?有人可以帮忙吗?

【问题讨论】:

  • 不会调用中断处理程序,除非捕获到您的中断处理程序注册的中断。您能否提供更多详细信息,或者您可以分享您的代码。这样我们的回应才能更有成效。
  • 您没有指定您的驱动程序用于 PCI 设备,但我在 PCI 驱动程序文档中找到了有关关闭设备顺序的有用文档。见:kernel.org/doc/html/latest/PCI/pci.html#pci-device-shutdown

标签: linux-kernel linux-device-driver irq


【解决方案1】:

当您为(可能)共享中断(使用 IRQF_SHARED)注册处理程序时,该中断可能由您的驱动程序无法控制的其他设备触发,因此您的驱动程序必须随时准备接收中断.

为了帮助调试驱动程序,内核将(在设置 CONFIG_DEBUG_SHIRQ 时)伪造一些中断以检查您的驱动程序是否正常工作。
[source code]

【讨论】:

  • 我有共享中断,但没有其他设备触发中断,因为 /proc/interrupts 中的 IRQ 没有增加。其次,请您帮忙检查一下 CONFIG_DEBUG_SHIRQ 是否设置?
  • 你的内核的行为证明 CONFIG_DEBUG_SHIRQ 已设置。
  • 有没有办法确认这个宏?
  • 在我的情况下,我 /proc/config.gz 在 Fedora 16 上不存在。我通过运行命令“cat /boot/config-$( uname -r) | grep CONFIG_DEBUG_SHIRQ"
【解决方案2】:

如果我对您的帖子的理解正确 - 您必须在调用 free_irq() 之前关闭硬件中发出中断,然后在 free_irq() 时您将不会收到中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多