我正在学习设备驱动程序,我有一个疑问,键盘驱动程序是Linux中的字符设备驱动程序吗?
答案1
是的,键盘驱动程序是一个字符设备。如果你这样做:
$ cat /proc/bus/input/devices
然后您将看到一个设备列表,其中应该包括您的键盘。这将包括类似的内容:
H: Handlers=sysrq kbd event18
从那里,看到/dev/input/event18
:
$ ls -l /dev/input/event18
crw-rw---- 1 root input 13, 82 Jul 9 15:44 /dev/input/event18
请注意,这是一个字符设备。
如果您捕获该设备,然后输入一些内容,您将看到活动:
$ sudo cat /dev/input/event18
... type something, see the byte stream as characters
看这个链接一个简单的 Python 脚本可以使用这些字节并解释它们;我将在这里重现该脚本:
#!/usr/bin/env python3
import struct
f = open("/dev/input/event18", "rb"); # Open the file in the read-binary mode
while True:
data = f.read(24):
print(struct.unpack('4IHHI', data))
根据我引用的网站,字段从左到右代表:
- 时间戳_INT
- 0
- 时间戳_DEC
- 0
- 类型
- 代码(按下按键)
- 值(按下/释放)
答案2
Linux中的键盘驱动程序出现在内核输入子系统中,用户空间将它们视为字符驱动程序在/dev/input
。
您可以使用它们evtest
来查看它们产生什么样的事件。
(由于你只有字符设备和块设备,并且块设备上的操作对键盘来说没有意义,所以它几乎必须是字符设备。)