博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
input 子系统(二) 杂谈
阅读量:4285 次
发布时间:2019-05-27

本文共 2919 字,大约阅读时间需要 9 分钟。

很多纯输入设备都是用的 input 子系统input 子系统 是 驱动里面一个非常重要的概念
  • input 子系统的基础
该系统 基于 class (class 基于 bbd 总线设备驱动模型)    bbd 利用了 sysfs kobject_uevent 等等        利用了 mdev udev该系统利用了 cdev 字符设备驱动模型该系统 利用了 内核链表该系统利用了 proc该系统利用了 环形队列数据结构
  • input 子系统的 匹配 和 bdd 中的匹配 区别
input 的匹配是 device 和 handler 的匹配    这里的device 和 handler 都是驱动的一部分    device 就是所说的 input 驱动    handler 就是 input core 之上的handler ,其提供cdev (cdev 提供 file_operations)bdd 中的匹配 是 device 和 driver 的匹配    这里的device 是 dts 中的信息    这里的 driver 是驱动的一部分,就是所说的 input 驱动
  • input 相关的目录
/proc/bus/input/input_init->input_proc_init 中创建的input.c:1269:   entry = proc_create("devices", 0, proc_bus_input_dir,input.c:1274:   entry = proc_create("handlers", 0, proc_bus_input_dir,/sys/class/input/     input_register_device 中的 device_add 中创建的    /dev/input/    handler->connect 中的 device_add 中        mdev 或者 udev 通过 kobject_uevent 创建的
  • input 子系统模块代码划分
input 子系统代码完全在kernel 源代码中.input 子系统完全运行在内核空间用户空间               /dev/input/eventX----------------内核空间                              层1   handler          // 通过 input_register_handler 注册的 handler                层2   core              // 提供 input_register_handler                层3   device            // 通过 input_register_device 注册的 device                 层1 代码 所在位置 drivers/input/evdev.c  drivers/input/joydev.c  drivers/input/mousedev.c    其实层1 所在代码可以在kernel 中搜索 input_register_handler 来获得    这些文件都调用了 input_register_handler层2 代码 所在位置 drivers/input/input.c     其实还有 ff-core.c  input-compat.c    input-mt.c层3 代码所在位置  drivers/input/gameport drivers/input/keyboard    每个文件夹表示一类设备的input驱动的集合, 每个文件都调用了 input_register_device
  • 功能划分
core     提供 device 和 handler 的注册 匹配 ,提供 device  到 handler 的数据传输    在传输过程中可以 过滤 事件 ,分发 事件 , 阻断事件.    device    调用 input_register_device 注册设备    并在合适的时候上报事件的源头,上报到 corehandler    调用 input_register_handler 注册 handler    handler 用来处理 bdd 中 的设备的注册, cdev(用来提供file_operations) 的注册
  • input 驱动 中的 module_xxx_driver 中调用的 driver_register 和 input_register_device 中的 device_add 和 handler->connect 中调用的 device_add 区别是什么
driver_register    是为了和 dts 中的 device 匹配    创建一个 /sys/.../ device----------------------- 下面是 input 系统比 一般 bdd  特有的  input_register_device 中的 device_add    是为了 创建 /sys/class/input/ handler->connect 中的 device_add     是为了让系统帮助 添加一个 event 设备        在 /dev/input/ 下面添加一个设备        /sys 下没变化
  • 有原生的 应用程序可以对 input 事件监听吗

hexdump /dev/input/event0getevent /dev/input/event0
  • 上报事件 上报的是什么???
上报的是事件事件就是 type code valuesync 也是一个事件,只不过这个事件,是为了让 input core 去 发送到 handler,让handler 去唤醒 应用程序定义在 include/uapi/linux/input.h174 ... 191 event type193 ... end event code一个设备可以选择一个或多个事件类型上报给输入子系统。事件类型 如下EV_SYN     0x00    同步事件EV_KEY     0x01    按键事件EV_REL     0x02    相对坐标(如:鼠标移动,报告相对最后一次位置的偏移)EV_ABS     0x03    绝对坐标(如:触摸屏或操作杆,报告绝对的坐标位置)EV_MSC     0x04    其它EV_SW      0x05    开关EV_LED     0x11    按键/设备灯EV_SND     0x12    声音/警报EV_REP     0x14    重复EV_FF      0x15    力反馈EV_PWR     0x16    电源EV_FF_STATUS    0x17   力反馈状态EV_MAX     0x1f    事件类型最大个数和提供位掩码支持

转载地址:http://qxigi.baihongyu.com/

你可能感兴趣的文章
XAMPP:访问phpmyadmin出错的解决方案
查看>>
怎么用PHP在HTML中生成PDF文件
查看>>
PHP中我经常容易混淆的三组函数
查看>>
Ubuntu下安装XAMPP
查看>>
Blogilo:Ubuntu下“wlw”
查看>>
CSS 3动画介绍
查看>>
利用HTML 5中的Menu和Menuitem元素快速创建菜单
查看>>
PHP:6种GET和POST请求发送方法
查看>>
CSS 3的display:盒类型详解
查看>>
CSS:7个你可能不认识的单位
查看>>
HTML 5:你必须知道的data属性
查看>>
HTML 5:绘制旋转的太极图
查看>>
mysql_connect v/s mysql_pconnect
查看>>
DOM笔记(一):HTMLDocument接口
查看>>
DOM笔记(二):Node接口
查看>>
DOM笔记(三):Element接口和HTMLElement接口
查看>>
DOM笔记(四):HTML 5 DOM复杂数据类型
查看>>
DOM笔记(五):JavaScript的常见事件和Ajax小结
查看>>
DOM笔记(六):怎么进行JQuery扩展?
查看>>
DOM笔记(七):开发JQuery插件
查看>>