Linux输入子系统:input.txt

Linux内核之input子系统详解 Android、X windows、qt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。 因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系统了。 立即下载

                              Linux Input drivers v1.0

                (c) 1999-2001 Vojtech Pavlik<vojtech@ucw.cz>

                                 Sponsored by SuSE

----------------------------------------------------------------------------

 0.版权说明

~~~~~~~~~~~~~

 This program is free software; you can redistribute it and/or modify it

under the terms of the GNU General PublicLicense as published by the Free

Software Foundation; either version 2 ofthe License, or (at your option)

any later version.

  This program is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even theimplied warranty of MERCHANTABILITY

or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for

more details.

   Youshould have received a copy of the GNU General Public License along

with this program; if not, write to theFree Software Foundation, Inc., 59

Temple Place, Suite 330, Boston, MA02111-1307 USA

  Should you need to contact me, the author, you can do so either bye-mail

- mail your message to<vojtech@ucw.cz>, or by paper mail: Vojtech Pavlik,

Simunkova 1594, Prague 8, 182 00 CzechRepublic

   Foryour convenience, the GNU General Public License version 2 is included

in the package: See the file COPYING.

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

本文由DroidPhone 翻译:http://blog.youkuaiyun.com/droidphone

Kernel版本:V3.4.10

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 简介

~~~~~~~~~~~~~~~

这时一组驱动的集合,它们可以用于所有的基于linux的输入设备,虽然目前它只是用于USB输入设备,将来(2.5、2.6版本)它们将会被扩展并替换掉现存的多数输入系统,这就是为什么它们被放在drivers/input/目录下,而不是drivers/usb/。

 输入设备驱动的核心是input模块,它需要在其他输入模块之前被加载--它是输入系统其它两个模块之间通讯的桥梁:

1.1 设备驱动(Device drivers)

~~~~~~~~~~~~~~~~~~

  这些模块负责和实际的硬件打交道(例如通过USB),给input模块提供相应的事件(按键,鼠标移动)

1.2 事件处理模块(Event handlers)

~~~~~~~~~~~~~~~~~~

这些模块从input模块获得事件信息,并根据需要通过不同的接口传递这些事件--往kernel传递按键事件,或者通过模拟的PS/2接口给GPM和X传递鼠标移动事件,等等。

 2. 一个简单的例子

~~~~~~~~~~~~~~~

通常,对于大多数配置来说,系统有一个USB鼠标和一个USB键盘,你需要加载以下几个模块(或者把它们编译到内核中):

 

         input

         mousedev

         keybdev

         usbcore

         uhci_hcdor ohci_hcd or ehci_hcd

         usbhid

 

在这之后,USB键盘直接就可以工作了,USB鼠标会作为一个字符设备,主次设备号分别为13和63:

         crw-r--r--   1 root    root      13,  63 Mar 28 22:45 mice

 你需要主动创建该鼠标设备节点,创建的命令如下:

         cd/dev

         mkdirinput

         mknodinput/mice c 13 63

 之后,你必须告诉GPM和XFree你要使用这个鼠标设备 - 对于GPM,应该象以下的指令:

         gpm-t ps2 -m /dev/input/mice

   对于X:

          Section"Pointer"

             Protocol   "ImPS/2"

             Device     "/dev/input/mice"

             ZAxisMapping 4 5

         EndSection

     做完以上步骤以后,你就可以正常地使用USB鼠标和键盘了。

 3. 详细描述

~~~~~~~~~~~~~~~~~~~~~~~

3.1 设备驱动(Device drivers)

~~~~~~~~~~~~~~~~~~

设备驱动模块产生输入事件,这些事件在没有经过处理之前是没有什么用处的,所以你需要用到3.2节的某些模块。

 3.1.1 usbhid

~~~~~~~~~~~~

 usbhid可以说是最庞大和复杂的驱动了。它处理所有的HID设备,他之所以这么复杂和庞大,原因是设备类型种类繁多,USB HID的规格也相当不简单。

   目前,它处理USB鼠标,游戏控制杆,方向盘,键盘,轨迹球和数字化仪。

   而且,USB也使用HID来实现监视器控制,扬声器控制,UPSs,LCDs等等很多外设。

   监视器和扬声器控制比较容易添加到hid/input接口中,但是UPSs和LCDs就不是这么简单,为此,设计了hiddev接口,详细的信息请参考Documentation/hid/hiddev.txt。

  usbhid模块非常易于使用,它没有任何参数,自动检测插入的HID设备,是的,它能用合适的方式进行检测。

   不过,因为设备实在是太过于多样性了,你可能遇到某些设备工作的不好。这时你可以在hid-core.c的开始加上#defineDEBUG,把syslog traces发给我。

 3.1.2 usbmouse

