gpt4 book ai didi

linux - request_irq 返回 -16 (-EBUSY)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:50 25 4
gpt4 key购买 nike

这是我的问题。我目前正在更新 arm 嵌入式 Linux 机器的内核,从 4.14.14.73

我遇到了驱动程序方面的问题。对于内核 4.1,在使用 request_irq 注册 irq 之前,标志 IRQF_VALID 将由 set_irq_flags 为驱动程序设置。

记录在案here ,

set_irq_flags is ARM specific with custom flags which have genirq equivalents. Convert drivers to use the genirq interfaces directly, so we can kill off set_irq_flags. The translation of flags is as follows:

IRQF_VALID -> !IRQ_NOREQUEST

IRQF_PROBE -> !IRQ_NOPROBE

IRQF_NOAUTOEN -> IRQ_NOAUTOEN

因此,我将 set_irq_flags 替换为 irq_clear_status_flags(irq, IRQ_NOREQUEST)

事情是,现在 request_irq 调用返回 -16 (-EBUSY),我不知道为什么。我检查了每个请求的 irq(在运行时),它们都与该驱动程序请求的不同。

我还注意到日志中的这一行:

genirq: Flags mismatch irq 40. 00000004 (digitalGPIO) vs. 00000000 ((null))

我对(null)设备名很疑惑。

我做错了什么?

我希望我包含了足够的上下文信息。

最佳答案

最后,很明显,在我的模块被加载之前,IRQ 确实已经被注册为not shared

这是由于我使用的内核发生了变化,它是 基于 linux 内核的 Altera 修订版。他们在之前的内核更新中更改了与此 IRQ 关联的驱动程序的行为。

我不明白的是为什么之前的请求被记录为 (null) 而不是正确的名称。显示有关谁先前请求 IRQ 的正确信息的唯一方法是直接在 Altera 内核中将其设置为 shared

关于linux - request_irq 返回 -16 (-EBUSY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com