为什么驱动程序的更新频率比固件高得多?

为什么驱动程序的更新频率比固件高得多?

在过去的几年中,我的计算机制造商已针对以下所有设备推出了更新:

  • 惠普 BIOS
  • Realtek 高清音频
  • AMD 高清显卡
  • Synaptics 触摸板
  • Realtek 蓝牙
  • Realtek WLAN
  • Realtek 读卡器

第一个是固件更新,但其他都是驱动程序更新。我拥有几台计算机,似乎非 BIOS 设备不需要固件更新。

因此,首先让我确认两件事。我列表中的非 BIOS 设备可能确实各自都有自己的私有固件,对吗?如果需要,这些固件可以由计算机本身更新(无需特殊的硬件/连接更改),对吗?

那么,为什么设备往往需要驱动程序更新的频率比固件更新高得多呢?我认为这是因为担心设备会变砖(与驱动程序更新不同,错误的固件更新可能会破坏通信,从而无法获得另一个更新),因此设备从一开始就优先考虑灵活的设备端操作。

答案1

第一个是固件更新,但其他都是驱动程序更新。我拥有几台计算机,似乎非 BIOS 设备不需要固件更新。

事实上并非如此相当真的。

您列表中的 BIOS 很特殊,因为它是唯一一个必须将固件存储在非易失性存储器中的系统。因为它需要在任何操作系统启动之前运行,所以任何更新必须以此方式存储。

这只在那些需要改变预启动行为的设备中很常见。除了主板/BIOS 之外,其他设备也参与启动过程:存储和网络(如果进行 PXE 启动)。但在当今的家庭环境中,这些通常集成在主板上,并且是主板固件包的一部分。

列出的其他设备可以有固件。它通常分为两部分:

  • 非易失性组件,要么是硬编码的(在硅片中),要么很少更新。这通常是非常基本或核心的功能,几乎永远不需要更改。它只需要支持最基本的预启动功能以及加载更新的易失性固件的能力。

  • 每次都由主机设备加载的易失性组件(作为驱动程序的一部分)。这里无需更新任何内容,因为除了基本的硬编码包之外,它们的固件在重启后永远不会保留。

    这种易失性固件的加载通常是静默的,您永远不会注意到它的发生。写入非易失性内存时不会出现明显的延迟,就像您可能在 BIOS 更新中看到的那样。几乎没有风险,因为重新启动会使一切恢复到干净安全的状态。

仅从您的列表中挑选两个例子:

  • GPU 确实具有某种程度的固件/微代码。事实上,它们通常具有所谓的“VBIOS”,其中包含几乎从未更新的非易失性固件,以及始终由操作系统加载的易失性固件。这在历史上给 Linux 驱动程序开发人员带来了相当大的麻烦,因为他们必须加载二进制固件块才能运行 GPU。例如Nouveau 必须克服重重困难才能从 Nvidia 那里获得这些 blob

  • WLAN 卡通常还需要加载易失性固件才能运行。这对于 Linux 来说又是一个问题,因为 Linux 必须加载这些二进制文件。例如以下是英特尔 WLAN 卡的固件版本

甚至您的 CPU 也具有某种程度的“固件”,即所谓的“微代码”。CPU 永远不会存储这些内容,每次重新启动时,CPU 都会恢复到您购买时的状态。BIOS(主板固件)可以将更新的微代码加载到 CPU 中。操作系统也可以这样做。您会在 Linux 上看到这些微代码包,它们作为芯片组驱动程序的一部分或通过 Windows 上的 Windows 更新提供。

相关内容