~~~~~~~~~~~~~~

  对于嵌入式系统,只为了使用鼠标功能而加入整个庞大的usbhid显然不是一个好的选择,这时可以只使用usbmouse驱动,它只处理usb鼠标。它使用了简易的HIDBP协议。当然这要求你的鼠标必须也要支持这一简易协议。最好,如果你没有很强烈地理由,请使用usbhid。

 3.1.3 usbkbd

~~~~~~~~~~~~

  就像usbmouse一样,这个模块用简易的HIDBP协议与键盘通信。它很小,但不支持任何额外的按键。没有特别的原因时,也请使用usbhid。

 3.1.4 wacom

~~~~~~~~~~~

  这是Wacom Graphire和Intuos tablets的驱动。它不是用于Wacom PenPartner,一个由HID驱动处理的设备。尽管Intuos 和Graphiretablets声称他们是HID tablets,但实际上不是,所以需要这个特别的驱动。

 3.1.5 iforce

~~~~~~~~~~~~

  用于I-Force游戏杆和滚轮的驱动,通过USB和RS232连接。现在它包含了ForceFeedback的支持,尽管Immersion公司认为该协议是商业机密而且没有公开它的任何信息。

 3.2 Event handlers

~~~~~~~~~~~~~~~~~~

  Eventhandlers根据实际需要,把设备的事件分发到用户空间或者内核中。

3.2.1 keybdev

~~~~~~~~~~~~~

  keybdev目前是一个不太好的骇客工具,它把输入事件转换为体系相关的键盘raw模式(x86中的Xlated AT Set2),然后传递给keyboard.c模块中的handle_scancode函数。当体系的keybdev能产生rawmode时,它会工作得很好,其他体系也能添加进来。

   正确地方法是直接把输入事件传递到keyboard.c中,最好的是keyboard.c本身就是一个event handler。这一工作由下面提到的网页提供了一个input patch来完成。

 3.2.2 mousedev

~~~~~~~~~~~~~~

  mousedev也是一个骇客工具,它使得那些需要使用鼠标的程序可以工作。它从鼠标或者数字化仪获取事件,然后生成了一个PS/2类型(例如/dev/psaux)的鼠标设备来让用户空间的程序使用。理想的情况下,程序应该使用一个更加合理的接口,例如evdev。

  上面提到的Mousedev设备在/dev/input中的呈现如下:

          crw-r--r--   1 root    root      13,  32 Mar 28 22:45 mouse0

         crw-r--r--   1 root    root      13,  33 Mar 29 00:41 mouse1

         crw-r--r--   1 root    root      13,  34 Mar 29 00:41 mouse2

         crw-r--r--   1 root    root      13,  35 Apr 1 10:50 mouse3

         ...

         ...

         crw-r--r--   1 root    root      13,  62 Apr 1 10:50 mouse30

         crw-r--r--   1 root    root      13,  63 Apr 1 10:50 mice

 除了最后的'mice',每个'mouse'设备被分配给单一的鼠标或者是数字化仪。最后的'mice',这个单一的字符设备由所有的鼠标和数字化仪共享,就算没有任何真正的鼠标连接进来,这个设备也依然存在。这一特性对USB鼠标的热插拔功能很有用。这样尽管没有鼠标连接,程序依然可以打开该设备。

 在XFree86中,内核的配置项:CONFIG_INPUT_MOUSEDEV_SCREEN_[XY],指定了屏幕的像素。如果你想在X中使用数字化仪,这点是必要的,因为她的移动会被通过虚拟的PS/2鼠标发送到X中,这时需要计算正确地比例。如果你只是使用鼠标,这个配置值是没有用处的。

  依赖于程序希望读取什么数据,Mousedev会生成PS/2, ImPS/2(Microsoft IntelliMouse) 或者

