键盘驱动程序是字符设备驱动程序吗?

键盘驱动程序是字符设备驱动程序吗?

我正在学习设备驱动程序,我有一个疑问,键盘驱动程序是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来查看它们产生什么样的事件。

(由于你只有字符设备和块设备,并且块设备上的操作对键盘来说没有意义,所以它几乎必须是字符设备。)

相关内容