较好帖子:https://blog.csdn.net/luckywang1103/article/details/42324229
https://blog.csdn.net/zhangxizhicn/article/details/6642062
一、input子系统简介
1、Input驱动程序是linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)、事件设备(event)。其中事件驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。
2、input驱动程序的主设备号是13、次设备号的分布如下:
joystick游戏杆:0~16
mouse鼠标: 32~62
mice鼠标: 63
事件设备: 64~95
3、主要的结构体
Input_device:代表着具体的输入设备,他直接从硬件中读取数据,并以事件的形式转发
Handler:代表接收某一类事件的上层接口,对应于一类事件设备文件
Handle:用于将input_device和handler连接起来,对应于某个具体的设备文件。
Client:对应于用户程序对文件的访问接口,每open一次事件驱动,就创建一个client
Handler:struct input_handler *input_table[8],最多有8中input驱动,比如/dev/input/eventX和/dev/input/mouseX就是两种常用的input驱动。
Handle:以evdev.c为例,根据次设备号取值范围64-95,可以分别生成input/event0、input/event1,一直到input/event31共32个设备文件。每个设备文件对应一个handle
Client:每个设备文件又可以同时对应多个client,当有多个应用程序同时调用设备文件时,他们会从不同的client中取数据。
二、input子系统架构
input子系统由驱动层drivers,输入子系统核心层input core,事件处理层event handler组成。
驱动层并不创建文件节点,他只负责将采集到的数据通过input.c提供的函数input_event向上一层汇报。而各个事件驱动则分别将他们感兴趣的事件信息提取出来,通过文件节点传给用户空间。
一个输入事件,通过输入设备发给