Input输入子系统合编.docx

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

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档