input子系统分析之一:框架】的更多相关文章

内核版本:3.9.5 输入设备总类繁杂,包括按键,键盘,触摸屏,鼠标,摇杆等等,它们本身都是字符设备,不过内核为了能将这些设备的共性抽象出来,简化驱动的开发,建立了一个Input子系统.Input子系统分为三层,从下至上分别是输入设备驱动层,输入核心层以及输入事件驱动层. 核心层: 高效,无bug,可重用 事件处理层: 负责与应用程序交互 设备驱动层: 负责与底层输入设备交互 事件处理程序是标准的,对于所有的输入类是通用的.所以一般而言我们要实现的设备驱动程序,而不是事件处理程序.内核已经为我们…
输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分析很有意义. 一.input子系统知识点 完整的input子系统分析包括以下几方面: 1) 软件层次 2) 输入子系统分层(input_handler,input_core, input_device) 3) 输入设备(TS)驱动开发 4) evdev handler分析 5) input设备模型视…
Linux 内核为了处理各种不同类型的的输入设备 , 比如说鼠标 , 键盘 , 操纵杆 , 触摸屏 , 设计并实现了一个对上层应用统一的试图的抽象层 , 即是Linux 输入子系统 . 输入子系统的层次结构体如下 从底层到上层 , input 子系统由 设备驱动层 , 核心层 , 以及事件处理层3个部分组成 当一个鼠标移动, 一个按键按下或弹起 , 它都需要从底层设备驱动-->核心层-->事件处理层 -->用户空间 , 层层上报 , 一直到运用程序. 应用这个input  子系统有如下优…
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:前言 在键盘驱动代码分析的笔记中,接触到了input子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input子系统.Input子系统 是所有I/O设备驱动的中间层,为上层提供了一个统一的界面.例如,在终端系统中,我们不…
内核版本:3.9.5 本节将以even handler来分析设备的注册和打开的过程,分析之前不妨回顾一下上节介绍的数据结构. 结合前两节分析可知,input子系统分为3层,最上一层是event handler,中间层是input core,底层是input driver.input driver把event report到input core层,input core对event进行分发,传到 event handler,相应的event handler层把event 放到event buffer…
转自:http://www.linuxidc.com/Linux/2011-09/43187.htm 作者:作者:YAOZHENGUO2006 Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互.输 入设备一般包括键盘,鼠标,触摸屏等,在内核中都是以输入设备出现的.下面分析input输入子系统的结构,以及功能实现. 一. Input子系统结构与功能实现 1. Input子系统是分层结构的,总共分为三层: 硬…
内核版本:3.9.5 1. input_dev,用来标识输入设备 struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id;//与input_handler匹配用的id unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//支持所…
打开/driver/input/input.c 这就是input代码的核心 找到 static int __init input_init(void) { err = class_register(&input_class);注册一个类,注册后会在sys/class出现input目录. ...... err = register_chrdev(INPUT_MAJOR, "input", &input_fops);注册一个主设备号为13的input设备, } 打开inpu…
内核版本:3.9.5 SPI子系统概述: 一个SPI主控制器对应一条SPI总线,当然在系统中有唯一的总线编号. SPI总线上有两类设备: 其一是主控端,通常作为SOC系统的一个子模块出现,很多嵌入式MPU中都常常包含SPI模块; 其二是受控端,例如一些SPI接口的Flash,传感器等等; 主控端是SPI总线的控制者,通过使用SPI协议主动发起SPI总线上的会话.而受控端则被动接受SPI主控端的指令,并作出响应的响应. Linux目前只支持SPI主控端,不能支持SPI受控端设备. Linux中的S…
先贴代码: //input.c int input_register_handler(struct input_handler *handler) { //此处省略很多代码 list_for_each_entry(dev, &input_dev_list, node) input_attach_handler(dev, handler); //此处省略很多代码 ; } EXPORT_SYMBOL(input_register_handler); int input_register_device…
文章目录 前言 框架 如何实现`input device` 设备驱动? 头文件 注册input_dev设备 上报按键值 dev->open()和dev->close() 其他事件类型,处理输出事件 查看input device信息 附录 前言 这次主要会学习Linux中对于输入设备统一封装的框架,在计算机组成原理中,我们可以知道计算机的组成主要分为五个部分:控制器,运算器,存储器,输入,输出.可见,输入作为其中的一个子系统,但是对于众多的设备来说,需要一套统一的规范.所以,在嵌入式系统中的外设…
[1.input子系统框架(drivers\input)] 如何得出某个驱动所遵循的框架?    1) 通过网络搜索    2) 自己想办法跟内核代码!         2.1 定位此驱动是属于哪种类型的(触摸屏驱动为字符设备)         2.2 搜索register_chrdev得到,input.c         2.3 分析input.c文件 , "input", &input_fops);    static const struct file_operation…
转自:http://www.cnblogs.com/lcw/p/3802617.html [1.input子系统框架(drivers\input)] 如何得出某个驱动所遵循的框架?    1) 通过网络搜索    2) 自己想办法跟内核代码!         2.1 定位此驱动是属于哪种类型的(触摸屏驱动为字符设备)         2.2 搜索register_chrdev得到,input.c         2.3 分析input.c文件 /*入口函数*/ subsys_initcall(i…
转自:http://www.cnblogs.com/lcw/p/3294356.html input输入子系统整体流程 input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层. 在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从“/dev/input/*”接口如何使用输入子系统提供的服务. 既然需要详细分析,有一个这样的流程图能够帮助我们在被绕进代码的过程中,找到出口,你能够知道你…
初识linux输入子系统 linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler).输入子系统核心层(InputCore)和输入子系统设备驱动层. 设备驱动层:主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层. 核心层:为设备驱动层提供了规范和接口.设备驱动层只要关心如何驱动硬件并获得硬件数据(例如按下的按键数据),然后调用核心层提供的接口,核心层会自动把数据提交…
1      input输入子系统整体流程 本节分析input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层.由于上节代码讲解了设备驱动层的写法,因此在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从“/dev/input/*”接口如何使用输入子系统提供的服务. 既然需要详细分析,有一个这样的流程图能够帮助我们在被绕进代码的过程中,找到出口,你能够知道你现在位于代码框架的什么位置,不…
input 子系统也是作为内核的一个字符设备模块存在的,所以他也是字符设备自然也会有字符设备的文件接口.input子系统的注册过程主要分为两步,先注册了一个input class然后再注册一个字符设备 input. static int __init input_init(void) { int err; //子类注册 err = class_register(&input_class); if (err) { pr_err("unable to register input_dev c…
转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! input_report_key()向子系统报告事件 在 button_interrupt()中断函数中,不需要考虑重复按键的重复点击情况,input_report_key()函数会自动检查这个问题,并报告一次事件给输入子系统.该函数的代码如下: C++代码 static inline void in…
输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系统也支持自动创建设备文件,这些文件采用阻塞的IO读写方式,被创建在"/dev/input/"下.如下图所示.内核中的输入子系统自底向上分为设备驱动层,输入核心层,事件处理层.由于每种输入的设备上报的事件都各有不同,所以为了应用层能够很好识别上报的事件,内核中也为应用层封装了标准的接口来描述…
废话不多说,直接进入主题.在驱动insmod后,我们应用层对input设备如何操作?以下以全志a64为实例. 在/dev/input/eventX下(X的形成为后续会分析),是内核把接口暴露给应用层,一切操作都在这个文件上. input子系统有两大部分,分别是input_dev和input_handler组成. 这两个的关系与device和driver类似,不同的是device只能对应一个driver,driver可以对应多个devcie,而handler可以对应多个device,device同…
紧接着上一节的实例我们来分析调用的input子系统的接口: 1. input_dev,用来标识输入设备 1: struct input_dev { 2: const char *name; //设备名 3: const char *phys; // 设备在系统中路径 4: const char *uniq; 5: struct input_id id; //与input_handler匹配用的id 6:   7: unsigned long propbit[BITS_TO_LONGS(INPUT…
前面从具体(Linux 驱动框架---input子系统)的工作过程学习了Linux的input子系统相关的架构知识,但是前面的学习比较实际缺少总结,所以今天就来总结一下输入子系统的架构分层,站到远处来看输入子系统.总得来说输入子系统由设备驱动层(input_dev的注册),输入子系统核心层(input core),事件处理层(handler),和用户空间四部分.这一部分类别platform驱动框架的内容来学习. 设备驱动层(类似于platform_device)       就是前面描述的gpi…
版权声明:本文为博主原创文章,转载请标注出处:   在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架.自动创建设备节点.linux中断.poll机制.异步通知.同步互斥/非阻塞.定时器去抖动. 其中驱动框架如下: 1)写file_operations结构体的成员函数: .open()..read()..write() 2)在入口函数里通过register_chrdev()创建驱动名,生成主设备号,赋入file_operations结构体 3)在出口函数里通过unregister…
要想弄明白世界的本质,就要追根溯源:代码也是一样的道理: 最近调试几个sensor驱动,alps sensor驱动.compass sensor驱动.G-sensor驱动都是一样的架构: 一.基于input子系统的sensor架构: 由图上可知,input子系统上的sensor是由三个子系统构成: 1.input子系统(负责上报给设备节点数据): 2.I2C子系统负责sensor driver与sensor传感器进行通信: 3.xSensor driver则是对不同sensor做的特定的驱动(不…
转自:http://emb.hqyj.com/Column/Column289.htm 时间:2017-01-04作者:华清远见 Android.X windows.qt等众多应用对于linux系统中键盘.鼠标.触摸屏等输入设备的支持都通过.或越来越倾向于标准的input输入子系统. 因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大.但如果你想更灵活的应用它,就需要好好的分析下input子系统了. 一.input输入子系统框架…
为什么要引入输入子系统? 在前面我们写了一些简单的字符设备的驱动程序,我们是怎么样打开一个设备并操作的呢? 一般都是在执行应用程序时,open一个特定的设备文件,如:/dev/buttons ..... int main(int argc, char **argv) { unsigned char key_val; int ret; fd = open("/dev/buttons", O_RDWR); //默认为阻塞操作 ) { printf("can't open!\n&q…
input子系统驱动 框架分析 核心层 文件为:/drivers/input/input.c: 首先找到入口函数为**static int __init input_init(void)**,在该函数中主要做了如下几件事: 创建了一个input_class类: 初始化/proc/input路径下的文件: 使用register_chrdev()注册了一个名为input_fops的file_operations结构体变量,且主设备号为13(INPUT_MAJOR): 通过注册的file_operat…
一.初识linux输入子系统 linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler).输入子系统核心层(InputCore)和输入子系统设备驱动层. 对于输入子系统设备驱动层而言,主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层.即将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报. 对于核心层而言,为设备驱动层提供了规范和接口.设备驱动…
将A/B协议这部分单独拿出来说一方面是因为这部分内容是比较容易忽视的,周围大多数用到input子系统的开发人员也不甚理解:另一方面是由于这部分知识一旦扩展到TP(触摸屏Touch Panel)的多点触摸就要与Middleware/Framework一起结合起来看才能完全掌握,复杂性所在.这里的Middleware/Framework是针对android来说的,本人从事android这几个层次的工作,所以就从android的角度来讲讲这部分内容,其他系统虽然代码不同,但原理上是完全一样的.    …
转自:http://blog.chinaunix.net/uid-25047042-id-4192368.html 上一篇中粗略的分析了下input_dev,input_handle,input_handler这三者之间的关系,而在实际系统当中input子系统是如何工作的呢,当然我们知道,故事肯定是围绕着它们三个发生,下面我们来看看具体的input设备的工作流程.同样以触摸屏为例. 在触摸屏驱动中,当有触摸事件产生(手接触到触摸屏的时候),触摸屏相关IC会产生中断,在中断处理函数当中,kerne…