Linux Input输入驱动架构记录

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输入驱动架构的各个组成部分输入设备驱动程序,输入子系统核心,输入事件驱动程序及各组成部分之间的关系;

触摸屏输入驱动实例:
触摸屏输入驱动实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值