输入子系统(二)系统框架

Input子系统框架图

input子系统包括三个层次,分别是设备驱动层,核心层,事件处理层。
在这里插入图片描述

数据结构关系图

在这里插入图片描述

事件处理层

事件处理层代码一般不需要我们去编写。内核实现了-一个通用的事件处理层代码,对应的设
备节点就是eventO,event1 等。但是如有特殊需求,则需要自己编写事件通用层代码,代
码所在路径: drivers/input/evdev.c
evdev设备注册流程:
在drivers/input/evdev.c文件中最后面调用了input_register_handler 函数注册input_handler, 所以事件
处理层中的对象就是input_handler 结构体。
在这里插入图片描述
当事件处理层和设备驱动层匹配成功后会执行connect()函数,在此函数中创建了一个字符设备,所以input子系统仍然属于字符设备。connect()函数位于evdev.c中,也就是事件处理层,其作用就是:创建设备,实现文件操作集,并且生成设备节点。
在这里插入图片描述在这里插入图片描述
在include/linux/input.h中,定义了input_handler结构体
在这里插入图片描述

private:指向私有数据的指针,用于存储特定输入设备驱动程序需要的任何额外信息。
event:处理单个输入事件的函数指针。当输入设备产生-一个事件时,该函数将被调用。
events:处理一*组输入事件的函数指针。当输入设备产生--组连续的事件时,该函数将被调
用。
filter:过滤输入事件的函数指针。该函数用于决定是否接受或忽略特定类型、代码和值的输
入事件。
match:匹配输入设备的函数指针。用于确定某个输入设备是否适用于当前输入处理程序。
connect:连接输入设备的函数指针。当-一个输入 设备与输入处理程序建立连接时,该函数将
被调用。
disconnect:断开输入设备连接的函数指针。当- - 个输入设备与输入处理程序断开连接时,
该函数将被调用。
start:启动输入处理程序的函数指针。当输入处理程序启动时,该函数将被调用。
legacy_ minors: - -个布尔值,表示是否使用传统的次设备号分配方式。
minor:输入处理程序的次设备号。
name:输入处理程序的名称。
id_ _table: 指向输入设备识别标识表的指针。用于指定哪些输入设备适用于该输入处理程序。
h_ list: 链表节点,链接该handler绑定的input_ handle
node:链表节点,将handler注册到系统的input_ handler_ list 链表

核心层

核心层提供了input接口的注册与注销的函数,起到承上启下的作用。
在input_register_handler中使用input_attach_handler对input_handler和input_dev即事件处理层和设备驱动层进行进行匹配。
在这里插入图片描述
在这里插入图片描述
以上两个函数都位于input.c中,也就是input核心层,也就是核心层用于匹配事件处理层和设备驱动层。

设备驱动层

在设备驱动层中,定义了input_dev结构体,此结构体位于input.h中,可以看到这个结构体非常长,这里面的部分函数需要我们自己实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值