Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux设备驱动程序:IRQ1和IRQ23_C_Linux Kernel_Keyboard_Linux Device Driver - Fatal编程技术网

C Linux设备驱动程序:IRQ1和IRQ23

C Linux设备驱动程序:IRQ1和IRQ23,c,linux-kernel,keyboard,linux-device-driver,C,Linux Kernel,Keyboard,Linux Device Driver,几天前,我发布了一个问题,询问如何安全地开发键盘中断处理程序。 深入研究建议的答案,让我发现基本上我的默认键盘处理程序没有设置到IRQ1中。这是因为cat/proc/interrupts和watch-n1 cat/proc/interrupts都强调IRQ 1不负责键盘处理。此外,由于我的键盘和鼠标都通过USB连接,我发现IRQ 23负责两个USB设备。然后我稍微修改了代码。只要我简单地通过free\u IRQ(23,(void*)IRQ\u handler)将我的处理程序设置为IRQ 23,我

几天前,我发布了一个问题,询问如何安全地开发键盘中断处理程序。 深入研究建议的答案,让我发现基本上我的默认键盘处理程序没有设置到IRQ1中。这是因为
cat/proc/interrupts
watch-n1 cat/proc/interrupts
都强调IRQ 1不负责键盘处理。此外,由于我的键盘和鼠标都通过USB连接,我发现IRQ 23负责两个USB设备。然后我稍微修改了代码。只要我简单地通过
free\u IRQ(23,(void*)IRQ\u handler)
将我的处理程序设置为IRQ 23,我就可以在按下/释放任何键和移动任何鼠标时触发中断。所以,基本上IRQ23触发响应任何键盘和鼠标事件。在这里,我无法找到按下了哪个键,因为在任何提到的操作(按键、按键释放、鼠标单击、鼠标移动等)下,两个端口
0x60
0x64
始终分别报告相同的值156和28

有两件事。1) 为什么IRQ 1不负责键盘中断处理,2)如果IRQ 23负责,为什么从端口
0x60
0x64
获取的值无法解决我在上述链接中发布的代码中的预期问题


谢谢您的建议。

如果您使用的是USB键盘,那么您发布的内核模块代码将无法工作。您需要为USB HID编写一个内核模块。更好地研究usbmon内核模块的实现。@Gaurav再次感谢您的回复。现在,有一个新的章节要考虑。如果你想保持简单,你可以尝试禁用内核中的USB子系统,并使用USB遗留模式。在本例中,ps/2主机内核驱动程序将正常工作(此驱动程序非常简单)。您对Linux中IRQ概念的了解很模糊。Linux使用IRQ域和内部编号进行操作。它与HW有很大的不同,尽管在大多数简单的情况下,它试图使它们成为一对一。@ImanAbdollahzadeh你最终解决了这个问题吗?我也有类似的情况。