linux驱动-输入子系统框架讲解
Input 子系统包括三个层次,分别是设备驱动层,核心层,事件处理层。
为什么要分层呢?
比如我们开发了一个驱动程序 a.c,其中里面有 100 行代码是通用的,然后我又开发了一个
驱动程序 b.c,那这 100 行代码就不用在重新写了,所以分层的好处就是不用重复劳动,降
低开发难度。
所以编写一个输入子系统驱动程序,只需要写设备驱动层,核心层,和事件处理层的代码不
需要编写。
所有的子系统都有一个特点,分层,就是屏蔽底层差异化,给上层提供同一的接口,核心层就是做到承上启下的功能。
假设上面的触摸,我们只需要写设备驱动层的代码,不需要写核心层和事件层
事件处理层:
上层打开open,你设备节点是谁通过的呢?看上面的图就知道是事件处理层创建的 ,事件处理层,第一件事就是要创建设备节点,对设备节点操作read,write,就是对底层的设备进行操作。所以在驱动中要实现这些函数,但是操作的函数集也需要在事件处理成创建。 这就是事件处理层要做的第二件事,一句总结,就是给应用层提供了硬件操作的接口
设备驱动层:
驱动层是和硬件打交道的,所以第一件事就是对硬件初始化。第二,在键盘上面敲了一个a,驱动层就要把这个a上报上去,也就是给到事件处理层。
核心层:
驱动要把a上报上去,给到事件处理层1,就要经过核心层,所以核心层就是和事件处理层和设备驱动层关联起来。在这一层要提供驱动的、和事件处理的注册和注销的方法。再有就是键盘回报的事件你给触摸屏的事件去处理,这是不行的,要对应起来。那键盘驱动的事件怎么知道要交给谁?这个时候就需要核心层了,可以理解核心层就是大管家,它会把对应的匹配起来,那这个时候是不是事件处层的代码也是需要自己写,答案是不需要,它里面有一个通用的代码,除非你是特需要求,需要固定备节点。