input子系统分析之一:框架
内核版本:3.9.5
输入设备总类繁杂,包括按键,键盘,触摸屏,鼠标,摇杆等等,它们本身都是字符设备,不过内核为了能将这些设备的共性抽象出来,简化驱动的开发,建立了一个Input子系统.Input子系统分为三层,从下至上分别是输入设备驱动层,输入核心层以及输入事件驱动层.
- 核心层: 高效,无bug,可重用
- 事件处理层: 负责与应用程序交互
- 设备驱动层: 负责与底层输入设备交互
事件处理程序是标准的,对于所有的输入类是通用的.所以一般而言我们要实现的设备驱动程序,而不是事件处理程序.内核已经为我们提供了常用的事件处理程序,基本上如果没有特需要求,我们没有必要去实现事件处理程序.设备驱动程序可以利用一个存在的,合适的事件处理程序通过核心和用户应用程序交互.
考虑输入设备主要的工作过程都是:动作产生(按键,触屏……)-->产生中断-->读取数值(键值,坐标……)-->将数值传递给应用程序.最后一个步骤就属于事件的处理,对于同一类设备,他们的处理方式都是相同的,因此内核已在事件驱动层为我们做好了,不需我们操心,而产生中断-->读取数值是因设备而异的,需要我们根据具体的设备来编写驱动.一个大致的工作流程就是,input device向上层报告-->input core接收报告,并根据在注册input device时建立好的连接选择哪一类handler来处理事件-->通过handler将数据存放在相应的dev(evdev,mousedev…)实例的缓冲区中,等待应用程序来读取.当然,有时候也需要从应用层向设备层逆向传递,比如控制一些和设备相关的LED,蜂鸣器等.
输入子系统三个层次框架如下:
它们之间的关系可以用下图来阐释:
下一篇文章将分析以下输入子系统一些核心结构
本文引用:http://blog.csdn.net/vanbreaker/article/details/7714188
http://www.cnblogs.com/lishixian/articles/2971984.html
input子系统分析之一:框架的更多相关文章
- Linux input子系统分析
输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...
- linux kernel input 子系统分析
Linux 内核为了处理各种不同类型的的输入设备 , 比如说鼠标 , 键盘 , 操纵杆 , 触摸屏 , 设计并实现了一个对上层应用统一的试图的抽象层 , 即是Linux 输入子系统 . 输入子系统的层 ...
- input子系统分析
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ -------- ...
- input子系统分析之三:驱动模块
内核版本:3.9.5 本节将以even handler来分析设备的注册和打开的过程,分析之前不妨回顾一下上节介绍的数据结构. 结合前两节分析可知,input子系统分为3层,最上一层是event han ...
- input子系统分析(转)
转自:http://www.linuxidc.com/Linux/2011-09/43187.htm 作者:作者:YAOZHENGUO2006 Input子系统处理输入事务,任何输入设备的驱动程序都可 ...
- input子系统分析之二:数据结构
内核版本:3.9.5 1. input_dev,用来标识输入设备 struct input_dev { const char *name; const char *phys; const char * ...
- 内核input子系统分析
打开/driver/input/input.c 这就是input代码的核心 找到 static int __init input_init(void) { err = class_register(& ...
- SPI子系统分析之一:框架
内核版本:3.9.5 SPI子系统概述: 一个SPI主控制器对应一条SPI总线,当然在系统中有唯一的总线编号. SPI总线上有两类设备: 其一是主控端,通常作为SOC系统的一个子模块出现,很多嵌入式M ...
- Linux Input子系统
先贴代码: //input.c int input_register_handler(struct input_handler *handler) { //此处省略很多代码 list_for_each ...
随机推荐
- Jquery 点击父类全选子类 , 子类选父类
<p> <label style="font-size:18px;font-weight: bold;" class="checkboxs"& ...
- 《DSP using MATLAB》示例Example 8.9
- VS2013下的64位与32位程序配置
VS2013下的64位与32位程序配置 在Windows 7 64bit和Visual Studio 2013下生成64位程序. 新建一个Visual Studio Win32 Console项目 ...
- php基础语法(变量)
PHP常用表现形式: 1.<?php .....这里是php代码 ?> 2.<? .....这里是php代码 ?> 此形式依赖于php.ini中的一项设置: short_ope ...
- 理解AI的角度
<经济学人>去年出了一期很经典的封面,封面里将全球各大高科技平台企业如谷歌.亚马逊之许描绘成正在采油的钻井,寓意很明显,在数字经济时代,大平台正在开采数字化的石油——大数据,而开采出来的大 ...
- MDK警告 warning: #111-D: statement is unreachable
解析: "statement is unreachable"这句一般是说编译器认为程序执行不到这里. 因为本人运行程序的时候,再向前有一个While(1)循环, 理论上说除非你里面 ...
- MEF学习总结(4)---Container层
通过AttributeedModelPrograming,我们可以声明暴露组件,依赖组件,发现组件,但是所有这些需要有一个触发点.即需要把所有这些组合在一起来协同工作,最终实现依赖注入.这就是Cont ...
- C#操作PowerDesigner代码
首先,程序的界面如下:
- appium+python自动化34-获取元素属性get_attribute
获取text # coding:utf-8 from appium import webdriver from time import sleep desired_caps = { 'platform ...
- 20165226 2017-2018-4 《Java程序设计》第7周学习总结
20165226 2017-2018-4 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 下载MySQL最新版本. 连接数据库 下载JDBC-M ...