`
helloyesyes
  • 浏览: 1306673 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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

阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/19/6431094.aspx

内核的输入子系统是对分散的,多种不同类别的输入设备(如键盘,鼠标,跟踪球,操纵杆,触摸屏,加速计和手写板)等字符设备进行统一处理的一层抽象,就是在字符设备驱动上抽象出的一层。输入子系统包括两类驱动程序:事件驱动程序和设备驱动程序。事件驱动程序负责和应用程序的接口,而设备驱动程序负责和底层输入设备的通信。鼠标事件生成文件mousedev属于事件驱动程序,而PS/2鼠标驱动程序是设备驱动程序。事件驱动程序是标准的,对所有的输入类都是可用的,所以要实现的是设备驱动程序而不是事件驱动程序。设备驱动程序可以利用一个已经存在的,合适的事件驱动程序通过输入核心和用户应用程序接口。
输入子系统带来了如下好处:

1.统一了物理形态各异的相似的输入设备的处理功能
2.提供了用于分发输入报告给用户应用程序的简单的事件接口
3.抽取出了输入驱动程序的通用部分,简化了驱动,并引入了一致性
如下图,input子系统分三层,最上一层是event handler,中间是intput core,底层是input driver。input driver把event report到input core层。input core对event进行分发,传到event handler,相应的event handler层把event放到event buffer中,等待用户进程来取。

现在了解了input子系统的基本思想,下面来看一下input子系统的3个基本的数据结构:

如下图代表了input_dev,input_handler,input_handle,3者之间的关系。一类handler可以和多个硬件设备相关联,一个硬件设备可以和多个handler相关联。例如:一个触摸屏设备可以作为一个event设备,作为一个鼠标设备,也可以作为一个触摸设备,所以一个设备需要与多个平台驱动进行连接。而一个平台驱动也不只为一个设备服务,一个触摸平台驱动可能要为A,B,C3个触摸设备提供上层驱动,所以需要这样一对多的连接。

下面来看看input子系统的初始化函数:

下面来看input子系统的file_operations,这里只有一个打开函数input_open_file,这个在事件传递部分讲解。


下边来看input_dev设备的注册:

跟踪程序,来看看input_attach_handler的实现:

下边来看看这个匹配函数:如果id->flags存在,并且相应的标志为被设定则进行比较。

下边是刚刚看到的connect,这里假设这个handler是evdev_handler。如果匹配上了就会创建一个evdev,它里边封装了一个handle,会把input_dev和input_handler关联到一起。

看一下这张图会对上边的结构有清楚的认知了:

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    Linux 下的input 子系统 原理

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

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

    Linux 2.6设备模型中的Input子系统是一个关键的组件,它充当了操作系统与各种输入设备(如键盘、鼠标、触摸屏等)之间的桥梁。Input子系统的主要目标是为上层应用程序提供一个统一的接口,使得系统能够方便地处理...

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

    Linux 输入子系统(input subsy

    zynq的linux驱动4-gpio子系统

    在Zynq平台上,通过Linux驱动4-GPIO子系统,我们可以灵活地控制MIO(Multi-IO)引脚的电平状态,从而实现对硬件设备的控制,比如LED灯的开关。 GPIO驱动的基本工作原理是通过Linux内核的GPIO框架来抽象硬件的GPIO...

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

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

    Linux Input子系统分析.pdf

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

    linux_input子系统详截

    Linux Input子系统是Linux内核中负责处理各种输入设备(如键盘、鼠标、触摸屏、传感器等)的关键部分。它作为一个中间层,将底层硬件驱动与上层应用程序隔离开来,提供了一种统一的方式来处理来自不同输入设备的事件...

    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子系统)

    linux按键驱动(input子系统)

    Linux中Input输入子系统分析.pdf

    Linux 中 Input 输入子系统分析 Linux 操作系统中的 Input 输入子系统是一个非常重要的组件,它负责处理各种输入设备的事件,例如键盘、鼠标、触摸屏等。Input 子系统是一个多层次结构,主要分为三层:Input driver...

    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内核事件层...

    pmLinux-Ubuntu-12.04-20.10-x86-arm-Driver

    《Ubuntu在ARM架构下的触屏驱动安装与配置详解——基于pmLinux-Ubuntu-12.04-20.10-x86-arm-Driver》 在嵌入式系统和物联网领域,Ubuntu操作系统因其开源、稳定且丰富的软件库而备受青睐。尤其是针对ARM架构的设备...

    Input子系统详解

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

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

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

Global site tag (gtag.js) - Google Analytics