linux的input子系统(一)

来源:互联网 发布:linux命令入门 编辑:程序博客网 时间:2024/05/29 04:37

之前学习过linux的input子系统,但学的还是一知半解,这两天重新学习了一下,正好做了一个总结,希望对像我一样的菜鸟们一点帮助,正所谓好好学习,天天向上嘛。这一篇文章咱们从开发板上一个很简单的按键程序开始,当然这个按键的驱动是按input子系统的规范写的。正是这个例子简单,所以大家也很容易理解。开发平台:Smart210(友善开发板)、linux内核:linux-3.0.8、主机系统:Fedora14、交叉编译器:友善自带的arm-linux-gcc-4.5.1,这个大家注意一下了。

在直接说例程前,我们首先看一看linux的input子系统的整体框图,可能现在看起来有点不太懂,但熟悉熟悉还是挺好的,对input子系统有个整体的了解。好吧,如下图,注:源自网络。

对它主要分为三层:事件处理层、input核心层、设备驱动层。下面简单说说每一层的主要作用:

设备驱动层:主要实现对具体硬件的驱动以后获得硬件产生的数据,并且把硬件设备产生的数据封装成事件的形式提交给核心层。这些是通过申请一些io、中断等资源完成的来读写硬件设备的,用核心层定义的规范来注册到核心层的。咱们要说的的按键驱动程序就是设备驱动了,我们到时候应该会看的很明白。

input核心层:从上图可以看到,核心层处于事件处理层和设备驱动层的中间,对,它的作用就是承上启下的作用。设备驱动层调用核心层提供的接口,把具体数据提交给核心层,核心层就自动把数据交给事件处理层。

事件处理层:顾名思义,这里就是对提交的数据做相应的处理了,同时这里也是用户的编程接口。

对于一个输入事件,如咱们要说的按键,鼠标移动,joystick的移动等等通过 input driver -> Input core -> Event handler -> userspace 到达用户空间传给应用程序。即如下图:

看到这里,大家有没有一个疑惑,我写一个简单的按键驱动程序,还要遵循这么多东西,我自己直接定义一个字符设备写不就得了吗?的确如果仅仅是写一个按键程序,其实怎么样写都一样,但是如果要写的是触摸屏、电脑的键盘以及鼠标等,那你在驱动中要做的事就很多了,而且你写的驱动,在应用层调用时,没有一个统一的标准,那你就必须做一个文档介绍你给应用层提供的接口了,而且不见得你能写的比较好,再一个AndroidX windowsqt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。如果按照linux提供的input子系统的规范来完成驱动,在设备驱动中仅仅需要把硬件产生的数据提交给核心层,而核心层就会自动提交给事件处理层,在事件处理层中已经完成了对字符设备的文件操作接口,同时也完成了所提交数据的处理,这样写设备驱动的工作量就不是很大了,而且写的驱动能更规范、更稳定,这就是咱们要研究input子系统的原因。当然老话告诉我们,什么都是一把双刃剑,要按照input子系统写驱动,你首先得了解input子系统,这就为写设备驱动提高了门槛,而且如果要灵活应用,还得进一步研究input子系统。

不知不觉就写了这么多,如果把按键驱动再加上进行讲解的话,可能篇幅就太大了,咱们把它放到下一篇吧,大家休息一下,咱们进行吧,下篇见喽!

0 0
原创粉丝点击