作者:Bright-Ho
联系方式:836665637@qq.com
前言背景描述:
虽然在网上看了很多有关输入子系统的资料和视频,但是真正的,系统的,全面的,来弄清输入子系统,还是要花些时间和精力的!现在我以一个初学者的角度来分析input输入子系统;
那么分析input输入子系统之前,得先弄清楚几个问题;
(1)什么是字符设备?
答:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备;
我们知道linux中一切设备皆文件;在dev/目录下的文件中,通过ls
-ll命令可以查看文件属性,以c开头的都是字符设备文件;
(2)什么是input输入子系统?
答:那么什么是input输入子系统呢,内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存,多任务,共享库,共享写时拷贝,以及网络功能等,增加各种不同的功能导致内核代码不断的增加;Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。
(3)引入input输入子系统的作用?
答:linux内核中自带了很多的驱动子系统,其中比较典型的就有:input子系统,led子系统,framebuffer子系统(LCD),I2C子系统,USB子系统,等等;这些子系统通过一层一层的函数传递与封装,实现设备驱动的注册,以及file_operation结构体里面的函数操作等;不需要在单独的设备驱动代码里面进行注册,定义;比如构造file_operation结构体,以及通过register_chrdev来注册,还包括提供给应用程序的接口;直接调用相应的input子系统的核心层提供的接口,即可操作,input子系统帮你完成这些事情;这样引入子系统的最终目的就是简化了驱动程序的实现,子系统把通用的部分都给你实现好了,差异化的东西还得自己来实现;所谓差异化,就是各种不同的硬件设备有自己特有的属性;
所以写驱动的时候,你必须了解两点:
(一)了解硬件的工作原理,比如硬件的电路图,硬件的协议,时序图等等;
(二)了解驱动的框架;这里的框架就是所谓的各种子系统框架;
掌握这两点后,你就可以明白,通过驱动的框架,知道哪些事情是内核帮我们完成的,哪些事情是需要我们自己来实现的,这在做驱动移植方面的工作,也是必须了解的两点;
那么这里暂时提出这3个问题,通过上面的三个问题,可以了解到,理解input输入子系统,必须结合相关的字符设备硬件来了解,比如,键盘,鼠标,按键,触摸屏,LCD屏;那么后面的内容我会结合各种硬件来讲解输入子系统;
p { margin-bottom: 0.21cm }
a:link { so-language: zxx }