固件和设备驱动的区别和关系

Tim*_*Tim 30 firmware drivers

  1. 固件和设备驱动程序有何不同和相关性?我想两个控制设备?
  2. 固件是否总是自启动,而驱动程序必须由操作系统运行/启动?

Fli*_*mzy 27

  1. 固件是软件运行设备上。驱动程序是告诉操作系统如何与设备通信的软件。并非所有设备都有固件——只有具有某种程度智能的设备。

  2. 我不太确定你的意思......一般来说,固件与“启动”无​​关......我想也许你要问的是,带有固件的设备是否总是在设备上安装固件,或者它是在启动时间后加载的。如果这就是你要问的,答案是否定的...

最常见的是,带有固件的设备将固件编程到设备中(使用 ROM 芯片或可编程 ROM 芯片),但也有一些设备在初始化时将固件加载到设备中。我可以想到一些以这种方式运行的网卡和网络摄像头,但我相信还有其他的。

  • 固件由硬件设备本身运行......我认为这回答了问题?考虑一下:许多非计算机设备都有“固件”——例如数码相机、DVD 播放器、手机等。显然,在这些情况下,固件完全独立于设备本身。仅当您将这些设备之一插入计算机时,您才需要_驱动程序_。 (2认同)

Ign*_*ams 9

固件实现了操作硬件所需的低级细节,并提供了更高级别的 API/ABI。设备驱动程序在操作系统和固件公开的 API/ABI 之间提供了一个适配器。

  • 谢谢!设备驱动程序是操作系统的一部分,由操作系统内核运行吗?固件是设备的一部分,由操作系统内核还是固件本身运行? (2认同)
  • 设备驱动程序被认为是操作系统的一部分,通常在主机 CPU 上运行。固件*通常*由设备运行;不过,它可能会由操作系统上传到设备。 (2认同)

saw*_*ust 5

固件的现代定义或常见用法与特定软件功能无关。固件只是存储在非易失性半导体存储器(例如 PROM、EEPROM 或闪存)芯片中的软件,而不是诸如硬盘驱动器之类的大容量存储设备。存储的软件可以是一个整体链接的二进制文件,或者由加载程序、内核和应用程序模块组成。(OTOH 我见过一些用于 PC 的电视调谐卡,它们需要 Linux 内核加载“固件”才能完成初始化。)

该术语的起源与处理器控制逻辑与硬连线逻辑有关。存储在硬盘驱动器上的软件可以轻松修改和更新。硬连线逻辑的修订和更新需要电路板或模块的重新设计和更换。中间地带是处理器执行软件来控制硬件。该软件被称为公司洁具以反映之间的中间地带洁具与接线逻辑。最初,固件存储在 ROM、PROM 或 EPROM 芯片中,以保持板卡模块化。EEPROM 和闪存芯片的进步允许固件的在线和板载更新。

随着处理器(和外围设备)变得更小、更便宜且耗电更少,将它们嵌入到各种设备/设备中的可能性不断扩大。为了使操作这些设备的软件坚固耐用,软件存储在闪存芯片而不是硬盘驱动器中;它还使设备更小,更便宜。术语固件已扩展为包含具有嵌入式处理器的设备/电器中的所有软件,即使存储代码的某些部分可能与替换硬连线逻辑无关。

  • @xuhdev - 该 Debian 软件包由各种 Linux 设备驱动程序可以使用的文件组成。这些文件被称为“固件”,因为它们是由 Linux 驱动程序写入连接的设备的。这些文件可能包含设备嵌入式 uC/uP 的操作数据或代码。请注意,传输到设备的此文件将加载到设备的易失性存储器中,并且必须在每次设备或系统重置后进行加载。该“固件”*在主机大容量存储上的“安装”仅仅是一种程序机制(即包处理)。 (2认同)

bgm*_*der 5

最近有人发布了这个问题,说:

固件是持久内存、程序代码和存储在其中的数据的组合。包含固件的设备的典型示例是嵌入式系统,例如交通灯、消费电器、数字手表、计算机、计算机外围设备、移动电话和数码相机。这些设备中包含的固件为设备提供控制程序。

其实SuperUser的drivers标签是这样定义的:

驱动程序,也称为设备驱动程序或软件驱动程序,是允许更高级别的计算机程序与硬件设备交互的软件。当计算机程序请求与某个硬件设备交互时,驱动程序将处理设备与调用驱动程序的计算机程序之间的指令和输出转换。

并且,firmware标签定义为:

一般来说,软件和固件之间的区别在于它与硬件交互的级别。固件在硬件的极低级别进行交互,而软件在高级别进行交互。固件通常控制硬件的基本时序、控制和功能。

最初我认为它firmware是直接安装到芯片或板上并住在那里的,这就是为什么它必须被“闪存”,而你会driver在操作系统的顶部安装一个。

结论:

Firmware允许硬件“做”事情,并drivers允许软件与硬件交互。