外设驱动程序就是外设提供给操作系统调用的接口。通常外设都有自己的BIOS,并固化在外设的ROM中,就像主板BIOS一样,如果不用专用程序刷新是不会改变的。为了让外设适应不同的操作系统,就必须针对不同的操作系统对外设BIOS进行不同的封装。为了适应Linux,需要按Linux的接口定义封装外设的BIOS,形成Linux可以直接调用的api; Windows、Mac也一样。这些针对不同操作系统的api就是该外设在不同操作系统上的驱动程序。
根据前面的描述,一个很直接的问题就产生了,为什么不让操作系统直接调用外设上的BIOS呢?那样更直接效率也更高。原因是同一种外设有很多的制造商,他们的BIOS很可能不同,操作系统厂商不可能让自己的产品兼容所有的外设。只有外设制造商在操作系统与外设之间做适配,因此,也可以说驱动程序也就是一个适配器。
另外,从硬件驱动的角度看,其实,操作系统就是一个大驱动程序,一个针对CPU和内存编写的驱动,在人和硬件之间做适配。