固件#
定义:固件是嵌入硬件或由系统加载以直接控制硬件内部操作的低级软件。它通常存储在硬件设备本身的非易失性存储器(如 ROM、EEPROM 或闪存)中。
角色:固件提供允许硬件正常运行的基本控制指令。它非常接近硬件并且通常在最基本的层面上运行。这意味着它控制硬件的基本行为和特性,例如网卡如何处理数据传输或显卡如何处理渲染。
直接控制:在某些情况下,固件直接与硬件通信,而不依赖于操作系统 (OS)。例如,BIOS/UEFI 固件甚至在操作系统启动之前就控制硬件。某些设备可以仅使用其固件(例如嵌入式系统)运行,但如果没有来自操作系统的高级控制,它们可能会受到限制。
示例:
BIOS/UEFI,用于在计算机启动时初始化和配置系统硬件。
显卡固件(如 VBIOS),用于设置 GPU 以进行基本渲染和与操作系统通信。
SSD 固件,用于管理存储设备的内部磨损均衡、垃圾收集和错误更正过程。
驱动程序#
定义:驱动程序是一种软件,允许操作系统(如 Linux、Windows 或 macOS)与硬件设备通信。驱动程序充当操作系统和硬件之间的中介。
角色:驱动程序使操作系统和更高级别的软件能够控制和使用硬件。固件控制硬件的内部操作,而驱动程序解释来自操作系统的命令并将其转换为硬件可以理解和执行的指令。驱动程序还抽象硬件复杂性,允许操作系统和应用程序与硬件交互,而无需了解其低级细节。
操作系统控制:与固件不同,驱动程序由操作系统在运行时加载。如果没有驱动程序,操作系统就无法直接控制硬件,但一旦安装了驱动程序,操作系统就可以通过驱动程序向硬件发送请求(例如,读取/写入数据、显示图形、发送网络数据包)。驱动程序还使操作系统能够以标准化的方式访问硬件资源。
示例:
- 图形驱动程序(如 NVIDIA、AMD 或 Intel 驱动程序)允许操作系统和应用程序渲染复杂的图形并访问 GPU 功能。
- 网络驱动程序使操作系统能够与系统的网卡通信并处理网络上的数据传输。
- 存储驱动程序使操作系统能够与硬盘驱动器、SSD 和 USB 设备交互。
固件和驱动程序之间的主要区别#
| 方面 | 固件 | 驱动程序 |
|---|---|---|
| 位置 | 嵌入硬件或存储在 /lib/firmware | 安装在操作系统中(例如,在 Linux 上存储在 /lib/modules/ 中) |
| 控制级别 | 直接控制硬件的内部工作 | 为操作系统提供与硬件通信的接口 |
| 加载时间 | 在操作系统启动前加载(例如,BIOS/UEFI)或由操作系统加载以初始化硬件 | 由操作系统在运行时加载以管理硬件功能 |
| 用途 | 管理基本的低级硬件功能 | 使操作系统能够访问和控制硬件 |
| 与操作系统的交互 | 通常独立于操作系统;在硬件级别工作 | 需要操作系统才能运行;作为操作系统和硬件之间的中介 |
| 示例 | GPU 固件、SSD 固件、UEFI 固件 | 图形驱动程序、网络驱动程序、声音驱动程序 |
固件和驱动程序如何协同工作#
固件控制硬件的内部操作:例如,网卡上的固件管理卡在网络上物理发送和接收数据包的方式。它在非常低的级别处理数据包缓冲和错误检查等事情。
驱动程序在硬件(由固件控制)和操作系统之间进行接口:操作系统中的网卡驱动程序从操作系统接收更高级别的请求(如“发送此数据包”或“连接到此网络”)并将其传递给网卡,网卡使用其固件执行这些指令。
固件 + 驱动程序示例:
显卡上的固件设置其低级操作并确保它可以渲染基本图像,但操作系统中的图形驱动程序通过在应用程序和硬件之间提供接口,允许用户充分利用 GPU 的游戏、3 D 建模或视频渲染功能。
摘要#
- 固件直接控制硬件的内部、低级操作,使其正常运行。
- 驱动程序通过抽象硬件复杂性并提供标准化接口,允许操作系统与硬件进行通信和控制。
固件和驱动程序共同确保硬件设备正常工作,并可由操作系统和用户级应用程序充分利用。


