`
tomhibolu
  • 浏览: 1407514 次
文章分类
社区版块
存档分类
最新评论

Linux驱动修炼之道-INPUT子系统(下)

 
阅读更多

努力成为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中,等待用户空间来读取。

当用户空间打开设备节点/dev/input/event0~/dev/input/event4的时候,会使用input_fops中的input_open_file()函数,input_open_file()->evdev_open()(如果handler是evdev的话)->evdev_open_device()->input_open_device()->dev->open()。也就是struct file_operations input_fops提供了通用接口,最终会调用具体input_dev的open函数。下边看一下用户程序打开文件时的过程,首先调用了input_open_file:

这里还是假设handler是evdev_handler。

下面是用户进程读取event的底层实现:

这里总结一下:如果两个进程打开同一个文件,每个进程在打开时都会生成一个evdev_client,evdev_client被挂在evdev的client_list,在handle收到一个事件的时候,会把事件copy到挂在client_list上的所有evdev_client的buffer中。这样所有打开同一个设备的进程都会收到这个消息而唤醒。

分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上).pdf Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer(下).pdf Linux驱动修炼之道-framebuffer...

    ZYNQ 7010-7020实现input子系统驱动框架编程(Linux驱动).zip

    在提供的资源中,"ZYNQ 7010-7020实现input子系统驱动框架编程(Linux驱动)"包含了具体的代码实现,可以作为参考来理解和学习如何编写针对ZYNQ 7010-7020的input子系统驱动。通过对这些代码的阅读和实践,开发者...

    Linux 下的input 子系统 原理

    理解input子系统的原理对于系统开发者、驱动程序编写者以及对Linux内核感兴趣的人员来说至关重要。下面我们将深入探讨Linux input子系统的工作流程和相关知识点。 1. 输入设备驱动模型: - 设备注册:驱动程序首先...

    Linux设备模型之input子系统详解.rar

    Linux设备模型中的Input子系统是Linux内核中处理输入设备的核心部分,它负责管理各种输入设备,如键盘、鼠标、触摸屏、游戏控制器等。Input子系统的架构设计旨在提供一个统一的接口,使得驱动程序可以方便地与内核...

    嵌入式驱动input子系统详细资料

    在Linux操作系统中,嵌入式驱动的input子系统是一个至关重要的组成部分,主要用于处理各种输入设备的事件,如键盘、鼠标、触摸屏等。这个子系统的设计使得设备驱动编写变得更为简洁,同时也为用户空间应用程序提供了...

    Linux2.6设备模型之Input子系统详解

    在Linux内核中,Input子系统处理的事件主要包括按键按下/释放、鼠标移动、滚轮操作等。当设备驱动检测到这些事件时,它们会将事件数据上报给Input子系统,由Input子系统进行格式化和整理,然后传递给需要这些事件的...

    Linux设备模型之input子系统详解

    Linux 输入子系统(input subsy

    linux驱动及g-sensor学习心得.doc

    Linux 的 INPUT 子系统是一个负责处理输入事件的子系统。在这个子系统中,驱动程序可以通过注册事件处理函数来处理输入事件。INPUT 子系统包括三个层次:驱动层、核心层和事件处理层。驱动层负责驱动硬件设备的读写...

    Linux Input子系统分析.pdf

    通过对Linux Input子系统及其驱动开发实例的分析,我们可以了解到Input子系统在Linux内核中的重要性和灵活性。开发者可以通过编写合适的驱动程序,轻松地支持新的输入设备,并确保这些设备能够在复杂的用户环境中...

    linux_input子系统详截

    在Linux内核源码中,Input子系统的实现位于`drivers/input`目录下。它包括了一系列的结构体、函数和宏,用于管理和操作输入设备。例如,`struct input_dev`是表示输入设备的核心结构,包含了设备支持的事件类型(如...

    linux按键驱动(input子系统)

    linux按键驱动(input子系统)

    zynq的linux驱动4-gpio子系统

    在Linux操作系统中,GPIO(General Purpose Input/Output)子系统是一个关键部分,它允许软件对硬件的通用I/O引脚进行读写操作。Zynq是Xilinx公司的一款基于ARM架构的可编程系统芯片(System on Chip, SoC),集成了...

    logstash-input-mongodb离线包

    解压后使用,版本: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输入子系统分析.pdf

    Input core 层是 Input 子系统的中间层,它是链接其他两个层之间的纽带和桥梁,向下提供驱动层,向上提供 Event handler 层。Input core 层负责将 input 事件传递给 Event handler 层,并提供了一个统一的接口来处理...

    xf86-input-evtouch-0.8.7.tar.gz_evtouch_touch_xf86_xf86-input-ev

    "evtouch"和"touch"标签揭示了该驱动程序与触摸屏技术的关联,而"xf86"和"xf86-input-evtouch"则强调了它在X Window系统输入子系统的角色。 xf86-input-evtouch是XFree86项目的一部分,它是一个针对Linux内核事件层...

    Input子系统详解

    针对特定的输入设备,Linux Input 子系统提供了详细的驱动程序文档,帮助开发者更好地理解和开发相应的驱动程序。以下是一些示例: - **ALPS 触摸板协议**:介绍了如何编写 ALPS 触摸板的驱动程序,包括必要的协议...

    linux input子系统

    在输入子系统中,驱动程序通常会实现`input_event`函数,用于向输入子系统报告设备事件,如按键按下或移动。输入子系统接收到这些事件后,会通过中断服务例程(ISR)或者轮询方式来处理,然后将事件传递给用户空间的...

    Linux内核Input子系统初始化驱动架构.pdf

    本文将深入分析Linux内核Input子系统的框架、逻辑关系以及驱动模型。 首先,Input子系统包含一系列重要的数据结构,这些结构定义了系统如何管理输入设备以及事件的传递。一个典型的输入设备被表示为input_dev结构体...

Global site tag (gtag.js) - Google Analytics