1.Input驱动是Linux输入设备的驱动,分为三个驱动:操纵杆、鼠标和鼠标、事件队列。其中,事件驱动是目前比较常见的驱动,可以支持键盘、鼠标、触摸屏等各种输入设备。
支持的输入设备。
2.输入驱动程序的主设备号为13,三个驱动程序的设备号分布如下:
操纵杆操纵杆:0~31。
鼠标:32~62。
老鼠老鼠:63只。
赛事装备:64 ~ 95。
实际上,每种输入设备占用5位,因此每个设备中包含的数字是32。
3.事件设备大多使用文件系统的接口(如read、ioctl和poll)在用户空间中操作。read用于读取输入信息,ioctl用于获取和设置信息,poll调用可以阻塞用户空间。当内核有关键中断时,通过在中断中唤醒轮询的内核来实现,这样轮询调用也可以在用户空间中返回。
文件系统中事件设备的设备节点是://dev/input/eventX。
输入设备节点
主要装备编号是13,次要装备编号是递增生成的,范围从64到95。每个特定的设备都在杂项、触摸屏、键盘和其他目录中。
4.事件输入驱动的架构图如下:。
事件驱动架构图。
输入设备驱动程序的头文件:include/Linux/input.h。
输入设备驱动程序的核心和事件部分的代码是驱动程序/输入/输入和驱动程序/输入/事件.
结构Input_dev结构在input.h中定义,它表示输入驱动程序的各种信息。对于事件设备,分为同步设备、键盘、相对设备(鼠标)和绝对设备(触摸屏)。
input_dev中的定义总结了各种设备的信息,如按键、相对设备、绝对设备、杂项设备、LED、声音设备、强制反馈设备、开关设备等。
input_dev结构体
在具体的Event驱动程序的实现中,如果得到按键的事件,通常需要通过以下的接口向上进行通知,这些内容也是在input.h中定义的,如下所示:
5、对不同设备内容的报告均是通过input_event()函数来完成的,选择使用了不同参数而已。在手机系统中经常使用的键盘(keyboard)和小键盘(keypad)属于按键设备EV_KEY,轨迹球属于相对设备EV_REL,触摸屏属于绝对设备ABS。
关于按键数值的定义片段如下所示:
6、可以使用getevent对Event设备进行调试。
getevent
getevent -l
点击鼠标,出现以上信息:第一列为设备节点,第二列为输入设备类型,第三列为按键扫描码,第四列为附加信息(按下、抬起、移动等)。