固件与设备驱动程序的区别和联系

固件与设备驱动程序的区别和联系
  1. 固件和设备驱动程序有何不同和关联?我认为两者都控制设备?
  2. 固件是否始终自启动,而驱动程序必须由操作系统运行/启动?

答案1

  1. 固件是运行设备。驱动程序是一种软件,它告诉您的操作系统如何与设备通信。并非所有设备都有固件——只有具有一定智能水平的设备才有固件。

  2. 我不太清楚你的意思……一般来说,固件与“启动”无​​关……我想你也许想问的是,带有固件的设备是否始终在设备上安装固件,还是在启动后加载固件。如果你问的是这个,答案是否定的……

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

答案2

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

答案3

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

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

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

答案4

为了计算机平台,微控制器固件实现硬件的一些功能并提供一些接口。UEFI 固件与微控制器固件配合使用,在操作系统及其驱动程序启动之前处理计算机,初始化硬件并向操作系统提供必要的信息。因此,操作系统可以安装正确的驱动程序,驱动程序知道控制硬件的可用方法。驱动程序可以调用固件例程或直接控制硬件以执行操作系统发送的任务。所有固件都是自足子系统在硬件启动时自动加载运行,可以协同组成更大的系统。OS驱动程序为硬件/软件提供接口,是OS的一部分,必须由OS加载,不能直接由硬件运行。

固件是针对特定硬件平台开发的软件系统。其作用因硬件平台不同而有很大差异。我们来看一些例子。

主板上有一个或多个 PCIe 控制器。PCIe 控制器通常作为微控制器实现。微控制器是一种小型集成电路 (IC),包含 CPU 内核、内存和各种外设,全部集成到单个芯片中。这些微控制器旨在高效处理特定任务和功能。对于 PCIe 控制器,微控制器专门用于管理中央处理单元 (CPU) 和连接到主板的 PCIe 设备之间的数据传输和通信。在这些微控制器上运行的软件系统是固件。调用微控制器固件来初始化和控制 PCIe 设备。几乎所有主板组件(网络接口卡 (NIC)、硬盘 (HDD/SSD) 控制器)和外围设备(USB 闪存、打印机)中都有类似的微控制器和固件,具有类似的作用。

统一可扩展固件接口 (UEFI)是规定计算机平台使用的固件架构的规范。计算机上的 CPU 硬连线以运行 UEFI 固件。UEFI 固件会逐步初始化硬件组件并加载其模块,这称为UEFI 启动阶段安全阶段 (SEC) 是第一阶段。它配置临时 RAM(通常是 CPU 缓存作为 RAM),在临时 RAM 中配置堆栈和堆,使用固件卷 (FV)、临时 RAM、堆栈和堆的位置和大小调用预 EFI 初始化 (PEI)。主内存尚不可用。PEI 是第二阶段。它执行主内存和其他早期硬件初始化,还执行固件恢复操作。第三阶段是驱动程序执行环境 (DXE)。由于现在主内存可用,大多数模块都已加载,大多数硬件都已初始化,如 CPU、芯片组、主板和启动设备。执行 EFI 驱动程序或 PCI 设备的选项 ROM。第四阶段是瞬态系统加载 (TSL)。在这里,您可以进入 UEFI shell 或执行 UEFI 应用程序,如操作系统 (OS) 引导加载程序。然后,最后一个阶段运行时 (RT) 到来。加载的操作系统接管计算机。

如您所见,UEFI 固件和微控制器固件有很大不同。UEFI 固件看起来像一个操作系统,具有驱动程序、应用程序和图形用户界面 (GUI)/命令行界面 (CLI)。它调用微控制器固件来控制其他设备。相比之下,微控制器固件要简单得多,没有 GUI/CLI,只负责一个组件或外围设备。

视频游戏机(PlayStation、Xbox)、路由器、交换机、信息亭以及车辆、家电、机器人和物联网 (IoT) 设备中使用的许多嵌入式系统所使用的软件系统也是固件。与 UEFI 固件一样,其中一些具有与操作系统类似的功能,例如用户应用程序、系统应用程序、内核、驱动程序、引导加载程序。在某些情况下,它到底是操作系统还是固件还不是很清楚。但它们都是为特定硬件平台设计,具有相对特定的用途. 而操作系统则更加通用,可以在各种硬件平台上运行,而且可以完成上述设备所做的所有事情。

一个司机是为了提供硬件/软件接口以供其他软件系统调用而开发的软件系统。它可以具有分层的体系结构。 驱动程序堆栈指多个驱动程序的分层结构,它们协同工作以实现硬件设备与操作系统或软件应用程序之间的通信。驱动程序堆栈中的每一层都负责特定的任务,各层之间的交互允许高效处理硬件功能和数据流。分层驱动程序在现代操作系统中很常见,可提供模块化、灵活性和对各种硬件设备的支持。显然,驱动程序必须正确地与它提供接口的硬件/软件以及调用接口的软件进行通信。

相关内容