我用IRQ处理程序编写了一个并行端口驱动程序的设备驱动程序。
现在,首先我必须访问IRQ7,因为我的并行口给出了中断(我在/proc/interrupts上见过)。
现在,我面临的问题是,每当我试图请求irq7时,我的irq7()函数就会失败。
另外,我的cat /proc/interrupt看起来如下:
CPU0 CPU1
0: 98 0 IO-APIC边缘定时器
1: 11764 2178个IO-APIC边缘i8042
3: 20 IO-APIC-edge
4: 20 IO-APIC-edge
7: 8 0 IO-APIC边缘parport0
8: 10 IO-APIC边缘rtc0
9: 0 IO-APIC-fasteoi acpi
我不知道什么是parport0。按照我的想法,由于这个parport0,我的request_irq失败了。
我读过这样的文章:“`parport”代码在Linux下提供了并行口支持。这包括在多个设备驱动程序之间共享一个端口的能力。您可以将参数传递给parport代码,以覆盖其对硬件的自动检测。如果您想要使用IRQ,这尤其有用,因为一般来说,不能成功地自动探测这些内容。默认情况下,即使可以探测IRQ,也不使用IRQ。这是因为有很多人使用相同的IRQ作为他们的并行口和声卡或网卡。
那么,我如何在irq7上注册我的中断处理程序,以便管理来自并行口的中断呢?
发布于 2013-05-17 09:33:53
您的系统上已经安装了一个并行端口驱动程序。这就是为什么内核不能为您的驱动程序分配irq。首先,卸载当前的并行驱动程序,然后重试。
发布于 2013-05-17 17:51:25
如果您检查request_irq的返回代码,会有所帮助。它会告诉你失败的原因。正如rakib所指出的,很有可能安装了parport0 --默认驱动程序。您可以尝试注册一个共享的IRQ处理程序:大多数IRQ是可共享的(SA_SHIRQ标志)。还请记住,不要将空指针作为设备ID传递。
https://stackoverflow.com/questions/16605324
复制相似问题