![为什么 /dev/input/by-path 上每个设备有两个条目](https://linux22.com/image/100643/%E4%B8%BA%E4%BB%80%E4%B9%88%20%2Fdev%2Finput%2Fby-path%20%E4%B8%8A%E6%AF%8F%E4%B8%AA%E8%AE%BE%E5%A4%87%E6%9C%89%E4%B8%A4%E4%B8%AA%E6%9D%A1%E7%9B%AE.png)
如果我去,/dev/input/by-path
我可以看到我的输入外围设备。
我有一个键盘和一个鼠标,在我的平台上输出是:
pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
pci-0000:05:00.0-usb-0:1.1:1.0-mouse
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
- 为什么每个设备有两个条目?
- 每个条目的目的是什么?
顺便说一句,只有一个在open(<path_to_device>, O_RDONLY)
监听输入(对于键盘来说,就是这个usb-0:1.2:1.0
)。
(我正在运行 Ubuntu;以防万一!)
答案1
为什么每个设备有两个条目?
亩。每个设备没有两个条目。是的,*-event-mouse
并且*-mouse
已配对,它们共享相同的pci-0000:05:00.0-usb-0:1.1:1.0
标识符,这表明它们是同一设备。另一方面,您的*-event-kbd
设备不同。
每个条目的目的是什么?
如果运行ls -l /dev/input/by-path
,输出可能是(示例):
pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd -> ../event5
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse -> ../event6
pci-0000:05:00.0-usb-0:1.1:1.0-mouse -> ../mouse0
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd -> ../event13
如您所见,有event*
和mouse*
设备。这个文件解释差异:
event*
evdev
是通用输入事件接口。它将内核中生成的事件直接传递给程序,并带有时间戳。所有架构上的事件代码都是相同的,并且与硬件无关。这是用户空间使用用户输入的首选接口,鼓励所有客户端使用它。
mouse*
mousedev
是一种使使用鼠标输入的遗留程序正常工作的技巧。它从鼠标或数字转换器/平板电脑获取事件,并使 PS/2 样式(a la/dev/psaux
)鼠标设备可供用户使用。
如果您执行sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
and (在单独的控制台中)sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-mouse
,您将看到它们都从鼠标读取,但字节流不同。
您已经识别pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
为您的键盘。我认为剩下的设备(pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
)是别的东西。你应该ls -l
像上面那样找出它对应的是哪个事件,然后
$ # Example from my laptop
$ cat /sys/class/input/event13/device/name
Laptop_Integrated_Webcam_FHD: I
我的网络摄像头没有物理按钮,但我怀疑同一驱动程序支持有一些物理按钮(例如快照按钮)的网络摄像头。在您的情况下,剩下的设备可能也不是普通键盘。