为什么固件和驱动程序必须分开?

Pen*_*Kon 12 firmware drivers

看看设备固件与驱动程序的差异,我真的不明白为什么我们在技术上需要这种区别。我知道固件不容易更改,它承担低级设备操作,而驱动程序则与主机操作系统进行通信。

问题是,为什么我们不能将这两层折叠成一层。只是一个知道如何与操作系统通信并将所有请求直接转换为低级设备操作的驱动程序。是为了便于开发(即减少开发该软件所需的开发人员知识)吗?是否可以使用不驻留在闪存中的软件与设备进行通信?

jvb*_*jvb 33

不,两种类型的软件通常在不同类型的机器上运行。

固件运行在外围设备的处理器/控制器上,驱动程序运行在机器的CPU上。这些通常甚至是不同的类型。

理论上,我们可以让机器的 CPU 来完成外围设备中的所有位操作。这在早期的计算机中已经完成。但这的代价很高。

通常,外部协议涉及硬时序限制(例如网卡或 CRT 显示器)。你的CPU需要处理大量中断才能在正确的时刻完成工作。因此,在著名的 Sinclair ZX-81 上,当 CPU 正在努力工作时,显示屏会关闭 - 没有时间刷新屏幕:)

因此,我们现在试图解耦外围设备的工作。当完整的网络数据包到达时,CPU 将收到通知,并且不必轮询线路来更改位。

  • 我突然想起那些糟糕的[winmodem](https://en.wikipedia.org/wiki/Winmodem),人们购买它们是因为它们更便宜,但却大大降低了系统性能。 (12认同)
  • 这忽略了这样一个事实:固件不是特定于操作系统的,但驱动程序是特定于操作系统的。必须有一些软件组件允许与正在使用的特定操作系统进行互操作。将每个操作系统的所有代码放入固件中效率很低。 (2认同)

Luk*_*ard 10

固件直接使用设备的硬件在设备上运行。一种看待它的方式是,固件是操作系统的API,无论计算机运行什么操作系统,如果它接收到x指令,那么固件将执行y,并且可能返回值z。该设备将拥有自己的时钟(用于控制指令执行的速度)、其自己的内存,并且设备上的处理器可以与计算机不同,例如计算机可能是 amd64,但设备具有 arm64 处理器。固件不直接与 CPU 或 RAM 通信,它从总线获取指令,并将数据放回到总线上。

驱动程序在计算机上运行在操作系统内核级别或操作系统用户级别,驱动程序依赖于操作系统,并且必须满足操作系统的要求才能运行。驱动程序通常会处理需要计算机的 CPU 和/或 RAM 的任何工作,一旦完成指令的每个处理,指令就会通过固件传递到设备。


归档时间:

查看次数:

2310 次

最近记录:

2 年,9 月 前