接下来,来分析三个结构体
打开这个文件drivers\input\evdev.c
第一步:要找到它的入口函数evdev_init
看到了,入口的位置注册了一个 input_handler,并且对里面的值完成赋值,和之前学习,我自己注册platform驱动的动作,
struct input handler 结构体定义在 include/linux/input.h 文件。input handler 结构体中成员:
private:指向私有数据的指针,用于存储特定输入设备驱动程序需要的任何额外信息。
event:处理单个输入事件的函数指针。当输入设备产生一个事件时,该函数将被调用。
events:处理一组输入事件的函数指针。当输入设备产生一组连续的事件时,该函数将被调
用。
filter: 过滤输入事件的函数指针。该函数用于决定是否接受或忽略特定类型、代码和值的输
入事件。
match:匹配输入设备的函数指针。用于确定某个输入设备是否适用于当前输入处理程序。
connect:连接输入设备的函数指针。当一个输入设备与输入处理程序建立连接时,该函数将
被调用。
disconnect:断开输入设备连接的函数指针。当一个输入设备与输入处理程序断开连接时,
该函数将被调用。
start:启动输入处理程序的函数指针。当输入处理程序启动时,该函数将被调用。
legacyminors:一个布尔值,表示是否使用传统的次设备号分配方式。
minor: 输入处理程序的次设备号。
name:输入处理程序的名称。
id table:指向输入设备识别标识表的指针。用于指定哪些输入设备适用于该输入处理程序。
h list: 链表节点,链接该 handler绑定的input handle
node:链表节点,将 handler注册到系统的input handler list 链表
struct input handler 到这里我只知道这是事件处理层的数据结构,但是还不知到做了那些事情,接下来就来看看,他在注册的时候做了那些东西。
第一步:在核心层有两个功能,就是提供了注册和注销函数。第二步:是让驱动层和事件处理层匹配上。分析出来核心层了,但是还是不知道事件处理层做了那些事情。接着看。
在上面我已经知道了struct input_dev 这个结构体。这个结构体就是设备驱动的结构体,我们是要写设备驱动层的,所以我们在写输入子系统的设备驱动的时候,就要有一个struct input_dev结构体,看一下它的原型。里面的成员是非常多的,这里只是一部分。
第二步:驱动层和事件处理层匹配上后就调用connect,connenct是创建一个新的evdev设备
下面这部分也是connect函数里面的,和我们自己创建一个设备文件步骤是一样的。 所以知道事件处理层做了那些事情。