ExplorerPS/2 (IntelliMouse Explorer)协议格式的数据。你可以把GPM和X设置成这里的任一种。如果你想使用USB鼠标上的滚轮,你可以配置为ImPS/2,而当你希望使用额外的按键时,就使用ExplorerPS/2。

 3.2.3 joydev

~~~~~~~~~~~~

  Joydev实现了Linux joystick 的v0.x和v1.x版的api,有点类似之前内核使用的驱动:drivers/char/joystick/joystick.c。细节请进一步参考内核文档:joystick-api.txt。一旦有joystick连接到系统中,我们可以通过/dev/input中的以下节点访问它:

          crw-r--r--   1 root    root      13,   0 Apr 1 10:50 js0

         crw-r--r--   1 root    root      13,   1 Apr 1 10:50 js1

         crw-r--r--   1 root    root      13,   2 Apr 1 10:50 js2

         crw-r--r--   1 root    root      13,   3 Apr 1 10:50 js3

         ...

 一直可以到:js31.

 3.2.4 evdev

~~~~~~~~~~~

  evdev是一个通用的输入事件接口,它把内核产生的事件,连同时间戳一起,直接传递到用户空间的应用程序中。该接口的API还在不断完善中,但现在已经可以使用它们。该接口我们会在下面的第5节说明。

   GPM和X可以通过该方式来获取键盘和鼠标的事件。无需内核特别支持,它就可以允许X对它进行多线程的访问。事件编码对所有平台都是统一的并且是硬件无关的。

  设备节点位于 /dev/input:

          crw-r--r--   1 root    root      13,  64 Apr 1 10:49 event0

         crw-r--r--   1 root    root      13,  65 Apr 1 10:50 event1

         crw-r--r--   1 root    root      13,  66 Apr 1 10:50 event2

         crw-r--r--   1 root    root      13,  67 Apr 1 10:50 event3

         ...

 一直可以到:event31.

 4. 验证是否可以正常工作

~~~~~~~~~~~~~~~~~~~~~~~~

  在键盘上敲几个键就足以检查USB键盘是否工作正常,也能检查是否内核的驱动是否工作正常。

   敲入命令:"cat /dev/input/mouse0" (c, 13, 32)可以验证鼠标是否被正确地枚举,当你移动鼠标时,屏幕会显示一些字符。

 

  你可以用jstest工具来测试joystick是否正常工作,该工具在joystick包中(参见文档:Documentation/input/joystick.txt)

 

  可以使用evtest工具对event设备进行测试,该工具可以从LinuxConsole项目的CVS中获取(见下面的URL)

 5. Event interface

~~~~~~~~~~~~~~~~~~

如果你希望在你的任何应用中(X,gpm,svgalib ...)添加event设备的支持,我(vojtech@ucw.cz)非常乐意尽我所能提供帮助。这里我说明一下当前的进展状况,虽然还在不断地扩展中,但是基本的接口是不会改变而导致不兼容的问题:

  你可以在/dev/input/eventX设备上使用阻塞,非阻塞的读操作,也可以用select()操作。你会在一次读取中返回一个完整的输入事件,它的结构如下:

struct input_event {

         structtimeval time;

         unsignedshort type;

         unsignedshort code;

         unsignedint value;

};

   'time'字段是时间戳,它返回时间发生时的时间。关于type字段,EV_REL代表返回的是相对移动值,EV_KEY代表的是按键按下或释放,更多的类型定义可以参见:include/linux/input.h。

   'code'字段是事件的编码,例如可以是REL_X或KEY_BACKSPACE,你也可以从include/linux/input.h中得到完整的列表。

   'value'字段是该事件携带的参数值。可以是EV_REL事件的相对变化量,EV_ABS事件的一个新的绝对值(joysticks...),对于EV_KEY事件,该值是0代表按键释放,为1代表按键按下,为2代表自动重复。

TxtInputStream.java 1 word 另存 ANSI格式 文本; 2 读取所有文本,循环读出每一条; 3 根据回车换行符拆分字符串 4 拼接SQL 语句 导入数据库 5 拆解符为 数字 +“. ” ,避免重复数字报错。 立即下载

相关推荐

游戏手柄joystick api测试程序

