什么是输入系统
常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户可以通过这些输入设备与Linux 系统进行数据交换。
问题来了?
输入设备种类繁多,能否统一它们的接口?既在驱动层面统一,也在应用程序层面统一?可以的。
Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。
输入系统框架及调试
了解内核中输入子系统的框架,了解数据流程,有助于解决开发过程中碰到的硬件问题、驱动问题。输入系统框架如下图所示:
假设用户程序直接访问 /dev/input/event0
设备节点,或者使用 tslib
访问设备节点,其数据流程如下:
-
APP 发起读操作,如无数据则休眠。
-
用户操作设备,硬件上产生中断。
-
输入系统驱动层对应的驱动程序处理中断;
- 读取到数据,转换为标准的输入时间,向核心层汇报。
- 所谓输入时间就是一个
struct input_event
结构体。
-
核心层可以决定把输入时间转发给上面哪个
handler
来处理。- 从
handler
的名字来看,它就是用来处理输入操作的。有多种handler
,比如:evdev_handler
、kbd_handler
、joydev_handler
- 从