Linux驱动
前言
计算机软硬件相辅相成,合作完成相应功能。但一个共识是软件和硬件不应该相互渗透到对方的领域。
驱动使得应用软件开发人员不需要去关心硬件相关知识,专注于本身的业务领域。
应用软件工程师在使用套接字进行数据收发时,不必关心诸如中断、寄存器、存储空间、片选、IO端口及其它任何硬件词汇;在使用printf()输出信息的时候,不用关心底层到底是怎样将相应的信息输出到屏幕或者串口。
什么是驱动?
对设备驱动最通俗的理解是”驱使硬件设备行动“。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终能够让通信设备能收发数据,让显示设备能够显示文字和画面,让存储设备能记录文件和数据。
设备驱动充当了硬件和应用软件之间的纽带,应用软件只需要调用系统的API就可以让硬件完成要求的工作。
无操作系统情况下的设备驱动
没有操作系统的情况下,驱动工程师可以根据硬件设备的特点自定义接口。
有操作系统情况下的设备驱动
在有操作系统的情况下,驱动的架构由操作系统定义,驱动工程师必须按照相应的架构设计驱动,以便良好地整合入操作系统内核中。
总结
有操作系统情况下的驱动,实际上让驱动变得更复杂了。但好处是,让应用程序变得更简单(比如对类UNIX系统而言,应用程序通过write和read就可以访问字符设备和块设备,而不用考虑设备的具体类型和工作方式),同时支持多任务和并发。