输入设备的主要工作过程

动作产生(按键、触屏 ....)—— 产生中断 —— 读取数据(键值、坐标 ....)—— 将数据传递给应用程序。

事件的处理

input device 向上报告——input core接收报告,并根据在注册input device时建立好的连接选择哪一类handler来处理事件——通过handler将数据存放在相应dev(evdev、mousedev ...)实例的缓冲区中,等待应用程序来读取。

注册与连接

注册 input_dev 和 input_handler时,会两两比较 input_handler_list中的每一项input_handler和input_dev_list中的每一项input_dev。input_handler 中的blacklist和id_table判断这个设备是否支持这个handler,如果支持则调用input_handler的函数建立连接。

由事件层(Evdev.c、keyboard.c、Joydev.c、Mousedev.c ...)定义一个input_handler结构,指定 .fops、.connect、id_table 等,通过input_register_handler进行注册。

input_handler和input_dev怎么进行连接?

  1. 分配一个input_handle结构;
  2. input_handle.dev = input_dev;
    input_handle.handler = input_handler;
  3. input_dev.h_list = input_handle.d_node;
    input_handler.hlist = input_handle.h_node;

在设备相关的中断服务程序里面,确定事件产生,则调用相应的input_handler的event处理函数

Linux 输入设备驱动编程

编写符合输入子系统框架的设备驱动程序主要有以下四个步骤:

  1. 分配一个input_dev结构体,调用input_allocate_device()或者devm_input_allocate_device(struct input_dev*)实现;
  2. 设置input设备支持的事件类型;
  3. 将输入设备注册到输入子系统中,调用input_register_device(struct input_dev *)函数实现;
  4. 硬件相关的代码:注册中断处理函数,比如键盘设备需要编写按键的抬起、放下,触摸屏设备需要编写按下、抬起、绝对移动,鼠标设备需要编写单击、抬起、相对移动,并且需要在必要的时候提交硬件数据(键值/坐标/状态 等等),即上报输入事件。

上报事件的函数为input_event;当提交输入设备产生的输入事件之后,需要调用input_sync函数来通知输入子系统,以处理设备产生的完整事件。

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

[Linux 基础] -- Linux input 子系统要点总结相关推荐

  1. Linux驱动之Input子系统要点分析

    ① Input_device与Input_handler的匹配过程 当Input_device与Input_handler->id中的位图信息全部一致,则匹配成功,然后调用Input_handl ...

  2. linux input子系统 pdf,Linux下的Input子系统.pdf

    计 算 机 系 统 应 用 ||ww.c·S-a.org.cn 2013年 第 22卷 第 l2期 Linux下的Input子系统① 朱银瑞,吴庆洪,吴华玲 (辽宁科技大学 电子与信息工程学院,鞍山) ...

  3. linux input子系统 pdf,Linux下的Input子系统①.PDF

    Linux下的Input子系统①.PDF 计 算 机 系 统 应 用 2013 年 第 22 卷 第 12 期 Linux 下的Input 子系统① 朱银瑞, 吴庆洪, 吴华玲 (辽宁科技大学 电子与 ...

  4. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

    20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...

  5. linux基础——linux进程间通信(IPC)机制总结

    原 linux基础--linux进程间通信(IPC)机制总结 2016年07月23日 21:33:12 yexz 阅读数:18224更多 <div class="tags-box sp ...

  6. 视频教程-赵强老师:大数据从入门到精通(1)Linux基础-Linux

    赵强老师:大数据从入门到精通(1)Linux基础 毕业于清华大学,拥有超过13年的工作经验. Oracle认证讲师,拥有6年以上授课经验.精通Oracle数据库.中间(Weblogic)和大数据Had ...

  7. linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现

    1.概述 Gpio-keys 是基于input子系统实现的一个通用按键驱动,该驱动也符合linux驱动实现模型,即driver和device分离模型.一般按键驱动,都是基于gpio-keys进行开发的 ...

  8. 【Linux驱动】input子系统与按键驱动

    input子系统架构总览 在网上能找到一些关于input子系统架构相关的示意图,大体表达的意思都差不多. linux输入子系统(linux input subsystem)从上到下由三层实现,分别为: ...

  9. linux常用删除空文件夹,Linux基础 linux系统中的批量删除文件与空文件删除的命令介绍...

    Linux基础教程linux系统中的批量删除文件与空文件删除的命令介绍 Linux资料下面删除文件或者目录命令rm(remove): Linux培训功能说明:删除文件或目录. 语 法:rm [-dfi ...

最新文章

  1. 全国所有省市县地理坐标Json格式
  2. 专访陈天桥:把钱投给甘坐冷板凳的AI研究员
  3. C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究
  4. Ubuntu中设置静态IP和DNS
  5. “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  6. Java中如何解决double和float精度不准的问题
  7. 学习笔记二:异步FIFO
  8. SpringBoot_Redis配置
  9. 传统东方韵味尽显|国潮国风包装样机
  10. Selenium自动化测试系列文章汇总
  11. java 单例基类_PHP基于单例模式实现的数据库操作基类
  12. 【 Gym - 101138K 】 The World of Trains (DP)
  13. centos7 cuda测试_CentOS 7 安装cuda环境
  14. Beginning Python chapter 2 Lists and Tuples:1 Indexing and slicing
  15. ARM开发6.3.4 基础实训( 4 ) 两个 LED 显示二位数(动态显示)--LPC21XX
  16. 回首2021,展望2022 | 观成科技步履不停,刻画安全图腾
  17. 高德定位,只能定位一次,导航图标就消失
  18. 给大家推荐一款超低功耗的4G低功耗摄像头方案强大的AI功能
  19. python中outside loop_未知环境下的Lidar概率占位栅格图(Occupancy Grid Map) Python代码实现...
  20. VSCode更改主题背景

热门文章

  1. Notepad++和Vivado中文乱码问题
  2. http系列之-核心内容
  3. 测试2k显示器的软件,玩家亲自测试为什么需要2K显示器
  4. 算子法二阶线性非齐次微分方程的通解
  5. 累加器实验总结计算机组成,计算机组成原理累加器实验报告
  6. [本校测试] 魔王的消失Day2——By Hineven T3葬诗 提交答案题(爬山算法)
  7. 第一篇 厚黑学 二、厚黑学
  8. 客观分析电子合同是如何提升效率的?
  9. UML建模工具-火龙果软件
  10. 3.4 Softmax回归【李沐动手学深度学习】