zoukankan      html  css  js  c++  java
  • input输入子系统分析

    ---恢复内容开始---

    一、input输入子系统框架分析

      概述:该部分从整体上介绍了Input输入子系统的结构框架,有助于读者从宏观上对input输入子系统进行把控。

      本节重点:

      a、输入子系统的框架结构

      b、各层对应的文件位置

      c、输入子系统的事件处理机制

      d、输入子系统的驱动层基本操作流程

      e、输入子系统的驱动层常用函数

      本节难点:

      a、输入子系统的事件处理机制

      b、输入子系统驱动工作流程

      1、初识Linux输入子系统

      linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EVentHandle)、输入子系统核心层(inputCore)和输入子系统设备驱动层。

      对于输入子系统设备驱动层而言,主要是实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层。

      对于核心层而言,为设备驱动层提供了规范和接口,设备驱动层只需要关心如何驱动硬件并获得硬件数据(比如按下的按键),然后调用核心层提供的接口,核心层会将数据自动提交给事件处理层。对于事件处理而言,则是用户编程的接口(既设备节点),并处理驱动层提交的数据。

      对于Linux输入子系统的框架结构如下图1所示:

                    linux输入子系统框架结构

      2、输入子系统各层文件

      /dev/input目录下显示的是已经注册在内核中的设备编程接口,用户通过open这些设备文件来打开不同的输入设备进行硬件操作。

      事件处理层为不同硬件类型提供了用户访问及处理接口。例如当我们打开设备/dev/input/mice时,会调用到事件处理层的Mouse Handler来处理输入事件,这也使得设备驱动层无需关心设备文件的操作,因为Mouse Handler已经有了对应事件处理的方法。

      输入子系统由内核代码drivers/input/input.c构成,它的存在屏蔽了用户到设备驱动的交互细节,为设备驱动层和事件处理层提供了相互通信的统一界面。

     

                        图2  linux输入子系统事件处理机制

      作为输入设备的驱动开发者,需要做以下几步:

        a、在驱动加载模块中,设置你的input设备支持的事件类型(一个设备可以选择一个或者多个事件类型上报给输入子系统),如 EV_SYN  0x00 同步事件、EV_KEY 0x01 按键事件、EV_REL  0x02 相对坐标等;

        b、注册中断处理函数,例如键盘设备需要编写按键的抬起、放下,触摸屏设备需要编写按下、抬起、绝对移动,鼠标设备需要编写单击、抬起、相对移动,并且需要在必要的时候提交硬件数据(键值/坐标/状态等等)

        c、将输入设备注册到输入子系统中

      Linux输入子系统提供了设备驱动层上报输入事件的函数,在include/linux/input.h中:

        void input_sync(struct input_dev *dev);

      参考自https://blog.csdn.net/ielife/article/details/7798952,如有侵权,请告知

  • 相关阅读:
    leetcode 686. Repeated String Match
    leetcode 507. Perfect Number
    leetcode 681. Next Closest Time
    leetcode 682. Baseball Game
    leetcode 684. Redundant Connection
    leetcode 677. Map Sum Pairs
    leetcode 402. Remove K Digits
    python numpy
    leetcode 409. Longest Palindrome
    python垃圾回收机制
  • 原文地址:https://www.cnblogs.com/gzqblogs/p/10067599.html
Copyright © 2011-2022 走看看