固件包:它们实际上是做什么的?

Dav*_*fer 8 virtual-machine centos firmware

在我的 CentOS 上,ayum update显示以下内容:

(6/38): iwl1000-firmware-39.31.5.1-62.el7_39.31.5.1-62.2.el7_5.noarch.drpm                                                                                                                                            
(7/38): iwl105-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(8/38): iwl135-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(9/38): iwl2000-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                            
(10/38): iwl2030-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                           
(11/38): iwl3160-firmware-22.0.7.0-62.el7_22.0.7.0-62.2.el7_5.noarch.drpm                                                                                                                                             
Run Code Online (Sandbox Code Playgroud)

等等。

这些是所谓的“固件包”。例如,让我们找到其中一些已安装:

rpm --query --all | grep firmware
Run Code Online (Sandbox Code Playgroud)

然后查询它的信息:

rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch
Run Code Online (Sandbox Code Playgroud)

我们得到:

Summary     : Firmware for Intel(R) Centrino Wireless-N 105 Series Adapters
Description :
This package contains the firmware required by the iwlagn driver
for Linux to support the iwl105 hardware.  Usage of the firmware
is subject to the terms and conditions contained inside the provided
LICENSE file. Please read it carefully.
Run Code Online (Sandbox Code Playgroud)

好吧好吧。

我什至没有那种硬件,因为这是一个虚拟机。

所以,问题:

固件包实际上有什么作用?

他们是“一次性”安装,运行不透明的可执行文件(立即?在下次启动时?)检查硬件是否存在,如果硬件存在,则将二进制代码泵入硬件的闪存中(可能在询问用户时;在 Windows 上)至少,硬件闪烁总是充满了弹出的 DOS 窗口、必须点击的 EULA 以及必须忍受的进度条),然后将软件包标记为“已安装”。

他们是否修改了 initramfs 以便内核模块加载二进制 blob 或在下次启动时发生某些事情?

Ste*_*itt 6

正如Anthony Geoghegan 所 提到的Linux 术语中的“固件”是什么?为什么有些司机仍然需要固件?提供有用的背景。

固件包是包含固件文件的包,包含旨在在系统中或连接到系统的设备上运行的代码的文件 - 常见示例包括 wifi 芯片组,如您的情况。他们不是一次性安装程序,他们不在乎硬件是否可用。如果存在相关硬件,它们提供的文件由相应的内核驱动程序使用:驱动程序将固件加载到连接到目标硬件的内存中,然后运行固件进行操作。

这些固件包与您正在考虑的固件安装程序无关,后者将固件更新加载到闪存中(只有在需要更新时才需要这样做)。这个过程确实很长,通常很复杂,而且似乎充满了危险(至少,如果你的印象是基于制造商的警告的话)。Linux 发行版中包含的固件包包含每次系统启动时都需要的固件,因为它被加载到易失性内存中。


Joh*_*éen 5

可加载固件通常不是写入设备闪存的“一次性”安装。固件加载到设备上的易失性存储器中,每次打开主机时都需要完成。在加载固件之前,设备无法运行。固件可以写入设备上的 RAM,在这种情况下,它包含设备上处理器的代码和数据,但它也可以是定义现场可编程逻辑阵列 (FPGA) 逻辑的位流,或某些两者的结合。

另一方面,闪存中的固件通常在设备上预编程,只有在制造商对固件进行更新时才需要重写。这通常是通过其他机制完成的,例如由用户运行的单独的可执行文件。

制造商想要使用 RAM 而不是闪存的原因有几个。首先,它可以设计单一版本的硬件,但同时提供多个版本的产品(例如,针对不同的市场领域)。如果产品预计会经常进行现场升级,那么通过这种方式处理固件升级可能比麻烦地创建一个程序来升级设备上的闪存更容易。这个程序应该有一个很好的用户界面,并且设计得尽可能用户友好,因为它通常是由产品的最终用户运行的。一些具有闪存存储的设备无论如何通常都会从 RAM 运行代码,并且它们只是在设备启动时将闪存的内容复制到 RAM,