什么是驱动程序
https://baike.baidu.com/item/%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F
驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。设备驱动程序通常会占到70%以上份额的操作系统内核源码,且设备驱动程序的更新维护往往会牵涉到超过35%的源码修改,故而保持设备驱动程序与操作系统内核不断变化的其余部分的一致性是操作系统内核开发的一项难题
当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
修改版
发烧友令笔者首先就联想到了显卡,这是为什么呢?因为一直以来,发烧友通常都被用来形容游戏爱好者。笔者的这个想法也正好和发烧友修改版的诞生典故相符的,因为发烧友修改版的驱动最先就是出现在显卡驱动上的,由于众多发烧友对游戏的狂热,对于显卡性能的期望也就是比较高的,这时候厂商所发布的显卡驱动就往往都不能满足游戏爱好者的需求了,因此经修改过的以满足游戏爱好者更多的功能性要求的显卡驱动也就应运而生了。如今,发烧友修改版驱动又名改版 驱动,是指经修改过的驱动程序,而又不专指经修改过的驱动程序。
从理论上讲,所有的硬件设备都需要安装相应的驱动程序才能正常工作。但像CPU、内存、主板、软驱、键盘、显示器等设备却并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢?
这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就可以被BIOS和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等 却必须要安装驱动程序,不然这些硬件就无法正常工作。
当然,也并非所有驱动程序都是对实际的硬件进行操作的,有的驱动程序只是辅助系统的运行,如android中的有些驱动程序提供辅助操作系统的功能,这些驱动不是linux系统的标准驱动,如ashmen,binder等。
微软平台
为了大量减轻驱动程序开发人员的负担,微软不断的改进驱动程序的开发软件与架构,从早期复杂深晦的VxD,到Windows XP上的Windows Driver Model(以下简称WDM)开发架构,如今Windows Driver Foundation(以下简称WDF)已成为新一代的Windows平台驱动程序发展架构,这个架构大量简化了驱动程序的开发流程,更符合面向对象的精神,此架构包含了UserMode Driver Framework 与Kernel Mode DriverFramework两种开发模式。在开发Windows平台上的驱动程序之前,必须先安装DDK包,支持WDM与WDF两种架构。
Unix平台
Linux作为UNIX的一个变种,继承了UNIX的设备管理方法,将所有的设备是具体的文件,通过文件系统层对设备进行访问。这种设备管理方法可以很好地做到“设备无关性”,可以根据硬件外设的更新进行方便的扩展。
Linux中的设备大致可以分为三类:字符设备,块设备,网络设备。
字符设备没有缓冲区,以字节为单位顺序处理数据,不支持随机读写。常见的字符设备如普通打印机、系统的串口、终端显示器、嵌入式设备中的简单按键、手写板等。
块设备是指在输入输出时数据处理以块为单位的设备,一般都采用缓冲技术,支持数据的随机读写。典型的块设备有硬盘、光驱等。
字符设备和块设备面向的上一层是文件系统层。对用户来说,块设备和字符设备的访问接口都是一组基于文件的系统调用,如read, write等。
网络设备与块设备和字符设备不同,网络设备面向的上一层是网络协议层。设备文件是一个唯一的名字(如eth0),在文件系统中不存在对应的节点项。内核和网络驱动程序之间的通信使用的是一套和数据包传输相关的函数,而不是简单的读写操作。
每一个设备都有一对主设备号、次设备号的参数作为唯一的标识。主设备号标识设备对应的驱动程序;次设备号用来区分具体驱动程序的实例。主设备号的获取可以通过动态分配或指定的方式。在嵌入式系统中外设较少,一般采用指定的方式。