字符设备驱动之输入子系统分析(一)

作者:Bright-Ho

联系方式:836665637@qq.com


前言背景描述:

虽然在网上看了很多有关输入子系统的资料和视频,但是真正的,系统的,全面的,来弄清输入子系统,还是要花些时间和精力的!现在我以一个初学者的角度来分析input输入子系统;

那么分析input输入子系统之前,得先弄清楚几个问题;

1)什么是字符设备?

答:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备;

我们知道linux一切设备皆文件;dev/目录下的文件中,通过ls -ll命令可以查看文件属性,以c开头的都是字符设备文件;


2)什么是input输入子系统?

答:那么什么是input输入子系统呢,内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存多任务共享库共享写时拷贝,以及网络功能等,增加各种不同的功能导致内核代码不断的增加;Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。


3)引入input输入子系统的作用?

答:linux内核中自带了很多的驱动子系统,其中比较典型的就有:input子系统led子系统framebuffer子系统(LCDI2C子系统USB子系统,等等;这些子系统通过一层一层的函数传递封装,实现设备驱动的注册,以及file_operation结构体里面的函数操作等;不需要在单独的设备驱动代码里面进行注册,定义;比如构造file_operation结构体,以及通过register_chrdev来注册,还包括提供给应用程序的接口;直接调用相应的input子系统的核心层提供的接口,即可操作,input子系统帮你完成这些事情;这样引入子系统的最终目的就是简化了驱动程序的实现,子系统把通用的部分都给你实现好了,差异化的东西还得自己来实现;所谓差异化,就是各种不同的硬件设备有自己特有的属性;

所以写驱动的时候,你必须了解两点

(一)了解硬件的工作原理,比如硬件的电路图,硬件的协议,时序图等等;

(二)了解驱动的框架;这里的框架就是所谓的各种子系统框架;

掌握这两点后,你就可以明白,通过驱动的框架,知道哪些事情是内核帮我们完成的,哪些事情是需要我们自己来实现的,这在做驱动移植方面的工作,也是必须了解的两点;


那么这里暂时提出这3个问题,通过上面的三个问题,可以了解到,理解input输入子系统,必须结合相关的字符设备硬件来了解,比如,键盘鼠标按键触摸屏LCD;那么后面的内容我会结合各种硬件来讲解输入子系统;





 

热门相关:冉冉心动   金粉   富贵不能吟   闺范   修真界败类