input子系统详解1——input子系统简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 

转载博客:input输入子系统 - 涛少& - 博客园​​​​​​​

前言

Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。

 

1、input子系统的层次结构

如上图所示,input子系统分为3层:具体硬件驱动层,框架核心层,输入事件驱动层。图中Drivers对应的是具体硬件驱动层,表示各种各样不同的输入设备;Input Core对应的就是框架核心层;Handlers对应的就是输入事件驱动层;最右边的代表的是应用层。

(1)从图中可知,系统可以注册多个输入设备,例如一台电脑上可以带有鼠标,键盘等。

(2)输入事件驱动层的各个handler(Keyboard/Mouse/Joystick/Event)属于平行关系,不同handler所对应的输入设备在应用层中的接口命名方式不一样。例如,Mouse下的输入设备在应用层的接口是 /dev/input/mouse*,Joystick的是 /dev/input/js*,Event的是 /dev/input/event*。

(3)框架核心层负责协调输入事件驱动层和硬件驱动层,使得它们之间能够完成数据传递。当硬件驱动层发生输入事件的时候,整个系统就被激活了,事件就会通过框架核心层传递到输入事件驱动层中对应的一个或者多个handler中,最终会传递到应用空间。

2、input子系统的实质

对比之前学过的驱动框架,input子系统其实就是输入设备的驱动框架。

与之前的学过的驱动框架不同的是,input输入子系统分为上中下3层,所以其复杂度高于之前讲的led、misc、fb等设备的驱动框架。 

3、input子系统解决的问题

在GUI界面中,用户的自由度很大,比如可以响应不同类别的输入设备,而且还能够针对不同的输入做出不同的动作。例如window中的一个软件既可以响应鼠标输入事件,也可以响应键盘输入事件,而且这些事件都是预先不知道的。

input子系统解决了(不同类别的输入设备的)输入事件与应用层之间的数据传输问题,使得应用层能够获取到各种(不同类别的输入设备的)输入事件。换言之,input子系统能够囊括所有的不同类别的输入设备,让应用层感知到所有发生的输入事件。简言之,input子系统屏蔽了输入类设备的差异性,解决了应用层和驱动层的信息交流问题。

4、input子系统如何管理输入事件

input子系统使用struct input_event结构体来统一管理输入事件。

该结构体定义在x210_kernel\include\linux\input.h文件中,内容如下:

struct input_event {struct timeval time;//事件发生的时间点__u16 type;//事件发生的由来类型(键盘?触摸屏?)__u16 code;//事件的编码(按键a对应的编码)__s32 value;//操作值(比如是按下了还是弹起了;触摸点坐标等)
};

5、举例说明input子系统工作过程

以点击鼠标为例,说明input子系统的工作过程。

当我们按下鼠标左键的时候会触发中断(中断是早就注册好的),就会去执行中断所绑定的处理函数,在函数中就会去读取硬件寄存器来判断按下的是哪个按键和状态 。然后按键信息上报给input core层,input core层处理好了之后就会上报给input event层,在input event层把输入事件封装成一个input_event结构体放入一个缓冲区中,应用层的read就会将缓冲区中的数据读取出去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ie compatibility

http://www.red-team-design.com/how-to-solve-common-ie-bugs转载于:https://www.cnblogs.com/daishuguang/archive/2013/04/20/3031900.html

【04】Effective Java - 类和接口

为什么80%的码农都做不了架构师?>>> 1、使类和成员的可访问性最小化 封装是软件设计的基本原则之一,它的好处就是解除组成系统的各个模块之间的耦合关系,使得这些模块可以独立地开发、测试、优化、使用、理解 修改,同…

java 圆的交点_java – 获取线条和形状的交点

理念您可以使用getPathIterator()方法将GenenralPath解构为其段(移动到,行到,四到,立方到,关闭).现在,您可以搜索每个线段与线的交叉点.public static Point[] getIntersections(Path path, Line line) {List intersections new ArrayList();PathIterator it path.getPathIte…

OpenGL运用辅佐库创立规矩几许目标

辅佐类分类: 1)窗口初始化函数 2)窗口处置和工作处置函数 3)定义场景制造循环函数 4)三围物体制造函数 5)颜色索引表装入函数 6)空闲工作处置函数 下面描写了一个程序,该程序尽可以包…

