Pacchetti firmware: cosa fanno effettivamente?


8

Sul mio CentOS, viene yum updatevisualizzato quanto segue:

(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                                                                                                                                             

eccetera.

Questi sono i cosiddetti "pacchetti firmware". Ad esempio, troviamo alcuni di essi installati:

rpm --query --all | grep firmware

e quindi interroga le sue informazioni:

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

e otteniamo:

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.

Ok bene.

Non ho nemmeno quel tipo di hardware, in quanto si tratta di una macchina virtuale.

Quindi, domanda:

Cosa fanno effettivamente i pacchetti firmware?

Sono installazioni "one-shot" che eseguono un eseguibile opaco (immediatamente? Al prossimo avvio?) Che controlla se esiste l'hardware, inserisce il codice binario nella memoria flash dell'hardware se l'hardware è presente (forse mentre lo chiede all'utente; su Windows a almeno, il flashing dell'hardware è sempre irto di finestre DOS che si aprono, di EULA su cui è necessario fare clic e di barre di avanzamento che devono essere sopportate), quindi contrassegna il pacchetto come "installato".

Modificano initramfs in modo che un BLOB binario sia caricato da un modulo del kernel o succeda qualcosa al prossimo avvio?



In Che cos'è il "firmware" nella terminologia Linux? , Scrive Stephen Kitt: Quindi i file del firmware non vengono utilizzati dal kernel, vengono caricati dal kernel su altri componenti hardware. Questo è anche ciò che rende vagamente accettabile avere software senza codice sorgente nei sistemi FLOSS: l'argomento dice che non è in esecuzione sulla CPU principale ma su un altro dispositivo. Snicker, snicker.
David Tonhofer,

Risposte:


4

Il firmware caricabile in genere non è installazioni "one-shot" scritte per il flash sul dispositivo. Il firmware viene caricato in un archivio volatile sul dispositivo e deve essere eseguito ogni volta che si accende il computer host. Il dispositivo non funziona prima del caricamento del firmware. Il firmware può essere scritto su RAM sul dispositivo, nel qual caso contiene codice e dati per il processore sul dispositivo, ma può anche essere un flusso di bit che definisce la logica di un array logico programmabile sul campo (FPGA), o alcuni combinazione di entrambi.

D'altro canto, il firmware nella memoria flash è in genere preprogrammato sui dispositivi e deve essere riscritto solo in caso di aggiornamento del firmware da parte del produttore. Questo in genere viene fatto tramite altri meccanismi, come un eseguibile separato che viene eseguito dall'utente.

Ci sono alcuni motivi per cui i produttori vogliono usare la RAM invece della memoria flash. Innanzitutto, consente di progettare un'unica versione dell'hardware, ma allo stesso tempo di fornire diverse versioni del prodotto (per diverse aree di mercato, ad esempio). Se si prevede che il prodotto venga aggiornato frequentemente sul campo, potrebbe essere più semplice gestire gli aggiornamenti del firmware in questo modo piuttosto che affrontare il problema della creazione di un programma per l'aggiornamento della memoria flash sul dispositivo. Questo programma dovrebbe avere un'interfaccia utente gradevole ed essere progettato per essere il più intuitivo possibile, poiché in genere è progettato per essere eseguito dall'utente finale del prodotto. Alcuni dispositivi con memoria flash spesso eseguono comunque il codice dalla RAM e copiano semplicemente il contenuto della memoria flash nella RAM all'avvio del dispositivo,


Se il firmware non viene caricato nella RAM dalla memoria flash, come viene caricato il firmware nella RAM dopo l'accensione del dispositivo?
Codebling

Se il dispositivo non è in grado di caricare autonomamente il firmware, l'host può memorizzarlo nella RAM del dispositivo, utilizzando il bus con il quale il dispositivo è collegato all'host. I bus tipici sono PCI e USB. È responsabilità del driver del dispositivo farlo. Il dispositivo non può essere completamente "morto" dopo l'accensione, deve contenere la logica per facilitare il caricamento del firmware.
Johan Myréen,

Ho dimenticato che stavamo parlando di periferiche qui, quindi sarà sempre collegato a un autobus. Ha senso!
Codebling

5

Come menziona Anthony Geoghegan , che cos'è il "firmware" nella terminologia Linux? e perché alcuni driver richiedono ancora il firmware? fornire uno sfondo utile.

I pacchetti firmware sono pacchetti che contengono file firmware, ovvero file che contengono codice destinato a essere eseguito su dispositivi collegati o collegati al sistema; esempi comuni includono chipset wifi, come nel tuo caso. Non sono installatori one-shot e non si preoccupano se l'hardware è disponibile. I file che rendono disponibili vengono utilizzati dai corrispondenti driver del kernel, se è presente l'hardware pertinente: i driver caricano il firmware nella memoria collegata all'hardware di destinazione, che quindi esegue il firmware per funzionare.

Questi pacchetti firmware non sono correlati ai programmi di installazione del firmware a cui stai pensando, che caricano gli aggiornamenti del firmware nella memoria flash (che deve essere eseguita solo quando è richiesto un aggiornamento). Tale processo è effettivamente lungo, spesso complesso e apparentemente pieno di pericoli (almeno, se si basano le proprie impressioni sugli avvisi del produttore). I pacchetti firmware inclusi nelle distribuzioni Linux contengono il firmware necessario ad ogni avvio del sistema, poiché viene caricato in memoria volatile.


2

Aggiungendo alle risposte già eccellenti.

I file del firmware, noti anche come BLOB binari proprietari, vengono caricati nel firmware almeno al momento del riavvio a freddo del dispositivo.

Il dispositivo è stato così concepito per ottenere il firmware nella RAM invece di avere una ROM + RAM per ridurre i costi di produzione. Ad esempio, hai alcuni chipset Wi-Fi Broadcom e chipset switch interni che funzionano in questo modo.

Affrontare l'altro punto della domanda sull'utilizzo dei file del firmware in una macchina virtuale.

Dato che hai a che fare con una macchina virtuale, non hai bisogno di file del firmware. Non verranno caricati da nessuna parte; molto meno file "firmware" Ethernet o wifi.

Allo stesso modo, considerando che il firmware non è necessario in un ambiente VM, è una grande idiosincrasia avere in Debian le dipendenze da un pacchetto di file firmware generico nel kernel Linux.


"È una grande idiosincrasia avere in Debian le dipendenze da un pacchetto di file del firmware generico nel kernel Linux" - almeno il firmware che è raccomandato dal pacchetto del kernel è davvero privo di DFSG ;-). (Ma hai ragione, entrambi i consigli - firmware-linux-freee irqbalance- sono inutili nella maggior parte delle distribuzioni al giorno d'oggi.)
Stephen Kitt

Corro sempre un playbook per disinstallare quella cruft dopo una serie di aggiornamenti del kernel
Rui F Ribeiro,

1
Puoi anche configurare in aptmodo che non installi i consigli di default ...
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.