linux input subsystem 架构分析

主要数据结构

数据结构

用途

定义位置

具体数据结构的分配和初始化

Struct input_dev

驱动层物理Input设备的基本数据结构

Input.h

通常在具体的设备驱动中分配和填充具体的设备结构

Struct Evdev

Struct Mousedev

Struct Keybdev…

Event Handler层逻辑Input设备的数据结构

Evdev.c

Mousedev.c

Keybdev.c

Evdev.c/Mouedev.c …中分配

Struct Input_handler

Event Handler的结构

Input.h

Event Handler层,定义一个具体的Event Handler

Struct Input_handle

用来创建驱动层DevHandler链表的链表项结构

Input.h

Event Handler层中分配,包含在Evdev/Mousedev…中。

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

input subsystem 用来统一处理数据输入设备,例如键盘,鼠标,游戏杆,触摸屏等等。

这里引用 Linux Journal 上的一个图来说明input subsystem 的架构:
http://www.linuxjournal.com/article/6396

  

我们可以看到,input core 用来协调硬件的input事件 和 用户层应用之间的通讯。


这里再引用 ELDD 上的一个图片,来详细说明其内部的结构:

 

 在内核中,input_dev 表示一个 input设备;input_handler 来表示input设备的 interface。

 所有的input_dev 用双向链表 input_dev_list 连起来,如图所示:

在调用 int input_register_device(struct input_dev *dev) 的时候,会将新的 input_dev 加入到这个链表中。

 所有的input_handler 用双向链表 input_handler_list 连起来, 如图所示:



                                                                     
在调用 int input_register_handler(struct input_handler *handler) 的时候,会将新的 input_handler 加入到这个链表中。

每个input_dev 和 input_handler 是要关联上才能工作的,在注册 input_dev 或者 input_handler的时候,就遍历上面的列表,找到相匹配的,然后调用 input_handler 的 connect函数来将它们联系到一起。
通常在input_handler 的 connect函数中,就会创建 input_handle, input_handle就是负责将 input_dev 和 input_handler 联系在一起的,如图所示:

点击看大图

                                                                             
 这里需要额外说明一下的是: input_dev 中的 h_node 是 input_handle 链表的list节点,也就是说,一个input_dev,可以对应多个 input_handle.

当设备产生 input event 的时候,例如按下了一个键,驱动就会调用 input_handler 中的 event 函数,同时,如果input_dev 支持的话,也会调用 input_dev 的 event 函数。

这样,设备产生的事件就会被驱动记录下来。

当用户层的程序需要获知这些事件的时候,会调用 input_handler中的 struct file_operations *fops 中的相应函数,例如 read 等等。

可以看出,整个 input 框架的构思还是比较简洁方便的。

【参考资料】 

1. The Linux USB Input Subsystem

 Part I : http://www.linuxjournal.com/article/6396

 Part II : http://www.linuxjournal.com/article/6429

2. linux kernel 2.6.23.11


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux Subsystem是Windows 10操作系统中的一个子系统,可以在Windows 10中运行Linux命令和工具。在Windows 10中安装了Linux Subsystem之后,可以通过命令行输入"bash"来进入Linux Subsystem,然后就可以像在Linux系统中一样使用各种命令和工具了。 ### 回答2: Linux子系统是Windows操作系统中的一个功能,旨在使用户能够在Windows环境下运行Linux命令和应用程序,而无需安装完整的Linux操作系统。 Linux子系统中包含了许多常用的Linux命令,可以在Windows命令提示符或PowerShell中直接使用。这些命令是从Linux中移植过来的,具有与在Linux系统中运行相同的功能和语法。 通过使用Linux子系统,用户可以在Windows系统中像在Linux系统中一样进行文件管理、目录操作、软件安装等一系列常见的任务。同时,用户也可以通过访问Windows文件系统来共享文件和数据。 Linux子系统还提供了一个完整的Linux运行时环境,包括了Linux内核、文件系统、网络协议栈等。这使得许多基于Linux的应用程序能够在Windows系统中得到良好的兼容性和性能。 此外,Linux子系统还具有一些高级功能,例如支持在Windows和Linux之间进行互操作,允许在Linux命令和Windows命令之间进行混合使用。这使得开发人员可以更方便地进行跨平台开发和调试。 总的来说,Linux子系统是一个强大而实用的工具,使得用户能够在Windows系统中充分利用Linux的强大功能和丰富的应用生态系统,提供了更多的灵活性和选择性。 ### 回答3: Linux Subsystem(又称为WSL,Windows Subsystem for Linux)是微软在Windows操作系统上提供的一个功能,允许用户在Windows环境下运行Linux命令及应用程序。它是建立在Windows内核上的一个兼容层,可以让用户在不需要虚拟机或双启动的情况下使用Linux的工具和技术。 通过Linux Subsystem,用户可以在Windows的命令提示符(CMD)或PowerShell中运行各种Linux命令,如ls、cd、grep等。它支持大部分的Linux发行版,如Ubuntu、Debian、Fedora等。用户可以通过Microsoft Store下载所需的Linux发行版,然后在Windows Subsystem for Linux中运行。 Linux Subsystem的设计目标是提供一个与真正的Linux环境无缝集成的体验。用户可以访问文件系统、网络和进程,可以运行Linux的命令行工具、脚本和应用程序。 Linux Subsystem在Windows系统上的安装和配置也相对简单。用户只需要在Windows系统中启用适用于Linux的Windows功能,然后从Microsoft Store下载所需的Linux发行版即可。在安装完成后,用户可以通过启动WSL来访问Linux环境,并使用Linux命令来完成各种任务。 总之,Linux Subsystem为Windows操作系统的用户提供了一个轻便、方便的方式来使用和运行Linux的工具和应用程序。它使得开发者和系统管理员能够在不离开Windows环境的情况下,享受到Linux的强大功能和生态系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值