[Linux 基础] -- Linux input 子系统要点总结
输入设备的主要工作过程
动作产生(按键、触屏 ....)—— 产生中断 —— 读取数据(键值、坐标 ....)—— 将数据传递给应用程序。
事件的处理
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怎么进行连接?
- 分配一个input_handle结构;
- input_handle.dev = input_dev;
input_handle.handler = input_handler; - input_dev.h_list = input_handle.d_node;
input_handler.hlist = input_handle.h_node;
在设备相关的中断服务程序里面,确定事件产生,则调用相应的input_handler的event处理函数
Linux 输入设备驱动编程
编写符合输入子系统框架的设备驱动程序主要有以下四个步骤:
- 分配一个input_dev结构体,调用input_allocate_device()或者devm_input_allocate_device(struct input_dev*)实现;
- 设置input设备支持的事件类型;
- 将输入设备注册到输入子系统中,调用input_register_device(struct input_dev *)函数实现;
- 硬件相关的代码:注册中断处理函数,比如键盘设备需要编写按键的抬起、放下,触摸屏设备需要编写按下、抬起、绝对移动,鼠标设备需要编写单击、抬起、相对移动,并且需要在必要的时候提交硬件数据(键值/坐标/状态 等等),即上报输入事件。
上报事件的函数为input_event;当提交输入设备产生的输入事件之后,需要调用input_sync函数来通知输入子系统,以处理设备产生的完整事件。
/dev/input目录下显示的是已经注册在内核中的设备编程接口,用户通过open这些设备文件来打开不同的输入设备进行硬件操作。
[Linux 基础] -- Linux input 子系统要点总结相关推荐
- Linux驱动之Input子系统要点分析
① Input_device与Input_handler的匹配过程 当Input_device与Input_handler->id中的位图信息全部一致,则匹配成功,然后调用Input_handl ...
- linux input子系统 pdf,Linux下的Input子系统.pdf
计 算 机 系 统 应 用 ||ww.c·S-a.org.cn 2013年 第 22卷 第 l2期 Linux下的Input子系统① 朱银瑞,吴庆洪,吴华玲 (辽宁科技大学 电子与信息工程学院,鞍山) ...
- linux input子系统 pdf,Linux下的Input子系统①.PDF
Linux下的Input子系统①.PDF 计 算 机 系 统 应 用 2013 年 第 22 卷 第 12 期 Linux 下的Input 子系统① 朱银瑞, 吴庆洪, 吴华玲 (辽宁科技大学 电子与 ...
- 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...
- linux基础——linux进程间通信(IPC)机制总结
原 linux基础--linux进程间通信(IPC)机制总结 2016年07月23日 21:33:12 yexz 阅读数:18224更多 <div class="tags-box sp ...
- 视频教程-赵强老师:大数据从入门到精通(1)Linux基础-Linux
赵强老师:大数据从入门到精通(1)Linux基础 毕业于清华大学,拥有超过13年的工作经验. Oracle认证讲师,拥有6年以上授课经验.精通Oracle数据库.中间(Weblogic)和大数据Had ...
- linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现
1.概述 Gpio-keys 是基于input子系统实现的一个通用按键驱动,该驱动也符合linux驱动实现模型,即driver和device分离模型.一般按键驱动,都是基于gpio-keys进行开发的 ...
- 【Linux驱动】input子系统与按键驱动
input子系统架构总览 在网上能找到一些关于input子系统架构相关的示意图,大体表达的意思都差不多. linux输入子系统(linux input subsystem)从上到下由三层实现,分别为: ...
- linux常用删除空文件夹,Linux基础 linux系统中的批量删除文件与空文件删除的命令介绍...
Linux基础教程linux系统中的批量删除文件与空文件删除的命令介绍 Linux资料下面删除文件或者目录命令rm(remove): Linux培训功能说明:删除文件或目录. 语 法:rm [-dfi ...
最新文章
- 全国所有省市县地理坐标Json格式
- 专访陈天桥:把钱投给甘坐冷板凳的AI研究员
- C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究
- Ubuntu中设置静态IP和DNS
- “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- Java中如何解决double和float精度不准的问题
- 学习笔记二:异步FIFO
- SpringBoot_Redis配置
- 传统东方韵味尽显|国潮国风包装样机
- Selenium自动化测试系列文章汇总
- java 单例基类_PHP基于单例模式实现的数据库操作基类
- 【 Gym - 101138K 】 The World of Trains (DP)
- centos7 cuda测试_CentOS 7 安装cuda环境
- Beginning Python chapter 2 Lists and Tuples:1 Indexing and slicing
- ARM开发6.3.4 基础实训( 4 ) 两个 LED 显示二位数(动态显示)--LPC21XX
- 回首2021,展望2022 | 观成科技步履不停,刻画安全图腾
- 高德定位,只能定位一次,导航图标就消失
- 给大家推荐一款超低功耗的4G低功耗摄像头方案强大的AI功能
- python中outside loop_未知环境下的Lidar概率占位栅格图(Occupancy Grid Map) Python代码实现...
- VSCode更改主题背景