linux Input subsystem知识点.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.linux i/o ---Input subsystem: 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。 Input子系统软件设计流程: 分配一个输入设备--注册一个输入设备--报告输入事件--注销一个输入设备--释放一个输入设备。 在内核中,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 等等。 输入子系统带来的好处: 统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论是PS/2、USB,还是蓝牙,都做同样的处理; 提供了用于分发输入报告给用户应用程序的简单的事件接口; 抽取出了输入驱动程序的通用部分,简化了驱动程序,并引入了一致性。 linux i/o ---Framebuffer Framebuffer是基础图形设施,是出现在内核当中的一种驱动程序接口,是作为其他高级图形或者图形应用程序的基本函数库。Framebuffer将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像而不必关心物理显存的位置、换页机制等等具体细节。帧缓冲机制是把屏幕上的每个点映射成一段线性内存空间,程序可以简单的改变这段内存的值来改变屏幕上某一点的颜色。帧缓冲设备提供了显卡的抽象描述。他同时代表了显卡上的显存,应用程序通过定义好的接口可以访问显卡,而不需要知道底层的任何操作 3.线程安全函数:一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。(针对多线程来说的),如果一个函数在同一时刻可以被多个线程安全的调用。 可重入函数(reentrant functions):可重入函数,与多线程无关,即可重入概念并不依赖于多线程,可重入的提出时依据单一线程提出来的,当然,多线程可重入是他的扩展。一个函数被同一个线程调用2次以上,得到的结果具有可再现性(多次调用函数,得到的结果是一样的)。常见的情况是,程序执行到某个函数foo()时,收到信号,于是暂停目前正在执行的函数,转到信号处理函数,而这个信号处理函数的执行过程中,又恰恰也会进入到刚刚执行的函数foo(),这样便发生了重入,此时如果foo()能够正确的运行,而且处理完成后,之前暂

文档评论(0)

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

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

1亿VIP精品文档

相关文档