linux - request_irq 返回 -16 (-EBUSY)
问题描述
这是我的问题。我目前正在更新 arm 嵌入式 Linux 机器的内核,从4.1到4.14.73。
我遇到了一个司机的问题。在内核 4.1 中,在使用 注册 irq 之前,将为驱动程序设置request_irq
标志。IRQF_VALID
set_irq_flags
如此处所述,
set_irq_flags 是 ARM 特定的,具有与 genirq 等效的自定义标志。将驱动程序转换为直接使用 genirq 接口,这样我们就可以杀死 set_irq_flags。flags的翻译如下:
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:标志不匹配 irq 40. 00000004 (digitalGPIO) vs. 00000000 ((null))
我对(null)
设备名称感到非常困惑。
我究竟做错了什么?
我希望我包含了足够的上下文信息。
解决方案
最后,很明显,IRQ 确实not shared
在我的模块被加载之前就已经注册了。
这是由于我使用的内核发生了变化,这是基于linux 内核的 Altera 版本。他们在之前的内核更新中更改了与此 IRQ 关联的驱动程序的行为。
我无法理解的是为什么先前的请求被记录为(null)
而不是正确的名称。显示先前请求 IRQ 的正确信息的唯一方法是将其设置为shared
直接在 Altera 内核中。
推荐阅读
- css - Tailwind CSS flexbox gap 不适用于 iPhone Chrome
- python - 搜索关键字,由用户使用 sqlite3 和 python 3.7 输入
- dockerfile - minio 可以在 docker 容器中以非 root 用户身份运行吗?
- java - 预期的 Java 可运行对象,但在方法中传递
- python - 从美丽的汤中获取标签'a'
- list - 反向 zip 2 列表(不使用 zip 或反向)
- magento - Magento 2 Multi Language Force 语言
- html - 为什么固定高度的按钮在有东西但没有用完它的高度时不能与其他按钮完美对齐?
- mysql - 使用单个查询(递归查询)在 mysql 表中查找所有记录的所有父项
- c# - MonoGame VertexPositionColor 在不正确的位置绘制