joyGetNumDevs 获取当前系统支持的游戏设备数量 joyGetDevCaps 查询获取指定的游戏杆设备以确定其性能 joySetCapture 向系统申请捕获某个游戏设备并定时将该设备的状态值通过消息发送到某个窗口 joyReleaseCapture 释放对某个游戏设备的捕获 joyGetPos 获取游戏设备的坐标位置和按钮状态 joyGetPosEx 获取游戏设备的坐标位置和按钮状态 joyGetThreshold 查询指定的游戏杆设备的当前移动阈值 joySetThreshold 设置指定的游戏杆设备的移动阈值

Linux 驱动开发 六十:《input.txt》翻译

这是一个驱动进程集合,旨在支持Linux下的所有输入设备。虽然它目前仅用于USB输入设备,但未来的使用(例如2.5 / 2.6)预计将扩展到取代大多数现有的输入系统,这就是为什幺它位于而不是中的原因。输入驱动器的中心是输入模块,它必须在任何其他输入模块之前加载 - 它用作两组模块之间的通信方式:1、设备驱动进程这些模块与硬件通信(例如通过USB),并向输入模块提供事件(击键、鼠标移动)。2、事件处理进程这些模块从输入中获取事件,并通过各种接口将它们传递到需要的地方 - 击键到内核,鼠标通过模拟的。

OnlyLove_的博客 811

从零到一:基于Docker与Gewechat协议,打造高可用微信AI助手

本文提供了一份从零开始的实战指南,详细讲解如何利用Docker容器化技术与Gewechat协议,构建一个高可用、低风险的微信AI助手。通过整合Dify AI平台,您可以为微信机器人注入大语言模型的智能,实现自动问答、知识库查询等高级功能,显著提升个人或团队在微信场景下的沟通与信息处理效率。

weixin_29280657的博客 160

Linux嵌入式input子系统

code表示哪一个事件,EV_KEY(按键)类事件,它表示键盘。其中type表示哪类事件,比如EV_REL表示相对位移(比如鼠标),EV_ABS表示绝对位置(比如触摸屏)对于按键,它的value可以是0(表示按键被按下)、1(表示按键被松开)、2(表示长按);对于触摸屏,它提供的是绝对位置信息,有X方向、Y方向,还有压力值。设备驱动使用内核提供的接口,向内核上报输入事件,内核处理输入事件并且给用户层提供接口。1.内核用input_dev结构体表示一个输入设备(鼠标,键盘,触摸屏).value:表示事件值。

weixin_43736492的博客 434

数据库和BI工程师面试题

 一.数据库 1.Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用? 2.Oracle数据库,有哪几类索引,分别有什么特点? 3.Union与Union All的区别? 4.对游标的理解?游标的分类?使用方法? 5.如何查找和删除表中的重复数据?给出方法或SQL。 6.不借助第三方工具,怎么查看SQL的执行计划? 7.创建索引有哪些需要注意的要点?

web_go_run的专栏 1万+

Cesium实战:如何在前端直接渲染TIFF影像(附完整代码与避坑指南)

本文详细介绍了如何在前端利用Cesium直接加载和渲染TIFF影像的完整技术方案。针对TIFF格式的地理影像数据,文章提供了从文件解析、坐标转换到像素处理与Cesium集成的全流程代码实现,并分享了性能优化与常见问题的避坑指南,帮助开发者高效实现三维地理可视化。

weixin_29290947的博客 316

【joysticker】【Linux】Python脚本实现USB游戏手柄的驱动

# Released by rdb under the Unlicense (unlicense.org) # Based on information from: # https://www.kernel.org/doc/Documentation/input/joystick-api.txt import os, struct, array from fcntl import ioctl ...

大盈若冲,其用无穷。 5815

MOSFET关断尖峰电压的机理与抑制

MOSFET在电力电子系统中存在开关尖峰电压/电流问题,主要源于寄生电感、密勒电容及开关瞬态特性。尖峰会引发过压击穿、功率损耗和EMI干扰。抑制措施包括优化驱动电路、添加缓冲网络(RC/RCD)、降低寄生电感(改进PCB布线/封装)、使用快速二极管及远端负载特殊处理(电抗器/滤波器)。系统性的器件选型与电路设计是确保功率电子稳定运行的关键。

硬核科技 1824

js代码触发事件 函数列表

onabort 当用户中断下载图像时触发。 onactivate 当对象设置为活动元素时触发。 onafterprint 对象所关联的文档打印或打印预览后立即在对象上触发。 onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 onbeforeactivate 对象要被设置为当前元素前立即触发。 onbeforecopy 当选中区复制到系统剪贴板之前在源对象触发。

