Rigenerare e mantenere in vita hardware storico come il leggendario Lenovo ThinkPad T400 è sempre una grande soddisfazione.
Tuttavia, quando arriva il momento di aggiornare il BIOS di queste vecchie macchine, ci si scontra con i limiti del passato: gli aggiornamenti non sono installabili comodamente tramite Linux Vendor Firmware Service e/o col comando `fwupd` da terminale, ma devi attrezzarti con gli strumenti forniti dal produttore, molto spesso degli eseguibili Windows – se non addirittura DOS – o se si è fortunati con delle immagini CD avviabili.
Se non hai un masterizzatore CD a portata di mano, se il BIOS non riconosce le moderne chiavette USB o se la tua batteria è morta da anni, la cosa potrebbe sembrare impossibile.
In PCOfficina però non ci arrendiamo tanto facilmente. In questa guida/racconto, vedremo come utilizzare GRUB e Memdisk per caricare l’aggiornamento direttamente dalla RAM, e come hackerare il processo di avvio DOS per forzare il flash del BIOS ignorando il controllo della batteria.
ATTENZIONE: Aggiornare il BIOS forzando il blocco della batteria è rischioso. Se la corrente viene a mancare durante la scrittura della ROM, la scheda madre diventerà inutilizzabile (brick). Assicurati che il tuo alimentatore sia collegato saldamente e che la rete elettrica sia stabile.
Chi ben comincia…
Quale appassionato di Thinkpad, quando ci è stato donato questo T400 non vedevo l’ora di metterci le mani per vedere cosa ancora potesse offrire.
La macchina, lanciata sul mercato a Luglio 2008, monta un processore Intel Core2 Duo P8400, BIOS non UEFI, due slot per ram DDR2, disco 2.5” Sata, lettore CD, scheda video dedicata ATI Mobility Radeon HD 3470 (256 MB), porta Gigabit Ethernet, porta modem, WiFi, slot di expansione PCMCIA ExpressCard (se vi appassionano tutti i dettagli, qui potete trovare le specifiche complete della macchina).
Dopo aver fatto un doveroso test della RAM con memtest86+ ho provato ad avviare il PC col suo disco interno originale, ma non c’è stato verso di far avviare Windows Vista che era lì installato. Non avendo interesse a mantenere tale sistema operativo, ho sostituito il disco rotativo esistente con un disco SSD Sata, così da ridare brio al PC ed ho installato Linux Mint 22.3 senza alcun problema.
Terminata l’installazione mi è però venuto in mente che, già che ci stavo lavorando, poteva essere una buona idea aggiornare anche il BIOS ed i vari firmware.
Nel panorama attuale, trovare ancora facilmente scaricabili dal sito del produttore firmware e driver per modelli ormai a fine vita è cosa davvero rara: brava Lenovo!
Il BIOS per questo specifico modello è disponibile in due formati: eseguibile per Windows ed il file immagine ISO. Per l’epoca questa seconda opzione – che composta da un ambiente PC-DOS – era l’ideale per aggiornare il BIOS indipendentemente da quale sistema operativo si avesse installato. Ma il 2026 non è il 2008, di CD non ne ho e anche se ne avessi, di usarne uno solo per scrivere solo 34Mb mi sembrava uno spreco.
Mi sono detto: proviamo a vedere se riesco a farlo partire da una pennetta USB, in fondo, l’installazione di Linux era avvenuta con successo… Ho scaricato la iso contenente l’aggiornamento sul Lenovo stesso ed ho iniziato a fare prove.
El Torito a la corrida del boot
Dato che la ISO risultava avviabile:
$ file 7uuj49uc.iso
7uuj49uc.iso: ISO 9660 CD-ROM filesystem data '7uuj49us' (bootable)il primo tentativo è stato quello di scrivere sulla chiavetta /dev/sda la iso 7uuj49uc.iso così com’è:
$ sudo dd if=7uuj49uc.iso of=/dev/sda status=progressEsito: fallimentare. A schermo appare la scritta “no operating system available” e nulla più. Tra l’altro, anche provando ad accedere al contenuto della pennetta, questa risultava vuota…
Cerco su internet, e mi viene spiegato che per rendere bootabile un CD/DVD/BlueRay Disk, si usa lo standard El Torito, che altro non è che un’estensione al filesystem ISO 9660, che è il filesystem usato sui CD. I PC-BIOS si aspettano determinate cose per fare boot da un CD, mentre se ne aspettano altre – tipo una tabella delle partizioni in formato Master Boot Record (MBR) – per fare boot da pennette usb o dischi.
Come mai allora la ISO della vostra distro Linux basta scriverla su pennetta USB ed il sistema parte? Perchè quelle sono immagini ISO un po’ speciali, che hanno sia El Torito (metti caso tu masterizzi tale ISO su un CD) che l’MBR (nel caso in cui tu scriva la ISO su drive USB) e che per l’appunto si chiamano ibride, come la ISO di Linux Mint:
$ file linuxmint-22.3-PCO-cinnamon-64bit.iso
linuxmint-22.3-PCO-cinnamon-64bit.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'Linux Mint 22.3 PCO' (bootable)Se vi ricordate, la iso 7uuj49uc.iso non riportava di avere alcun MBR, quindi non potrà avviarsi se scritta su drive USB così com’è. Ma possiamo estrarre l’immagine avviabile presente nel file ISO in formato El Torito, usando il comodo tool geteltorito:
$ sudo apt update
$ sudo apt install geteltorito
$ geteltorito -o 7uuj49uc.img 7uuj49uc.iso
$ file 7uuj49uc.img
7uuj49uc.img: DOS/MBR boot sector; partition 1 : ID=0x4, active, start-CHS (0x0,1,1), end-CHS (0x1f,63,32), startsector 32, 65504 sectorsAbbiamo estratto l’immagine avviabile dall’immagine ISO, ora non ci resta che scriverla sulla chiavetta USB ed avviarla, giusto?$ sudo dd if=7uuj49uc.img of=/dev/sda status=progress
Questa volta, se reinserisco la chiavetta nel PC, vedo l’effettivo contenuto del volume:
-rwxr-xr-x. 1 root root 58 4 apr 2008 AUTOEXEC.BAT
-rwxr-xr-x. 1 root root 54K 31 dic 1993 COMMAND.COM
-rwxr-xr-x. 1 root root 123 15 apr 2009 CONFIG.SYS
drwxr-xr-x. 4 root root 2,0K 17 ott 2012 FLASH
-rwxr-xr-x. 1 root root 14K 18 nov 1994 HIMEM.SYS
-r-xr-xr-x. 1 root root 40K 31 dic 1993 IBMBIO.COM
-r-xr-xr-x. 1 root root 37K 31 dic 1993 IBMDOS.COM
-rwxr-xr-x. 1 root root 13K 24 apr 1999 RAMDRIVE.SYS
-rwxr-xr-x. 1 root root 9,2K 31 dic 1993 WINA20.386Quelli meno giovani tra noi lo avranno già riconosciuto: è il sistema operativo DOS!
Con un pizzico di nostalgia, riavvio il Thinkpad, premo F12 per selezionare l’avvio da dispositivo USB e…
No operating system available
Schermata nera e solo questo messaggio a schermo.
Memdisk, l’eroe di cui non sapevamo di aver bisogno
Forse è la pennetta USB troppo moderna, forse… Non importa, non ho intenzione di impantanarmi su sta faccenda, che sembra essere comune tra chi ha a che fare con PC-BIOS, schizzinosi riguardo al Master Boot Record (MBR) delle unità moderne.
In questo caso una dritta arriva dall’AI, che suggerisce di bypassare del tutto l’hardware esterno usando memdisk, una utility di Syslinux che permette al bootloader GRUB di caricare un’intera immagine ISO direttamente nella RAM e avviarla come se fosse un disco fisico.
Noi GRUB lo abbiamo già, visto che Linux è già stato installato sul PC. La configurazione è abbastanza semplice:
1. Installazione di Syslinux Sul sistema Linux, installo il pacchetto che contiene memdisk:
$ sudo apt install syslinux-common syslinux2. Preparazione dei file di boot Ora copio l’eseguibile memdisk e la ISO col BIOS nella directory /boot del sistema:
$ sudo cp /usr/lib/syslinux/memdisk /boot/
$ sudo cp 7uuj49uc.iso /boot/3. Creazione della voce in GRUB Devo dire al bootloader come avviare questa immagine. Modifico il file delle voci personalizzate di GRUB:
$ sudo nano /etc/grub.d/40_customAggiungo queste righe in fondo al file:
menuentry "ThinkPad BIOS Update" {
linux16 /boot/memdisk iso
initrd16 /boot/7uuj49uc.iso
}(Nota: se hai una partizione /boot separata, i percorsi dovranno essere /memdisk e /).7uuj49uc.iso
4. Mostrare GRUB all’avvio All’avvio voglio vedere il menù di GRUB. Per fare ciò modifico le impostazioni di default di grub:
$ sudo nano /etc/default/grubDa:
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0a:
GRUB_TIMEOUT_STYLE=countdown
GRUB_TIMEOUT=10Aggiorno GRUB per applicare le modifiche:
$ sudo update-grubNo Battery, No Party
Al riavvio, quando vedo il countdown, premo ESC o un altro tasto e dal menù di GRUB che mi appare, seleziono "ThinkPad BIOS Update". Si avvierà quindi l’ambiente DOS (PC-DOS per la precisione) ed il tool di Lenovo. Ma qui sorge il secondo problema…
Il PC è vecchio e la batteria completamente morta. Quando andiamo ad aggiornare il BIOS, stiamo scrivendo su un chip il primo software che viene avviato all’accensione del PC: se qualcosa disturba o interrompe tale operazione, non riusciremo più ad accendere il PC. Per ovviare a possibili spegnimenti causati da problemi di corrente, il programma di aggiornamento del BIOS verifica che la batteria del laptop sia collegata e carica.
Ma la mia batteria è morta, e non ho interesse nel sostituirla. Lo script rileva che la batteria è scarica e correttamente mi impedisce di procedere con l’aggiornamento del BIOS. Se provo a premere F3 per uscire nel prompt di DOS, lo script è programmato per forzare un riavvio immediato (hard reboot), impedendomi di restare nell’ambiente DOS.
Il motivo? Il tool di Lenovo che c’è a schermo è lanciato da un file invocato da DOS all’avvio, chiamato AUTOEXEC.BAT. Se voglio provare a forzare la scrittura del BIOS, devo impedire a DOS di eseguire l’avvio del tool Lenovo.
Come fare:
- Riavvio il PC e seleziona nuovamente la voce in GRUB.
- Non appena inizia il caricamento del PC DOS (schermo nero), inizio a premere ripetutamente il tasto
F8. - Questo attiva la modalità interattiva di DOS. Il sistema ti chiederà conferma per ogni singolo comando di avvio (
[Y/N]). - Premi
Y(Yes) per i driver essenziali (come la memoria) e a tutte le altre domande. - Quando mi viene chiesto di eseguire
AUTOEXEC.BAT, premoN(No).
Obiettivo raggiunto, ho impedito l’avvio del tool Lenovo! E dopo tanti anni, mi trovo di nuovo davanti allo spartano prompt dei comandi di DOS (es. C:\>).
Artigiani del BIOS
Ora che ho il pieno controllo, possiamo lanciare il programma di scrittura del BIOS (“flasher”) manualmente, passandogli dei parametri speciali (flag) che dicono al software di ignorare lo stato della batteria.
Sul ThinkPad T400, il flasher è phlash16.exe (il tool di Phoenix Technologies) e il file del BIOS vero e proprio ha l’estensione .FL1.
Leggendo le note di rilascio per questa versione di BIOS viene spiegato che questa ISO ha due BIOS distinti a seconda delle iniziali del proprio BIOS ID: 7U (quello che ho io) o 7V. E infatti nella directory FLASH troviamo tutti i tool per operare e due distinte directory con i due distinti firmware:
$ ls -l FLASH
totale 988
-r-xr-xr-x. 1 root root 4096 12 dic 2011 06FD.PAT
-r-xr-xr-x. 1 root root 4096 12 dic 2011 10671.PAT
-r-xr-xr-x. 1 root root 4096 12 dic 2011 10674.PAT
-r-xr-xr-x. 1 root root 4096 12 dic 2011 10676.PAT
-r-xr-xr-x. 1 root root 8192 12 dic 2011 1067A.PAT
drwxr-xr-x. 2 root root 2048 17 ott 2012 7UET94WW
drwxr-xr-x. 2 root root 2048 17 ott 2012 7VET95WW
-r-xr-xr-x. 1 root root 48 12 dic 2011 CEIMAIN.BIN
-r-xr-xr-x. 1 root root 697 12 dic 2011 CHKBMP.EXE
-r-xr-xr-x. 1 root root 7376 12 dic 2011 COMMAND.COM
-r-xr-xr-x. 1 root root 307200 12 dic 2011 FI.EXE
-r-xr-xr-x. 1 root root 6855 12 dic 2011 FINDRAMD.EXE
-r-xr-xr-x. 1 root root 29672 12 dic 2011 FLASH2.EXE
-r-xr-xr-x. 1 root root 356352 12 dic 2011 FP.EXE
-r-xr-xr-x. 1 root root 26 12 dic 2011 lcreflsh.bat
-r-xr-xr-x. 1 root root 271 12 dic 2011 LOGO.BAT
-r-xr-xr-x. 1 root root 254 12 dic 2011 LOGO.SCR
-r-xr-xr-x. 1 root root 155587 12 dic 2011 PHLASH16.EXE
-r-xr-xr-x. 1 root root 7059 12 dic 2011 README.TXT
-r-xr-xr-x. 1 root root 9451 12 dic 2011 ROM2MOD.EXE
-r-xr-xr-x. 1 root root 4550 12 dic 2011 TPCHKS.EXE
-r-xr-xr-x. 1 root root 41312 12 dic 2011 UPDTFLSH.EXE
-r-xr-xr-x. 1 root root 7230 12 dic 2011 UPDTMN.EXE
-r-xr-xr-x. 1 root root 12501 12 dic 2011 USERINT.EXE
-r-xr-xr-x. 1 root root 15274 12 dic 2011 UTILINFO.EXE
$ ls -l FLASH/7UET94WW
totale 8266
-rwxr-xr-x. 1 root root 4214279 17 ott 2012 '$01B8200.FL1'
-rwxr-xr-x. 1 root root 4240490 19 nov 2009 '$01B8200.FL2'
-rwxr-xr-x. 1 root root 163 18 nov 2010 06fd.hsh
-rwxr-xr-x. 1 root root 163 19 set 2008 10674.hsh
-rwxr-xr-x. 1 root root 163 12 dic 2011 10676.hsh
-rwxr-xr-x. 1 root root 163 12 dic 2011 1067a.hshQuesti comandi sono stati dati da Linux, non dentro DOS: data la dimensione dei font ed i vari limiti, vi consiglio di studiare il contenuto dell’ambiente PC-DOS su Linux, prima di avviarlo per effettuare il flash del BIOS, e di scrivervi tutti i comandi da eseguire.
Per effettuare il Flash del BIOS manualmente, mi sposto dentro la directory FLASH:
cd FLASHOra lancio il flasher con i flag di bypass ed il percorso al firmware del BIOS presente nel file .FL1 (se dovessi avere dei dubbi, col comando dir posso vedere il contenuto di una directory):
phlash16.exe /X /S 7UET94WW\$01B8200.FL1Perché questi parametri?
/Xe/S: In ambiente Phoenix BIOS, questi flag forzano il software a procedere silenziosamente o a disabilitare controlli ambientali specifici (come, appunto, la verifica dell’alimentazione di backup).
A questo punto, parte il programma di flash e viene mostrato questo a schermo:
Non toccare assolutamente nulla e non scollegare il cavo di alimentazione. Al termine, il sistema mi conferma con un rassicurante messaggio in verde che è andato tutto bene e che è pronto per riavviarsi.
Premo un tasto, il PC si riavvia ed appena appare di nuovo il logo Lenovo, premo F1 per entrate nel BIOS e verifico che la nuova versione è stata installata con successo!
Conclusioni
Non sempre quello che doveva essere una passeggiata si rivela tale, ma che soddisfazione imparare nuovi trick, superando i limiti dei vecchi PC.
Lascio all’arguto lettore la rimozione delle configurazioni di GRUB: basterà fare a ritroso le configurazioni della sezione su Memdisk.
Variante fuori tempo massimo
Dopo aver completato l’attività, mi è tornato in mente che avevo già visto da qualche parte MEMDISK…
È una delle opzioni di caricamento delle ISO da parte di Ventoy, il pratico tool che ci permette di avviare più ISO dalla stessa unità USB!
Ho fatto una prova e la ISO di aggiornamento del BIOS Lenovo, col suo PC-DOS, viene perfettamente caricata avviando il PC con Ventoy.
Sarebbe stato più veloce? Sicuramente! Ma la soddisfazione di aver imparato come si fà, non ha prezzo. È però sicuramente utile nel caso in cui non si ha già installato Linux sul PC dove si vuole aggiornare il BIOS.
Happy flashing, e mi raccomando, non brickate 😉
Leggi il contenuto originale su PCOfficina
ATTENZIONE: Aggiornare il BIOS forzando il blocco della batteria è rischioso. Se la corrente viene a mancare durante la scrittura della ROM, la scheda madre diventerà inutilizzabile (brick). Assicurati che il tuo alimentatore sia collegato saldamente e che la rete elettrica sia stabile.