Linux/Android——输入子系统input_event传递 (二)
来源:互联网 发布:sql 单个join on用法 编辑:程序博客网 时间:2024/06/12 21:14
版权声明:免责声明: 本人在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系 .挖井挑水无水表,不会网购无快递
目录(?)[-]
- input_dev
- input_event
- input_handle_event
在前文 Linux/Android——usb触摸屏驱动 - usbtouchscreen (一) 中记录了如何在kernel中添加input device 类型为touchscreen的驱动,
这在整个输入体系中是最下层的设备驱动部分,往上一层就是Linux内核的管理驱动input系统,kernel中的源码位置:/kernel/drivers/input/input.c
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/42099381
到目前已经完全调通,可以正常使用了,现在记录一下这段时间接触到的Android 输入input 系统,先看一张网上的层次图,蛮不错的:
上一篇博客里面的 usbtouchscreen 就是对应上图的I2c module的位置,而在kernel中input的核心就是input.c .
input_dev:
这个结构体表述的是一个输入设备的相关信息,在usbtouchscreen 驱动中的 usbtouch_probe 会初始化input_dev,作为usbtouch设备的一部分.
会对 input_dev 做一系列的初始化,设置参数之类的,具体可参考之前博客
input_dev 结构原型如下,/kernel/include/linux/input.h中定义:
我解释可能还会误导,源码上面的注释是最好的解释,都是描述一个input 设备的相关信息.
每一个input设备,都需要初始化一个这样的input_dev结构来描述记录此设备的一些特性,然后通过input_register_device 注册到设备总线上以供后续使用
可以到系统运行目录的/proc/bus/input下 cat devices 查看总线上的已经注册上的input device
input_event:
设备驱动部分往上传递的就是触发的event事件了,还以usbtouchscreen的为例,回调函数为:
可以看到通过 input_report_* 上报事件到input.c中,这也就是上面层次图中的箭头 9 ,初始在/kernel/include/linux/input.h:
可以看到不同的report 都调用进了input_event,只是传参不同,接下来的事就全交由input.c 来做了!
可以看到在这里首先就是过滤了事件类型,这个也是在usbtouchscreen中的probe中初始化过的!
类型有如下几种:
input_handle_event:
由上面的input_event 调入进这个handle处理。这里会根据type进行分类处理:
这里先记录整个输入系统从设备驱动到上层的关系,以及从kernel中的驱动调用到input系统中的传递过程,虽然看到调用了input.c中的一些函数传递,但是对input核心还是没多少概念,
下篇解析记录一下input这个核心模块~
- Linux/Android——输入子系统input_event传递 (二)
- Linux/Android——输入子系统input_event传递 (二)
- Linux/Android——输入子系统input_event传递 (二)
- Linux/Android——输入子系统input_event传递 (二)
- linux驱动由浅入深系列:输入子系统之三(应用层模拟input_event)
- linux输入子系统——代码编写(二)
- Linux输入子系统分析二
- Linux 标准输入struct input_event使用示例
- LINUX设备驱动——输入子系统
- linux设备驱动——输入子系统
- LINUX设备驱动之输入子系统(二)
- LINUX设备驱动之输入子系统(二)
- LINUX设备驱动之输入子系统(二)
- [input] Linux 输入子系统(二)
- Linux输入子系统分析(二)
- Linux输入子系统分析(二)
- Linux 输入子系统 input 子系统
- 输入子系统二
- matlab基础(2):进阶
- Android Studio Kotlin环境搭建
- cocos2djs开发之旅书籍笔记
- SSH整合项目(新闻发布)
- 关于百度地图找不到jin文件的问题及解决办法
- Linux/Android——输入子系统input_event传递 (二)
- java编程积累
- 机器学习(周志华)_第十一章 特征选择与稀疏学习
- 2627 村村通 (最小生成树)
- 解决g++编译添加参数"支持C++11标准"的问题
- 使用 RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备用数据库(文档 ID 1526160.1)
- [USACO] Section1.1 Greedy Gift Givers[线性时间查找]
- 404页面是什么?怎么做404页面
- 编程练习(第十四周)