您的位置:首页 > 运维架构 > 网站架构

Linux Input输入驱动架构记录

2017-05-01 12:04 1106 查看
Linux 输入驱动框架有三部分组成:输入设备驱动程序,输入子系统核心,输入事件驱动程序;

1,输入设备驱动程序初始化硬件设备寄存器,读取硬件信息,构造struct input_dev结构体实例,并将struct input_dev结构体实例注册到输入子系统核心;

struct input_dev{

char *name;

struct input_id id;

… …

};

2,输入事件驱动程序负责统一处理各种和输入信息相关的逻辑,例如:按键输入(键盘输入,触摸按键输入),相对位移输入(鼠标输入),绝对位移输入(触摸输入)等;

输入事件驱动的优点:

1>,将各种形态的硬件统一处理,例如:鼠标,导航杆统一为相对位移输入处理,

PS/2键盘,无线键盘,嵌入式控制器键盘都统一为按键输入处理;

2>,提供了用户分发输入事件到用户空间的分发事件接口;

3>,抽象并复用了输入驱动程序的公共部分,简化了驱动程序,提高了一致性,提高了模块化降低了藕 和性,让设备驱动程序工程师更加专注于硬件操作;

struct input_handler{

struct input_device_id id_table;

int (*connect)(struct input_handler,struct input_dev *idev,struct input_device_id *id);

char *name;

… …

};

3,输入子系统核心负责管理输入设备驱动注册的struct input_dev结构体实例和事件输入驱动注册的struct input_handler结构体实例,负责将两个结构体id属性相匹配的实例连接起来;

3.1,数据结构之间的关系如下图:



struct input_handle 实例对象中包含匹配的struct input_dev 和 struct input_handler 的结构实例,然后将struct input_handle 放入struct input_dev 的h_list链表中,当有事件上报的时候(input_report_xxx())便利struct input_dev的h_list链表取出每一个struct input_handle中的struct input_handler执行struct input_hander的event成员函数指针;

3.2,输入驱动程序结构如下图:



上图完整的描述了整个Linux输入驱动架构的各个组成部分输入设备驱动程序,输入子系统核心,输入事件驱动程序及各组成部分之间的关系;

触摸屏输入驱动实例:

触摸屏输入驱动实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 结构 硬件