linux input输入子系统分析《一》:初识input输入子系统_比特人生的专栏-CSDN博客_linux 输入子系统

linux input输入子系统分析《四》:input子系统整体流程全面分析_比特人生的专栏-CSDN博客

12.Linux之输入子系统分析(详解) - 诺谦 - 博客园

大神们的帖子已经把输入子系统的原理过程细节讲得很清楚,俺用自己理解捋一下过程加深印象,具体的代码就请看大神们的帖子。

一)一个字符设备驱动,需要经历1.构造file_operations结构体,2.使用注册函数注册字符设备,3.对结构体中断open、read、write等函数指针进行填充,编写具体的硬件细节4.在字符设备下创建字符设备节点。输入子系统也是需要进行这些基本的步骤,只不过为了普适性,把上述步骤进行拆分,再通过一系列的操作重现。

二)子系统把共性的部分提取出来,做成input_hanlder驱动处理,这部分只是单纯的软件处理,提供接口给驱动设备,处理驱动设备传过来的数据,不涉及硬件操作。

三)差异的部分做成做成不同的驱动设备input_dev,这部分仅对不同的设备进行硬件操作,获取数据,通过handler提供的接口传送数据,不涉及数据的处理问题。

四)把配对的hanlder和dev联系起来,就完成了一个完成的字符设备驱动的编写。输入子系统通过input.c内的核心部分进行连接。核心里会调用

err = register_chrdev(INPUT_MAJOR, "input", &input_fops); //注册驱动

注册一个名为“input”的字符设备,主设备号INPUT_MAJOR=13,注册了设别就会有file_operations,但此时file_operations内除了open,没有任何东西.

这个open不是用来打开设备的,仅仅是一个中介,它查询是否存在匹配的新挂载的设备子设备号和驱动列表中对应的驱动,如果存在则把中介的file_operatons替换成在驱动列表中找到的驱动的file_operations,该file_operations就是实际驱动使用的file_operations结构体。通过这个新的file_operations,就可以操作设备

五)新挂载的设备子设备号和驱动列表的内容是怎么给核心input.c?如何知道他们的匹配情况?

驱动列表的内容通过input_register_handler ()函数放入,将驱动处理程序input_handler注册到input_table[]中,然后放在input_handler_list链表中。于是驱动列表的值存在了。

新挂载的设备子设备号通过input_register_device()函数获取,将要注册的input_dev驱动设备放在input_dev_list链表中。于是设备的子设备号存在了。

在input_register_device() 中,会查一遍input_handler_list里面的值,逐个提出来,调用input_attach_handler()函数把驱动表中驱动的值跟设备的子设备号匹配,如果配对成功,则进行连接。

同理input_register_handler ()也会进行同样的操作,查一遍input_dev_list链表中设备的子设别号,逐个提出来,调用input_attach_handler()函数把设备的子设备号和驱动表中驱动的值匹配,如果配对成功,则进行连接。

六)匹配的过程

input_attach_handler()函数对设备的子设备号和驱动表中驱动的值配对,配对成功,调用connect函数,connect函数中会调用 input_register_handle()函数,根据handler和device传入的类容在“input”字符设备下面创建字符设备节点

自此,一个字符设备驱动的所有要素都齐全。

七)程序员要做什么?程序员需要把具体的驱动设备给写出来并注册进内核,让内核拿去跟驱动列表进行配对。仅列出步骤,具体函数以及参数百度就好。

第一步:分配一个input_dev结构体

第二步:设置结构体能做哪类事件,以及这些事件下的什么操作

第三步: 把分配的结构体注册进内核。内核会自行配对

第四步:硬件相关,如初始化、硬件操作获取数据

第五步:上报事件,把获取的数据传上去。具体的操作处理输入子系统会自己做。上报完事件后记得添加input_sync()函数进行同步,否则内核不知道是否上报完毕。

退出时不要忘记在出口把所有注册的资源删掉。

