驱动和固件的区别是什么?固件、驱动、操作系统之间的关系
先看一组漫画,对固件、驱动、操作系统、软件之间的联系有个大概认识。
简单来讲,固件、驱动程序和软件之间的根本区别在于它们的设计目的。
- 固件是赋予设备硬件生命的程序
- 驱动程序是操作系统和硬件组件之间的中间人
- 软件可以间接操作硬件
-
固件
固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基础最底层工作,直接控制硬件。
比如计算机上电后第一个启动的程序 BIOS ,它可以与硬件交互,并检查它是否有任何错误。
BIOS 调用另一个称为引导加载程序的程序,该程序执行唤醒在硬盘驱动器内休眠的操作系统并将其放入随机存取存储器 (RAM) 的工作。
我们可以在许多设备上看到固件,包括计算机、手机、遥控器、游戏机、智能手表、USB 驱动器和各种嵌入式系统。
即使是电视遥控器也有一个预装的固件,可以实现你按下按钮的时候电视换台操作。 -
驱动
驱动程序(Driver)即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。
当计算机程序请求与某个硬件设备交互时,设备驱动程序充当硬件设备与使用它的程序之间指令的转换器。
操作系统并不支持机器上的所有硬件,所以一般来讲硬件厂商都要为自己的硬件编写驱动程序。
每个驱动程序都旨在为特定或一组设备工作。
在计算机上,驱动程序使用各种总线接口来联系设备。
此外,驱动程序一般不直接与用户交互,所以很多用户完全不知道它们的存在。
驱动程序的开发需要非常小心,因为它直接与硬件打交道,同时也与操作系统打交道。如果设备驱动程序出现问题,可能会导致系统崩溃,这就是为什么需要专业人员或团队来为设备编写驱动程序的原因。
但是为什么不把 Firmware 做的很完美,做的不需要驱动支持呢?因为有不同的操作系统,而这些操作系统对于操作硬件的方式完全不同。所以不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的。 -
软件
与硬件不同,软件是运行在电脑里,看不见摸不着。
操作系统也是一个软件,并且为安装在操作系统上的其他软件提供了工作空间。
前面提到的设备驱动程序其实也是一种软件,不过它有个更细分的种类,称为系统软件。
如果用户编写了一个软件,想要操作硬件(比如光驱、U盘等),他必须通过操作系统提供的接口来实现,而无法直接与硬件交互。
值得注意的一点是,软件是一个广义的术语,分为系统软件和应用软件。我们在日常使用中所说的「软件」一般是指应用软件,比如:微信,QQ,浏览器等等。
驱动(Driver)和固件(Firmware)都是代码,前者为软件服务,后者为硬件服务。
但是为什么不把fimware做的很完美,做到不需要驱动支持呢?因为有不同的操作系统。
不同的操作系统,对于操作硬件的方式完全不同。
在Windows里应用态是无法直接写IO端口的,而在嵌入式系统里,一般都不限制直接操作IO端口。
所以,硬件厂商一方面为了自己的硬件能被软件更简单的使用,就需要写firmware;而另一方面为了兼容各种操作系统,又不能把firmware写的太死,必须预留足够的余地让软件自由发挥——软件的自由发挥就是驱动。
假如世界上只有一种操作系统,并且版本永远不会改变,那么firmware和驱动就可以融合在一起,但这只能是一个不现实的梦想。
来自知乎匿名用户:
驱动是 OS 的一部分,跑在 CPU 上;Firmware 是硬件的一部分,跑在硬件板载的嵌入式芯片上。两者之间通过某些协议进行沟通,譬如对于硬盘驱动和 firmware 之间就是 SCSI 之类的协议。
本文来自博客园,作者:GPL-技术沉思录,转载请注明原文链接:https://www.cnblogs.com/polin/p/17159858.html