2875

微信小程序一键跳转公众号(使用 official-account 组件)

在当今移动互联网时代,用户体验已成为应用成功的关键因素之一。微信小程序作为一种便捷的应用形式,广泛应用于各个行业,为用户提供了丰富的服务和信息。然而,如何进一步提升用户体验,使其在小程序中能够更方便地获取相关信息,成为开发者需要关注的重要课题。实现一键跳转到公众号的功能,正是一个有效的解决方案。通过这一功能,用户可以轻松访问公众号,获取更多内容和服务,从而增强与品牌的互动和粘性。本文将详细介绍如何在微信小程序中实现这一功能,并提供相关的操作步骤和注意事项。

不迁怒,不贰过。小知识,大智慧。 3127

YOLO26训练自己的数据集,从代码下载到实例测试 (含YOLO26网络结构图)

在Windows10上配置CUDA环境教程2026年1月14日,YOLO26是最新发布的计算机视觉模型。支持多种任务,包括目标检测、实例分割、图像分类、姿态估计、有向目标检测以及物体跟踪等。以上就是YOLO26训练自己数据集的全部过程啦,欢迎大家在评论区交流~

Limiiiing的博客 6532

Linux 驱动开发 四十八:Linux INPUT 子系统实验

一、input 子系统简介 input 就是输入的意思,因此 input 子系统就是管理输入的子系统,是 Linux 内核针对某一类设备而创建的框架。 比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。为此 input 子系统分为 input 驱动层、input 核心层、input 事件处理层,最终给用户空间

OnlyLove_的博客 1362

微软推出突破性AI医疗诊断系统MAI-DxO:诊断准确率85.5%,是医生的4倍,成本更低

微软推出医疗AI系统MAI-DxO,通过多AI模型协作实现高效诊断,准确率达85.5%,是传统医生团队的4倍。该系统整合自然语言处理、计算机视觉等技术,模拟专家会诊流程,显著降低医疗成本60%。具备罕见病识别、基层医疗支持等功能,同时注重伦理安全和可解释性。微软计划开放部分架构,推动医疗AI普惠化。这一突破标志着医疗AI从单点工具向系统级智能的跨越,有望重塑更精准、高效的智能医疗未来。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 637

Linux输入子系统:输入设备编程指南 -- input-programming.txt

基本事件类型(types) ~~~~~~~~~~~~~~~~~~~~~ 最简单的事件类型是EV_KEY,它用于键盘和按钮,它通过以下函数上报给input子系统: [cpp] view plaincopy input_report_key(struct input_dev *dev, int code, int valu

highfly591的专栏 382

事件驱动的 SAP 工作流:从 BOR 事件到 Event Linkage 的落地与排障全景图

摘要: SAP工作流中的Event是业务对象状态变化的系统广播机制,如发票录入、采购订单释放等事件。通过事件驱动,业务程序与流程引擎解耦,业务只需发布事件,流程引擎负责后续处理。文章详细解析了SAP工作流事件的完整链路,包括事件定义、触发机制、事件容器传递、SWE2配置的关键作用,以及事件不触发时的排查方法。重点介绍了事件在启动流程、终止任务、等待步骤和主动创建中的应用,并结合采购订单审批案例说明事件的实际使用场景和配置要点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 190

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux输入子系统:输入设备编程指南 -- input-programming.txt .

Programming input drivers ~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Creating an input device driver ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.0 The simplest example ~~~~~~~~~~~~~~~~~~~~~~~~ Here comes a very simp

fanwenjieok的专栏 756

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux输入子系统:事件的编码 -- event-codes.txt

Linux输入子系统:事件的编码 -- event-codes.txt 翻译 2012年12月25日 09:57:39 18921 输入系统协议用类型types和编码codecs来表示输入设备的值并用此来通知用户空间的应用程序。这篇文档对这些类型和编码进行了说明并且指出什么时候和如何使用这些类型和编码。  一个单一的硬件事件可以产生多个输入事件,每个

lqxandroid2012的专栏 453

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)
下一篇: Linux输入子系统:事件的编码 -- event-codes.txt
DroidPhone
博客等级 码龄16年 3750粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值