
Qualche giorno fa Ubuntu mi ha mostrato una notifica che annunciava la disponibilità di un aggiornamento del firmware UEFI del mio portatile HP. Ci ho messo troppo a cliccarla, come spesso accade con le notifiche di GNOME, l’avviso si è spento non è stato immediato recuperarlo.
È stata l’occasione per approfondire come funziona oggi la gestione degli aggiornamenti firmware su Linux.
Breve ripasso
UEFI è il nuovo sistema di bootloader che ha sostituito BIOS. È il sistema che sovraintende tutte le operazioni di controllo preliminari prima di caricare il sistema operativo.
Io penso con tenerezza alla mia gioventù quando all’accensione avveniva questa cosa qui (l’avvio del BIOS)
Quello che accade all’accensione è spiegato nello schema sottostante:
Accensione
│
▼
Firmware UEFI
│
├── Inizializza CPU, RAM e periferiche
├── Legge le variabili di boot memorizzate nella NVRAM
└── Cerca un programma EFI nella partizione EFI (ESP)
│
▼
Bootloader
(GRUB, Windows Boot Manager, systemd-boot...)
│
▼
Kernel del sistema operativo
│
▼
Ubuntu / Windows
UEFI quindi inizializza la macchina e avvia il bootloader che quindi permette di scegliere quale partizione far partire (ogni partizione contiene un sistema operativo).
Il termine firmware indica un software che è strettamente legato a uno specifico dispositivo hardware e ne governa il funzionamento di base. Storicamente era memorizzato in memorie permanenti (ROM, PROM, EPROM), difficili o impossibili da modificare, da cui il nome firm (“stabile”, “quasi immutabile”), a metà strada tra hardware e software.
Ho lavorato per anni nell’automazione indutriale e ricordo che i programmi che scrivevamo per i robot venivano scritti su EPROM e quindi rappresentavano un vero e proprio firmware, anche se noi lo chiamavamo software. Di per sé il software non si modificava: veniva cancellata la EPROM (sotto una lampada UV) e veniva riscritta.
Oggi, in realtà, il firmware è quasi sempre memorizzato in memorie flash e può essere aggiornato. Ciò che lo distingue dal normale software non è tanto il supporto su cui risiede, quanto il suo ruolo.
Ad esempio:
- GRUB è un bootloader, ma non è un firmware. È un normale programma installato nella partizione EFI del disco e può essere sostituito o riconfigurato come qualsiasi altro software.
- Il firmware UEFI, invece, è memorizzato in un chip flash della scheda madre e viene eseguito immediatamente dopo l’accensione del computer, prima ancora che il disco venga letto. È lui che inizializza CPU, memoria, periferiche e individua quale bootloader avviare.
Il percorso di avvio è quindi, semplificando:
Accensione
│
▼
Firmware UEFI
│
▼
Bootloader (GRUB o Windows Boot Manager)
│
▼
Kernel del sistema operativo
│
▼
Ubuntu / Windows
Il primo controllo
Il comando fondamentale è:
fwupdmgr get-updates
Nel mio caso la sorpresa è stata che non era disponibile un nuovo BIOS. La versione del firmware del portatile (F.21) risultava già aggiornata.
L’unico aggiornamento disponibile riguardava invece la UEFI Secure Boot dbx.
Cos’è la dbx?
La dbx (Forbidden Signature Database) è uno dei database utilizzati da UEFI Secure Boot.
Non contiene i certificati autorizzati, bensì l’elenco dei bootloader e delle firme digitali che non devono più essere eseguiti perché ritenuti vulnerabili.
Quando vengono scoperte falle di sicurezza in un bootloader, Microsoft aggiorna questa blacklist. Attraverso il progetto LVFS (Linux Vendor Firmware Service), anche le distribuzioni Linux possono installare tali aggiornamenti utilizzando fwupd.
Nel mio caso il nuovo rilascio aggiungeva alla blacklist alcune versioni vulnerabili di bootloader utilizzati da diversi prodotti commerciali, oltre ad alcune versioni obsolete di shim distribuite in passato da alcune distribuzioni Linux.
Un falso “errore”
Durante l’ispezione dei dispositivi ho notato il messaggio:
Device firmware has been locked
Può sembrare un errore, ma in realtà è il comportamento normale.
Il chip SPI che contiene il firmware UEFI è protetto da scrittura mentre il sistema operativo è in esecuzione. L’aggiornamento non viene scritto direttamente: fwupd lo prepara, lo deposita nella partizione EFI e sarà il firmware stesso ad applicarlo durante il successivo riavvio.
L’aggiornamento
L’installazione si esegue semplicemente con:
sudo fwupdmgr update
Dopo il riavvio il sistema ha aggiornato automaticamente la dbx e Ubuntu è ripartito normalmente.
Anche il dual boot con Windows 11 non ha subito alcuna modifica: la configurazione di avvio, GRUB e le voci presenti nell’UEFI sono rimaste inalterate.
Un piccolo backup per tranquillità
Prima dell’aggiornamento ho salvato la partizione EFI con:
sudo dd if=/dev/nvme0n1p1 of=efi-backup.img bs=4M status=progress
L’immagine risultante occupava circa 300 MB, esattamente quanto la dimensione della partizione. È normale: dd esegue una copia settore per settore, includendo anche lo spazio libero.
Per un semplice backup dei file della partizione EFI sarebbe stato sufficiente anche un archivio tar, decisamente più compatto.
Considerazioni finali
Negli anni passati aggiornare il BIOS significava quasi sempre scaricare un programma Windows o preparare una chiavetta USB avviabile.
Oggi, grazie a LVFS e fwupd, molti produttori distribuiscono direttamente gli aggiornamenti firmware anche agli utenti Linux. Nel mio caso non è stato necessario uscire da Ubuntu: il sistema ha scaricato, verificato e installato l’aggiornamento in modo completamente trasparente.
È uno di quei miglioramenti dell’ecosistema Linux che passano quasi inosservati, ma che rendono l’esperienza quotidiana molto più semplice rispetto a qualche anno fa.
Bibliografia
- Firmware su Wikipedia
- With a little help from my friend ChatGPT (OpenAI).








Commenti recenti