努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/05/19/6433337.aspx
input子系统最重要的部分就是向上层report了。这里还是先介绍几个数据结构:
这里的次设备号是EVDEV_MINOR_BASE(64),也就是说evdev_handler所表示的设备文件范围(13,64)~(13,64+32)。
如下一个结构体:evdev_handler匹配所有设备。
这个是evdev_handler是fops,下面的讲解中会用到其中的open,read函数。
在驱动程序中我们会调用input_report_abs等函数:
跟踪input_event如下:
跟踪input_handle_event如下:
如果该事件需要input device来完成,就会将disposition设置成INPUT_PASS_TO_DEVICE,如果需要input handler来完成,就会将disposition设置成INPUT_PASS_TO_DEVICE,如果需要两者都参与,则将disposition设置成INPUT_PASS_TO_ALL。
跟踪input_pass_event如下:
比如下边的evdev_handler的evdev_event:
这里总结一下事件的传递过程:首先在驱动层中,调用inport_report_abs,然后他调用了input core层的input_event,input_event调用了input_handle_event对事件进行分派,调用input_pass_event,在这里他会把事件传递给具体的handler层,然后在相应handler的event处理函数中,封装一个event,然后把它投入evdev的那个client_list上的client的事件buffer中,等待用户空间来读取。
下边看一下用户程序打开文件时的过程,首先调用了input_open_file:
这里还是假设handler是evdev_handler。
下面是用户进程读取event的底层实现:
这里总结一下:如果两个进程打开同一个文件,每个进程在打开时都会生成一个evdev_client,evdev_client被挂在evdev的client_list,在handle收到一个事件的时候,会把事件copy到挂在client_list上的所有evdev_client的buffer中。这样所有打开同一个设备的进程都会收到这个消息而唤醒。
分享到:
相关推荐
Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上).pdf Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer(下).pdf Linux驱动修炼之道-framebuffer...
在提供的资源中,"ZYNQ 7010-7020实现input子系统驱动框架编程(Linux驱动)"包含了具体的代码实现,可以作为参考来理解和学习如何编写针对ZYNQ 7010-7020的input子系统驱动。通过对这些代码的阅读和实践,开发者...
理解input子系统的原理对于系统开发者、驱动程序编写者以及对Linux内核感兴趣的人员来说至关重要。下面我们将深入探讨Linux input子系统的工作流程和相关知识点。 1. 输入设备驱动模型: - 设备注册:驱动程序首先...
Linux设备模型中的Input子系统是Linux内核中处理输入设备的核心部分,它负责管理各种输入设备,如键盘、鼠标、触摸屏、游戏控制器等。Input子系统的架构设计旨在提供一个统一的接口,使得驱动程序可以方便地与内核...
在Linux操作系统中,嵌入式驱动的input子系统是一个至关重要的组成部分,主要用于处理各种输入设备的事件,如键盘、鼠标、触摸屏等。这个子系统的设计使得设备驱动编写变得更为简洁,同时也为用户空间应用程序提供了...
在Linux内核中,Input子系统处理的事件主要包括按键按下/释放、鼠标移动、滚轮操作等。当设备驱动检测到这些事件时,它们会将事件数据上报给Input子系统,由Input子系统进行格式化和整理,然后传递给需要这些事件的...
Linux 输入子系统(input subsy
在Linux操作系统中,GPIO(General Purpose Input/Output)子系统是一个关键部分,它允许软件对硬件的通用I/O引脚进行读写操作。Zynq是Xilinx公司的一款基于ARM架构的可编程系统芯片(System on Chip, SoC),集成了...
Linux 的 INPUT 子系统是一个负责处理输入事件的子系统。在这个子系统中,驱动程序可以通过注册事件处理函数来处理输入事件。INPUT 子系统包括三个层次:驱动层、核心层和事件处理层。驱动层负责驱动硬件设备的读写...
通过对Linux Input子系统及其驱动开发实例的分析,我们可以了解到Input子系统在Linux内核中的重要性和灵活性。开发者可以通过编写合适的驱动程序,轻松地支持新的输入设备,并确保这些设备能够在复杂的用户环境中...
在Linux内核源码中,Input子系统的实现位于`drivers/input`目录下。它包括了一系列的结构体、函数和宏,用于管理和操作输入设备。例如,`struct input_dev`是表示输入设备的核心结构,包含了设备支持的事件类型(如...
解压后使用,版本:logstash-input-mongodb-0.4.1 logstash离线包安装命令: Windows:logstash-plugin install...Linux:logstash-plugin install file:///logstash-input-mongodb/logstash-input-mongodb-0.4.1.zip
linux按键驱动(input子系统)
Input core 层是 Input 子系统的中间层,它是链接其他两个层之间的纽带和桥梁,向下提供驱动层,向上提供 Event handler 层。Input core 层负责将 input 事件传递给 Event handler 层,并提供了一个统一的接口来处理...
"evtouch"和"touch"标签揭示了该驱动程序与触摸屏技术的关联,而"xf86"和"xf86-input-evtouch"则强调了它在X Window系统输入子系统的角色。 xf86-input-evtouch是XFree86项目的一部分,它是一个针对Linux内核事件层...
《Ubuntu在ARM架构下的触屏驱动安装与配置详解——基于pmLinux-Ubuntu-12.04-20.10-x86-arm-Driver》 在嵌入式系统和物联网领域,Ubuntu操作系统因其开源、稳定且丰富的软件库而备受青睐。尤其是针对ARM架构的设备...
针对特定的输入设备,Linux Input 子系统提供了详细的驱动程序文档,帮助开发者更好地理解和开发相应的驱动程序。以下是一些示例: - **ALPS 触摸板协议**:介绍了如何编写 ALPS 触摸板的驱动程序,包括必要的协议...
在输入子系统中,驱动程序通常会实现`input_event`函数,用于向输入子系统报告设备事件,如按键按下或移动。输入子系统接收到这些事件后,会通过中断服务例程(ISR)或者轮询方式来处理,然后将事件传递给用户空间的...