Linux input子系统

Linux事件上报的唯一标准通道-input子系统,有设备需要上报事件无需重复造轮子,只需要注册一个input设备,使用input子系统的标准流程上报即可。

先简单介绍input子系统的架构,input子系统主要分为3层:设备驱动层,核心层,事件层。

Linux input子系统

设备驱动层主要实现具体input设备的注册,事件上报,例如触摸屏驱动,鼠标驱动,键盘驱动等。

核心层主要起到承上启下的作用,下为设备驱动层提供设备注册,事件上报的统一接口;上为事件驱动层的接口,并提供上层handler和下层device之间的匹配函数。

事件层通过input_register_handler向核心层注册,当input_device或input_handler注册的时候,如果设备驱动层的input_device和事件处理层的input_handler有相匹配的话,input子系统就新建一个input_handle连联系它们。其实质就是:将新建的input_handle分别挂靠在input_dev和input_handler的h_list链表上去。这样一个input_dev就可以根据它的它的input_handle链表找到它的事件处理方法。

具体流程如下图

Linux input子系统

注册一个input设备只需要以下三步:

1,使用input_allocate_device分配一块input_dev结构体类型大小的内存

2,使用 input_set_capability设置输入设备可以上报哪些输入事件

3,使用input_register_device向input核心层注册设备

input事件的上报也很简单,核心层已经提供了标准的接口

input_report_abs()、input_report_key()和input_sync()等是最常用的时间上报接口,最后都是调用input_event()函数。


分享到:


相關文章: