input子系统
输入设备包括鼠标、键盘、触摸屏、按钮等,它们都能产生输入事件,产生输入数据给计算机系统。 Linux 系统为了统一管理输入设备,实现了一套能够兼容所有输入设备的框架,这个框架就是input 子系统。 驱动开发人员基于input 子系统开发输入设备的驱动程序,input 子系统可以屏蔽硬件的差异,向应用层提供一套统一的接口。 查看input 子系统注册的输入设备 基于input 子系统注册成功的输入设备,都会在/dev/input 目录下生成对应的设备节点(设备文件), 设备节点名称通常为eventX( X 表示一个数字编号0、1、2、3 等) 查看输入设备对应的设备节点cat /proc/bus/input/devices
读取数据
如果我们要读取触摸屏的数据,假设触摸屏设备对应的设备节点为/dev/input/event0 , 那么数据读取流程如下: 1.应用程序打开/dev/input/event0 设备文件; 2.应用程序发起读操作(例如调用read),如果没有数据可读则会进入休眠(阻塞I/O 情况下; 3.当有数据可读时,应用程序会被唤醒,读操作获取到数据返回; 4.应用程序对读取到的数据进行解析。 获取到的数据格式 <linux/input.h> struct input_event { struct timeval time;// 按键时间 __u16 type; // 类型 __u16 code; // 需模拟成的按键(比如按键事件中按的是KEY_0按键) __s32 value; // 按下或释放 }; type: 设备类型。可以设置为: #define EV_SYN 0x00 表示设备支持所有的事件 #define EV_KEY 0x01 键盘或者按键,表示一个键码 #define EV_REL 0x02 鼠标设备,表示一个相对的光标位置结果 #define EV_ABS 0x03 手写板产生的值,其是一个绝对整数值 #define EV_MSC 0x04 其他类型 #define EV_LED 0x11 LED灯设备 #define EV_SND 0x12 蜂鸣器,输入声音 #define EV_REP 0x14 允许重复按键类型 #define EV_PWR 0x16 电源管理事件 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f #define EV_CNT(EV_MAX+1) 驱动 https://blog.csdn.net/weixin_42031299/article/details/125111946 应用 https://blog.csdn.net/gdut_liujiangyi/article/details/123880416 https://blog.csdn.net/wkd_007/article/details/126729030标签:define,input,EV,子系统,输入,设备 From: https://www.cnblogs.com/kernelx/p/18097186