Input输入子系统分析.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Input输入子系统分析

HYPERLINK /uidid-3758334.html input子系统分析 Jason 一、概述 在linux下,按键、触摸屏、鼠标等都可以利用input接口函数来实现设备驱动。 1,linux输入子系统主要分三层: 驱动,输入CORE, 事件处理层。 驱动根据CORE提供的接口,向上报告发生的按键动作。然后CORE根据驱动的类型,分派这个报告给对应的事件处理层进行处事。 事件处理层把数据变化反应到设备模型的文件中(事件缓冲区)。并通知在这些设备模型文件上等待的进程。 2,输入子系统在KERNEL初始化时被初始化。会创建所有类型输入输出设备的逻辑设备(及sysfs结点)。当硬件注册时,就会调用所有类型的input handler的connect函数,根据硬件注册的结构来判断是否与自己相关,然后再创建一个具体的设备结点。 3,驱动只负责的把输入设备注册到输入子系统中,然后输入子系统来创建对应的具体设备结点。而事件处理层,在初始化时,需要注册所一类设备的输入事件处理函数及相关接口 4,一类input handler可以和多个硬件设备相关联,创建多个设备节点。而一个设备也可能与多个input handler相关联,创建多个设备节点。 二、输入设备结构体 1.input_dev 这是input设备基本的设备结构,每个input驱动程序中都必须分配初始化这样一个结构,成员比较多? 代码路径 kernel/include/linux/input.h struct?input_dev?{?? ????const?char?*name;???????//设备名?? ????const?char?*phys;???????//设备系统层的物理路径?? ????const?char?*uniq;???????//?? ????struct?input_id?id;?//输入设备id?总线类型;厂商编号,产品id,产品版本?? ?? ????unsigned?long?evbit[BITS_TO_LONGS(EV_CNT)];?//事件类型标志位?? ????unsigned?long?keybit[BITS_TO_LONGS(KEY_CNT)];???//键盘事件标志位?? ????unsigned?long?relbit[BITS_TO_LONGS(REL_CNT)];???//相对位移事件标志位?? ????unsigned?long?absbit[BITS_TO_LONGS(ABS_CNT)];???//绝对位移事件标志位?? ????unsigned?long?mscbit[BITS_TO_LONGS(MSC_CNT)];???//杂项事件标志位?? ????unsigned?long?ledbit[BITS_TO_LONGS(LED_CNT)];???//led指示灯标志位?? ????unsigned?long?sndbit[BITS_TO_LONGS(SND_CNT)];???//声音事件?? ????unsigned?long?ffbit[BITS_TO_LONGS(FF_CNT)];?//强制反馈事件?? ????unsigned?long?swbit[BITS_TO_LONGS(SW_CNT)];?//开关事件标志位?? ?? ????unsigned?int?hint_events_per_packet;?? ????unsigned?int?keycodemax;????????//键盘码表大小?? ????unsigned?int?keycodesize;???????//键盘码大小?? ????void?*keycode;??????????//键盘码表指针?? ?? ????int?(*setkeycode)(struct?input_dev?*dev,unsigned?int?scancode,?unsigned?int?keycode);???//设置键盘码?? ????int?(*getkeycode)(struct?input_dev?*dev,unsigned?int?scancode,?unsigned?int?*keycode);??//获取键盘码?? ????int?(*setkeycode_new)(struct?input_dev?*dev,const?struct?input_keymap_entry?*ke,unsigned?int?*old_keycode);??? ????int?(*getkeycode_new)(struct?input_dev?*dev,struct?input_keymap_entry?*ke);?? ?? ????struct?ff

文档评论(0)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档