Centos

韌體包:它們實際上是做什麼的?

  • May 12, 2022

在我的 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                                                                                                                                             

等等

這些是所謂的“韌體包”。例如,讓我們找到其中一些已安裝的:

rpm --query --all | grep firmware

然後查詢它的資訊:

rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch

我們得到:

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.

好吧好吧。

我什至沒有那種硬體,因為這是一個虛擬機。

所以,問題:

韌體包的實際作用是什麼?

他們是“一次性”安裝執行不透明的執行檔(立即?在下次啟動時?),它檢查硬體是否存在,如果硬體存在,將二進制程式碼泵入硬體的快閃記憶體(可能在詢問使用者時;在 Windows 上至少,硬體刷新總是充滿了彈出的 DOS 視窗、必須點擊通過的 EULA 和必須忍受的進度條),然後將包標記為“已安裝”。

他們是否修改了 initramfs 以便核心模組載入二進制 blob 或在下次啟動時發生某些事情?

可載入韌體通常不是寫入設備快閃記憶體的“一次性”安裝。韌體被載入到設備上的易失性儲存器中,每次打開主機時都需要執行此操作。在載入韌體之前,設備無法執行。韌體可以寫入設備上的 RAM,在這種情況下,它包含設備上處理器的程式碼和數據,但它也可以是定義現場可程式邏輯陣列 (FPGA) 邏輯的位流,或者一些兩者的結合。

另一方面,快閃記憶體中的韌體通常在設備上進行預程式,並且只有在製造商對韌體進行更新時才需要重寫。這通常是通過其他機製完成的,例如由使用者執行的單獨的執行檔。

製造商想要使用 RAM 而不是快閃記憶體的原因有幾個。首先,它可以設計單一版本的硬體,但同時提供多個版本的產品(例如,針對不同的市場領域)。如果產品預計會頻繁進行現場升級,那麼通過這種方式處理韌體升級可能比為升級設備上的快閃記憶體創建程序的麻煩更容易。這個程序應該有一個漂亮的使用者界面,並且設計得盡可能的使用者友好,因為它通常是由產品的最終使用者執行的。一些具有快閃記憶體儲存的設備通常會從 RAM 執行程式碼,並且它們只是在設備啟動時將快閃記憶體的內容複製到 RAM,

正如Anthony Geoghegan 所說Linux 術語中的“韌體”是什麼?為什麼有些驅動程序仍然需要韌體?提供有用的背景。

韌體包是包含韌體文件的包,包含旨在在系統中或連接到系統的設備上執行的程式碼的文件 - 常見範例包括 wifi 晶片組,如您的情況。他們不是一次性安裝人員,他們不關心硬體是否可用。如果存在相關硬體,則它們提供的文件由相應的核心驅動程序使用:驅動程序將韌體載入到連接到目標硬體的記憶體中,然後執行韌體以進行操作。

這些韌體包與您正在考慮的韌體安裝程序無關,後者將韌體更新載入到快閃記憶體中(僅在需要更新時才需要完成)。這個過程確實很漫長,通常很複雜,而且似乎充滿了危險(至少,如果你的印像是基於製造商的警告的話)。Linux 發行版中包含的韌體包包含每次系統啟動時都需要的韌體,因為它被載入到易失性記憶體中。

引用自:https://unix.stackexchange.com/questions/455137