在linux中,是否可以注册多个驱动程序来处理同一设备

在linux中,是否可以注册多个驱动程序来处理同一设备,linux,linux-kernel,interrupt,interrupt-handling,Linux,Linux Kernel,Interrupt,Interrupt Handling,我正在学习Robert Love的Linux内核开发,目前正在阅读Linux中的中断处理。它提到,驱动程序可以使用下面的函数注册来处理硬件设备,其中最终参数dev对于设备是唯一的w.r.t。这是否意味着我们不能让两个设备驱动程序为同一个硬件设备服务?如果我想实现一个与现有驱动程序一起工作的键盘驱动程序,这是不可能的吗?我是否必须取消注册现有的键盘驱动程序,并注册我编写的驱动程序 int request_irq(unsigned int irq, irq_handler_t handler, un

我正在学习Robert Love的Linux内核开发,目前正在阅读Linux中的中断处理。它提到,驱动程序可以使用下面的函数注册来处理硬件设备,其中最终参数dev对于设备是唯一的w.r.t。这是否意味着我们不能让两个设备驱动程序为同一个硬件设备服务?如果我想实现一个与现有驱动程序一起工作的键盘驱动程序,这是不可能的吗?我是否必须取消注册现有的键盘驱动程序,并注册我编写的驱动程序

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 
const char *name, void *dev) 

在某些情况下,中断请求行在驱动程序之间共享。在这种情况下,驱动程序提供IRQF_共享In标志,并在调用request_irq()时提供唯一的dev值

当硬件提供用于硬件多个组件的单个中断时,设备驱动程序通常共享中断,每个组件都有自己的驱动程序。在这种情况下,硬件还将为每个组件提供中断状态和掩码位

我对你们的键盘硬件一无所知,所以很难说你们是否可以使用两个设备驱动程序。如果您只需要对设备进行读取访问,并且设备状态没有被其他驱动程序更改,那么它可能会工作

例如,在两个驱动程序之间共享UART肯定不起作用,因为只有一个驱动程序能够从RX FIFO读取字符