input子系统详解2——应用层代码实践

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、编程步骤总结 步骤1:确定设备文件名字 步骤2:使用标准接口打开与读取设备文件 步骤3:解析struct input_event 二、编程步骤分析 1、确定设备文件名 应用层操作…

构造函数初始化器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 {class Program{static void Main(string[] args){cat c new cat("萌萌");//先执行cat(string s,int i)构造…

oracle中的视图详解

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基…

input子系统详解3——input子系统框架核心层分析

以下内容源于朱有鹏嵌入式课程的学习,如有侵权请告知删除。 一、前言 由input子系统简介可知,input子系统分为三层: 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件,分别对应…

java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中

把spring-boot项目按照平常的web项目一样发布到tomcat容器下一、修改打包形式在pom.xml里设置 war二、移除嵌入式tomcat插件在pom.xml里找到spring-boot-starter-web依赖节点,在其中添加如下代码,org.springframework.bootspring-boot-starter-weborg.sp…

Gitlab Merge Request Builder Plugin 配置小记

2019独角兽企业重金招聘Python工程师标准>>> 以前在给一些开源项目贡献代码的时候,在github上一提交pull request或者提交的分支代码更新了的时候,jenkins就会自动把代码进行merge并且运行单元测试,当时看了心里就2个字&#xff1…

IOS:屏幕旋转与Transform

IOS:屏幕旋转与Transform iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好。 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Supporte…

input子系统详解4——输入事件驱动层源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、前言 由input子系统简介可知,input子系统分为三层: ​ 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件&#xff0…

前端翻译:Activating Browser Modes with Doctype

一、前言                         原本备份: http://www.cnblogs.com/fsjohnhuang/p/3830623.html 由于本人英语能力有限,译本内容难免有误,望各位指正! 本译文不含附录部分,请知悉。 二、译…

java公钥加密私钥解密过程_GPG加密解密过程

GPG加密解密过程一、Linux系统下1.安装yum安装[rootPOC-ORACLE ~]# yum install gnupg下载安装包安装https://www.gnupg.org/download/index.en.html查看gpg帮助[rootPOC-ORACLE ~]# gpg --helpgpg (GnuPG) 2.0.14libgcrypt 1.4.5Copyright (C) 2009 Free Software Foundation,…

魔兽世界客户端数据研究(三)

终于决定,还是通过wow model viewer起手,研究一下WOW的数据类型,从另一个角度,体验一把这个唯一让我充过值的游戏。 这将是一系列随笔,即在读代码的时候,顺便记录,以理清思路和加深映象。 其中…

input子系统详解5——参考驱动模板编写按键驱动

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、input类设备驱动的开发 (1)输入事件驱动层和框架核心层不需要动,只需要编写具体硬件驱动层代码。 (2)具体硬件驱动层的编程接口与调用…

java很多魔法数判断_可别在代码中写那么多魔法值了,脑壳疼!

1. 前言重构老代码中遇到了不少类似下面这种写法:public void attend(String value) {if ("0".equals(value)) {//todo} else if ("1".equals(value)) {//todo} else {//todo}}脑壳疼!从 Java 语法上无懈可击,但是从业务…

十分钟让你明白Objective-C的语法(和Java、C++的对比)

2019独角兽企业重金招聘Python工程师标准>>> 很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C有着很大的区别,有的同学会感觉…

稀疏多项式的运算

问题描述: 已知稀疏多项式Pn(X)c1x^e1c2x^e2....cmx^em,其中nem>em-1>....>e1>0; ci!0,m>1.试采用存储量同多项式项数m成正比的顺序存储结构,编写求Pn(x0)的算法(x0为给定值),并分析你的算法的时间复杂…

I2C子系统详解1——I2C总线设备的驱动框架

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 I2C总线驱动框架详解 linux内核I2C子系统详解 一、I2C总线的物理特征 这部分内容的简介可见博客:SPI、I2C、UART(即串口)三种串行总线详解。 &#x…