Linux Input 子系统是内核中管理输入设备(如键盘、鼠标、触摸屏等)的核心框架,其通过统一接口简化驱动开发,并为用户空间提供标准化事件处理机制。以下是其核心要点:
一、系统架构分层
Input 子系统采用三层结构设计:
驱动层(Input Driver)
直接操作硬件设备,负责将物理输入转换为标准事件(如按键按下、坐标变化),通过input_dev结构体描述设备特性,需开发者编写具体硬件操作代码。核心层(Input Core)
承上启下,提供设备注册接口(如input_register_device())和事件分发机制。核心层维护全局设备链表,实现驱动层与事件处理层的动态匹配。事件处理层(Input Handler)
对接用户空间,生成/dev/input/eventX设备节点,将事件封装为input_event结构体供应用程序读取。例如evdev处理通用事件,mousedev处理鼠标事件。
二、关键数据结构与 API
input_dev结构体
描述输入设备属性,需配置以下字段:evbit:支持的事件类型(如EV_KEY按键事件、EV_ABS绝对坐标事件)。keybit:具体按键编码(如KEY_0、BTN_LEFT)。
事件上报函数
input_report_key():上报按键事件。input_report_abs():上报绝对坐标(如触摸屏)。input_sync():同步事件,标志一次完整事件上报。
用户空间事件结构体
cstruct input_event { struct timeval time; // 时间戳 __u16 type; // 事件类型(如 EV_KEY) __u16 code; // 事件编码(如 KEY_0) __s32 value; // 事件值(如 1 表示按下) };