31.驱动--输入子系统相关推荐

  1. Linux的input输入子系统:设备驱动之按键驱动

    环境:kernel-2.6.30.4,arm-linux-gcc-4.3.3,目标板TQ2440 一.设备层驱动程序: #include <linux/module.h> #include ...

  2. Linux下输入子系统上报触摸屏坐标

    Linux下输入子系统上报触摸屏坐标 1.输入子系统简介   在 Linux 中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event Han ...

  3. 31 Linux input子系统按键驱动--4IO驱动16按键

    31.1 前言 按键是设备中是最常见的人机交互方式,本节中将学习两部分. (1)如何4个GPIO 16个按键的实现: (2)Linux input按键驱动开发实例编程: 31.2 4个IO驱动16按键 ...

  4. [arm 驱动]Linux输入子系统分析

    首先说明一下,本文是基于Linux-2.6.38版本内核来分析Linux输入子系统架构和原理的.这阵子本来没有打算花时间来分析Linux input system的,然而当在研究S3C6410触摸屏驱 ...

  5. linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例

    1.1    本节阅读前提 本节的说明建立在前两节的基础之上,需要先阅读如下两篇章: linux input输入子系统分析<一>:初识input输入子系统 linux input输入子系统 ...

  6. linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析

    1      mini2440的ADC驱动实例 这节与输入子系统无关,出现在这里是因为后面的章节会讲到触摸屏输入子系统驱动,由于触摸屏也使用ADC,因此本节是为了说明ADC通过驱动代码是如何控制的. ...

  7. 输入子系统--按键驱动

    输入子系统 一.输入子系统 二.设备申请与成员赋值 1.申请设备空间 2.设备结构体赋值 3.设置设备事件 4.gpio与gpio中断 三.注册设备 四.注销设备 五.按键驱动实现 一.输入子系统 l ...

  8. 《Linux 驱动:输入子系统》

    前言 输入子系统作为一个模块存在,向上,为用户层提供调用接口:向下,为驱动层程序提供统一的注册接口.这样,就能够使输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通 ...

  9. Linux驱动:input输入子系统

    input输入子系统 1.input输入子系统 1.1 简介 1.2 相关API函数 1.3 使用流程(驱动框架) 2.驱动示例 3.测试程序 4.测试结果 5.内核自带的input按键驱动 附:对应 ...

最新文章

  1. 昨天下午面了个哥们,也就问了4个问题,但好像他被我虐了
  2. 安装Properties Editor插件,解决XXX.properties文件中文乱码的问题
  3. 思维导图 - 测试技术扩展:Postman接口测试、Sonar白盒测试、Sonic移动测试、Python操作FTP服务器
  4. 【综述】深度长尾学习
  5. jQuery拼接页面元素
  6. 惠普暗影精灵3清灰_如何评价惠普笔记本这几年的表现?尤其是暗影精灵系列。...
  7. BGP Ethernet Virtual Private Network技术原理
  8. 20170810上课笔记
  9. 利用色彩范围和钢笔工具抠图
  10. 逍遥魔兽手动打开mysql_逍遥魔兽gm命令使用
  11. stony大学计算机科学找工作,美国STEM专业毕业生薪资最高的院校有哪些?
  12. Heka nginx input
  13. 枚举.........
  14. “穿搭速递”首页制作
  15. Spark 基础知识
  16. 还在纠结交易系统的细节吗?看这篇文章就够了!
  17. Interval (mathematics)
  18. 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
  19. python 类的使用(2) 之类变量
  20. 网络营销---五大优势成就就业

热门文章

  1. java 验证码图片不显示图片_验证码图片不显示,代码如下,求大神解答谢谢
  2. matlab对图像进行线性点运算,图像线性点运算---MATLAB
  3. 有心贪得无厌,无心万念俱灰
  4. java开发,IDE,eclipse字体大小设置
  5. 苹果欲收购东芝闪存 自己把控闪存技术
  6. from PIL import Image出现报错解决方法
  7. Python笔试题: 足球双循环赛制积分计算方法
  8. Python 命令行进度条
  9. 如何看文献(个人经验)
  10. bzoj1728[Usaco2006 Open]Two-Headed Cows 双头牛 二分+染色