请解释键盘驱动程序及其处理程序位于何处。
驱动程序:
通过ls /lib/modules/4.10.0-28-generic/kernel/drivers/input/mouse
-----> 给出了显示鼠标的所有设备驱动程序(其中psmouse.ko
在我的中使用)。即使我sudo rmmod psmouse
,触摸板还没有工作但usbmouse
正在工作(因为它使用usbmouse/usbhid
)
那么我的键盘驱动程序在哪里lsmod
?ls /lib/modules/4.10.0-28-generic/kernel/drivers/input/keyboard
lsmod 列表中没有任何内容?
处理程序:
通过cat /proc/bus/input/devices
-----> 给出了以下内容
SynPS/2 Synatics Touchpad (Handlers : mouse0 event6)
AT Translated Set 2 Keyboard (Handlers : sysrq,kbd,event4,leds)
通过cat /proc/bus/input/handlers
-----> 给出了以下内容
rfkill,kbd,sysrq,mousedev,evdev,joydev,leds
但不是mousedev
使用处理程序,而是mouse0
使用。为什么会这样?mouse0
可以在/dev/input/mouse0
.类似的为什么不在kbd
那里可用?
注意:活动可以在 中使用,/dev/input
但为什么不可以呢kbd
?
答案1
快速概述:鼠标和键盘处理是分层的。内核级别最抽象的层是输入事件层(devices /dev/input/event*
)。您可以阅读带有 的事件evtest
。上面是 X(evdev
或较低级别的驱动程序)或 Wayland ( libinput
) 的驱动程序。下面是 USB HID 设备 ( usbmouse
/ usbhid
)、PS/2 键盘 ( kbd
)、PS/2 鼠标 ( mousedev
) 的驱动程序。鼠标设备是一个相当复杂的动物园,因为它们还包含现在已过时的具有不同协议的串行端口鼠标驱动程序以及其他连接鼠标的方式。
/dev/input/mouse0
是个设备对于 PS/2 级鼠标事件,而mousedev
是内核模块处理它,AFAIK。我不知道为什么cat /proc/bus/input/devices
在“处理程序”下列出设备名称,这有点不一致。
默认情况下没有用于 PS/2 级键盘事件的设备,但您可以使用正确的模块和/或选项创建一个设备(我必须查找这一点,因为您通常不需要它)。
底线:除非您出于某种原因需要摆弄较低级别的协议(PS/2、串行、USB、HID...),否则就不要管它们。使用/dev/input/event*
设备,或者使用 X 或 Wayland 抽象。
如果您可以根据您实际想要实现的目标编辑您的问题(除非纯粹是好奇),我们可以提供更好的建议。