01、输入子系统介绍
一、什么是输入子系统?
在 Linux 中,input 子系统是专门为处理输入类设备而设计的一个子系统或框架。它提供
了一套通用的接口和机制,用于驱动开发人员编写和管理输入设备的驱动程序。输入设备包括 键盘、鼠标、触摸屏、游戏手柄等,具体示意图如下所示:
输入子系统的作用和优势:
为什么用输入子系统? 开发输入设备驱动时,输入子系统就像一个标准化的"工具箱"。它把所有输入设备共用的功能(比如事件传递、数据格式)都预先做好,开发者只需要专注写自己设备的独特部分。这样既减少重复劳动,也让不同设备的驱动更容易互相兼容。
主要好处:
- 兼容性强 所有输入设备(键盘、鼠标、触摸屏等)都遵循统一标准。只要符合这个标准,无论什么品牌或类型的设备,都能被系统直接识别使用。开发者不用为每个新设备重写基础代码。
- 开发更简单 开发者只需按输入子系统提供的"说明书"来写代码,比如设备初始化、信号处理等通用步骤都有现成框架可用。就像搭积木一样,不需要从零开始设计整个结构。
- 应用对接方便 所有输入设备在系统里都通过统一的接口(如/dev/input/eventX文件)提供服务。应用程序要获取输入信号时,只需按相同方式读取这些文件,不管背后是键盘还是触控板,都不需要额外适配。
::: 总结: 输入子系统就像中间桥梁:对开发者来说,它简化了设备驱动的编写流程;对应用来说,它提供了统一的数据获取方式。这样三方都能更高效工作,不用在重复的基础问题上浪费精力。 :::
二、输入设备和节点的关系
在输入子系统中,输入设备与设备节点之间有一定的对应关系。以下是判断设备节点与输 入设备的方法:
2.1、驱动节点(/dev/input)
- 设备名: 输入子系统的设备节点可以分为通用设备名和专用设备名。专用设备名通常
可以从设备名中直接识别出设备类型,例如"keyboard"(键盘)或"mouse"(鼠标)。而通用设备名则不能直接确定设备类型。如下图所示,event0-event2 属于通用设备名。
ls /dev/input
2.2、输入设备信息(proc/bus/input/devices)
查看输入设备信息:可以使用以下命令查看"/proc/bus/input/devices"文件:
cat /proc/bus/input/devices
该文件记录了当前系统的所有输入设备的信息在该文件中,你可以找到与设备节点相关的
信息,例如设备名称、供应商 ID、产品 ID 等。通过对比设备节点的路径和设备信息中的对应字段,你可以确定设备节点与特定输入设备之间的关系,例如可以通过上述打印信息查看到,电源 power 按键
对应的设备节点为**/dev/input/event1****,如下图所示:**
其他相关内容的解释如下所示:
::: I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="rk805 pwrkey"
P: Phys=rk805_pwrkey/input0
S: Sysfs=/devices/platform/fdd40000.i2c/i2c-0/0-0020/rk805-pwrkey/input/input1
U: Uniq=
H: Handlers=kbd event1 dmcfreq
B: PROP=0
B: EV=3
B: KEY=10000000000000 0 :::