输入子系统,顾名思义这本身是大神撸的一个系统。这个系统它不仅把输入设备底层驱动的共性部分(比如注册设备,open、write等)编写成一个大集合 以供调用,而且把与底层相匹配的处理事件程序也完成了。所以你只需要用这些集合把相对应的底层驱动设置好后注册进系统就可以了,这样不仅省去了很多事而且 保护了内核的统一。
首先我们先设置好相应的驱动(这其中最主要还是设置input_dev这个结构体和set_bit()等函数),然后注册。当输入事件发生时(按下 鼠标、点开显示屏),内核通过(input_report_...)函数向输入子系统报告发生的事件(其中这个函数最主要的部分还是 input_event函数),然后通过输入子系统匹配到相应的处理事件中去,而通过这个处理事件函数我们就可以连接到上层的应用中去,这就是大致的过程 了。
通过这个过程知道事件驱动一部分,输入子系统本身一部分和底层驱动三部分组成了输入子系统。而和上层有关的函数无非就是 open,write.read.close等,和底层有关的无非就是寄存器的操作等。这些在输入子系统其实同样适用,不过对输入子系统这个要更简单,因 为在事件处理部分我们的linux大神已经帮你完成了,你只需要把相应的底层驱动匹配上去就行,所以我们要做得就是完成底层驱动的部分,但是呢,对底层驱 动大神们怕你撸的还是不够规范所以也把一些简单的接口给你,你只需要直接调用就可以了。。说是输入子系统,但我已经把这么明显的分离分层思想已经暴露出来 了。我们把整个系统分层为上层应用----下层驱动(这就是分层)然后又把下层驱动分离为事件驱动和设备驱动(这就是分离)。
这只是输入子系统的主要部分,其他的部分一样。。
一个例程: