注:本系列转自: http://www.ourunix.org/post/290.html

input子系统介绍

        输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一般的工作机制是底层在按键,触摸等动作发生时产生一个中断(或驱动通过timer定时查询),然后cpu通过SPI,I2C或者外部存储器总线读取键值,坐标等数据,放一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值,坐标等数据。

        在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。

        在 Linux中,输入子系统作为一个模块存在,向上,为用户层提供接口函数,向下,为驱动层程序提供统一的接口函数。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备的功能呈现给应用程序。这样,就能够使输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通知驱动程序完成某项功能。

 

input子系统结构图

 

 

最新文章

  1. 学习笔记——SQLite介绍
  2. 关于SSMS显示select出来的数据行的疑问
  3. oracle应用启动时常会报未知服务名
  4. int,long,unsigned的值范围
  5. 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端
  6. 控制边框颜色:《CSS3 Border-color》
  7. POI中getLastRowNum() 和getLastCellNum()的区别
  8. 使用VMDepot镜像快速部署CKAN开放数据门户
  9. 【莫队】bzoj 3781,bzoj 2038,bzoj 3289
  10. Android Studio帮助文档的安装及智能提示设置
  11. 笔记:stm32 printf重定向到UART疑点解析
  12. 手把手教学在Springboot中搭建使用Guava cache,包教包会,不会我输一包辣条给你
  13. MongoDB学习总结(二)
  14. 解决Docker容器时区不一致的问题
  15. Linux mount 命令进阶
  16. 2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)
  17. PHP是什么?
  18. java并发回答
  19. Linux-软件包管理-yum在线管理-光盘yum源
  20. “全栈2019”Java第六十八章:外部类访问内部类成员详解

热门文章

  1. 动态修改字节码以替换用反射调用get set方法的形式
  2. 设置vim配置文件使得tab为4个空格
  3. 使用Unity做2.5D游戏教程(一)
  4. 【Luogu】P3116会议时间(拓扑排序,DP)
  5. 【Luogu】P1013进制位(搜索)
  6. 【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers
  7. 洛谷P2625 豪华游轮
  8. gdb 远程调试android进程
  9. 汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。
  10. Paul Graham:梦寐以求的编程语言