- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的问题。我目前正在更新 arm 嵌入式 Linux 机器的内核,从 4.1 到 4.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/
我在 ARM 处理器上运行嵌入式 linux 3.2.6。我正在使用修改版的 atmel 串行驱动程序来控制我设备上的 4 个 USART 端口。当我使用内核编译的驱动程序时,一切正常。但我想改为将驱
据我所知,它“分配一条中断线”,但是 > what is happening after request_irq()? > How a particular handler is getting ca
我知道通过 request_irq 我们可以安排一个 work_queue,而通过 request_threaded_irq 我们可以产生一个 kthread 作为中断的下半部分。但是 workque
这是我的问题。我目前正在更新 arm 嵌入式 Linux 机器的内核,从 4.1 到 4.14.73。 我遇到了驱动程序方面的问题。对于内核 4.1,在使用 request_irq 注册 irq 之前
request_irq 和 setup_irq 有什么区别? 何时使用 request_irq()什么时候使用 setup_irq() 最佳答案 从内核源代码 kernel/irq/manage.c
据我所知,两者都用于注册中断处理程序。我在内核代码中看到了很多 request_irq 调用,但甚至没有看到一个 __interrupt 调用。 __interrupt 是从用户空间注册处理程序的某种
我正在尝试在由 gpio 中断触发的内核模块中设置中断处理程序,但我似乎没有使用 request_irq() 函数正确的...我正在通过 gpio_to_irq() 获取我的 irq-number,这
我正在学习 Linux 中的设备驱动程序编程。我想知道在哪里可以找到用作 request_irq 函数中“irq”参数的 IRQ 号? int request_irq (unsigned int ir
在浏览 2.6.35 时,在某些驱动程序中,观察到 request_irq 被传递给 irq 标志的值 0。当在 interrupt.h 中看到时 - 0 对应于 IRQ_TRIGGER_NONE;
我正在编写一个简单的内核模块,它可以注册一个中断并处理它。但是,当我尝试通过调用 request_irq 函数来注册中断时,它返回错误代码 -22 : ERROR: Cannot request IR
我正在为 IRQ 号 8 开发一个驱动程序,它对应于 RTC 时钟。我有以下问题。当我用 request_irq 请求那个 IRQ 时,我得到一个 EBUSY 错误。我认为首先使用 free_irq(
我是一名优秀的程序员,十分优秀!