Coreboot è un firmware libero e opensource che mira ad essere un sostituto veloce, sicuro e flessibile di UEFI. Questa guida mostra come installare coreboot con un payload SeaBIOS sui dispositivi supportati, la gestione degli strumenti dello spazio utente e l’uso di flashrom.
- Hardware supportato
- Le basi
- Flasher
- SPI flash
- flashrom
- flags USE per sys-apps/flashrom Utility per leggere, scrivere, cancellare e verificare i chip flash ROM
- Strumenti per il dump e la compilazione
- Dati di configurazione Intel ME e Gigabit Ethernet
- Configurazione e compilazione di Coreboot
- Configurazione generale
- Mainboard
- Chipset
- Devices
- Driver generici
- Security
- Console
- Tabelle di sistema
- Payloads
- Debuging
- Compilazione
- Flashing coreboot.rom
- Flashing via interno
- Risoluzione dei problemi
- Coreboot non si avvia (Broken build)
- Non si avvia più nulla (aka SPI chip bricked)
Hardware supportato
Ci sono diversi tipi di architetture e hardware supportati. La tabella completamente aggiornata è disponibile al seguente link. Nella tabella sottostante ci sono alcuni dispositivi ben supportati che sono stati rilasciati più o meno recentemente. Se si sta usando un dispositivo più vecchio, potrebbe essere possibile rimuovere tutti i blob binari proprietari. Per questo, usate la guida libreboot.
Hardware | Supported | Blob Free | Native RAM Init | Native Graphics Init | Flashable via Hardware | Flashable via Software | Desoldering necessario |
---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | Sì / Attualmente rotto | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | Sì |
Lenovo Thinkpad T430s | Sì / Attualmente rotto | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | Sì |
Lenovo Thinkpad X230 | Sì | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad T420s | Sì | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad T420 | No / WIP | No | Sì | Parziale | Sì | Parziale / non con OEM BIOS | No |
Lenovo Thinkpad T520 | Sì | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad X220 | Sì | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad X220 | Sì | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad T410 | No / WIP | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad T510 | No / WIP | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Lenovo Thinkpad X201 | Sì / Attualmente rotto | No | Sì | Parziale | Sì | Parziale / non con BIOS OEM | No |
Apple Macbook Air 4,2 | Sì | No | Sì | No | Sì | Parziale / non con OEM BIOS | No |
Le basi
In generale, il chip flash deve essere trovato sulla scheda dell’hardware selezionato. Questo è importante, poiché il fornitore di solito blocca il chip flash tramite il soft lockdown. Le guide per localizzare il chip si trovano generalmente sul wiki di coreboot. Questa guida presuppone che il dispositivo contenga un chip flash SPI, che richiede una clip per connettersi al flasher.
Flasher
Come flasher, un Raspberry Pi può essere facilmente utilizzato. Qualsiasi modello e revisione andrà bene, ma siate avvertiti che i primi non hanno abbastanza RAM per compilare coreboot da soli. Se usi uno di questi, assicurati di copiare il dump del chip flash su un computer più potente. Se il chip flash è basato su SPI, assicurati di ottenere un testclip Pomona SOIC-8 per 15 sterline. Ma ci sono anche molti altri programmatori. Assicurati di avere anche dei cavi di debug.
SPI flash
Ci sono diversi tipi di chip SPI (elenco). Il pacchetto più comune per questi chip è SOIC-8 che può essere flashato tramite testclip. A volte questi chip sono in un pacchetto WSON-8; nel qual caso il chip WSON-8 deve essere dissaldato, e risaldato con un nuovo SOIC-8. Se hai bisogno di aiuto con le saldature chiedi agli hackerspace vicino a te. I chip SPI sono comuni in dimensioni da 2MB a 16MB. Spesso i venditori saldano due chip per risparmiare denaro.
flashrom
flags USE per sys-apps/flashrom Utility per leggere, scrivere, cancellare e verificare i chip flash ROM
atahpt |
Supporto controller ATA/RAID Highpoint (HPT) |
atapromise |
Supporto per Promise PDC2026x (FastTrak/Ultra) |
atavia |
Supporto per controller SATA VIA VT6421A |
buspirate-spi |
Abilita Bus Pirate SPI |
ch341a-spi |
Abilita il programmatore SPI WCH CH341A |
dediprog |
Supporto Dediprog SF100 |
developerbox-spi |
Abilita supporto Devloperbox SPI recovery |
digilent-spi |
Abilita supporto per scheda di sviluppo Digilent iCEblink40 |
drkaiser |
Abilita programmatore Dr. Kaiser programmatore |
dummy |
Abilita il dummy tracing |
ene-lpc |
Abilita ENE LPC interfaccia controller tastiera |
ft2232-spi |
Abilita programmatore ftdi, flashing tramite interfaccia USB FTDI/SPI |
gfxnvidia |
Abilita programmatore NVIDIA |
internal |
Abilita supporto interno/su scheda |
internal-dmi |
Abilita decodifica DMI interna piuttosto che usare sys-apps/dmidecode |
it8212 |
Supporto per controller ITE IT8212F ATA/RAID |
jlink-spi |
Supporto per SEGGER J-Link e dispositivi compatibili |
linux-mtd |
Abilita il supporto per i dispositivi flash SPI di Linux mtd |
linux-spi |
Abilita il supporto per l’interfaccia Linux userspace spidev |
lspcon-i2c-spi |
Abilita il supporto per Parade lspcon USB-C a HDMI |
mec1308 |
Abilita il supporto per il controller embedded Microchip MEC1308 |
mstarddc-spi |
Supporto per le flash ROM SPI accessibili tramite DDC nei |
nic3com |
Abilita il programmatore NIC di 3Com |
nicintel |
Supporto per NIC Intel |
nicintel-eeprom |
Supporto per EEPROM su schede di rete Intel Gigabit |
nicintel-spi |
Supporto per SPI su NIC Intel |
nicnatsemi |
Supporto per National Semiconductor NICs |
nicrealtek |
Supporto per Realtek NICs |
ogp-spi |
Abilita il supporto per OGP (Open Graphics Project) SPI flashing |
pickit2-spi |
SUpport for SPI flash ROMs accessible via Microchip PICkit2 |
pony-spi |
Enable support for SI-Prog come hardware da Lancos |
raiden-debug-spi |
Abilita la scheda di debug ChromiumOS Servo DUT |
rayer-spi |
Supporto hardware RayeR SPIPGM |
realtek-mst-i2c-spi |
Abilita il supporto per Realtek MultiStream Transport (MST) |
satamv |
Abilita programmatore per controller Marvell SATA |
satasii |
Abilita programmatore per controller SiI SATA |
serprog |
Abilita programmatore Serial Flasher |
static |
!non impostarlo durante il bootstrap! Fa sì che i binari siano collegati staticamente invece che dinamicamente |
stlinkv3-spi |
Abilita il programmatore SPI usando STLINK-V3 |
tools |
Installa ich_descriptor_tool, uno strumento per leggere le immagini SPI-flash in modalità descrittore per i chipset Intel |
usbblaster-spi |
Abilita il supporto per i dongle Altera USB-Blaster |
wiki |
Abilita le informazioni wiki, come i dispositivi supportati ecc. |
flashrom è più comunemente usato per scaricare e scrivere sui chip flash. Deve essere installato sul flasher, o sulla macchina a cui il flasher è collegato.
È utile installare flashrom sul sistema su cui verrà eseguito il flash, poiché una volta che coreboot è stato flashato inizialmente, può essere riflashato internamente, senza smontaggio o uso di un flasher.
root #
emerge --ask sys-apps/flashrom
Ora, la macchina deve essere smontata. Seguite il manuale, o una guida online fino a quando il chip flash è accessibile, e poi attaccate la clip e collegatela al flasher.
Assicuratevi che TUTTE le fonti di alimentazione siano scollegate dalla macchina, tranne la batteria CMOS. È possibile friggere le schede madri se sono collegate mentre vengono flashate.
Una volta che il chip flash è collegato a un flasher, usate flashrom per scaricare il contenuto del chip flash.
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash.bin
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash2.bin
root #
diff flash.bin flash2.bin
È importante fare più dump, nel caso ci sia un errore di connessione. Una volta ottenuto un dump corretto, è sicuro disconnettere il flasher per ora, se lo si desidera. Ricordate, se in esecuzione su un Raspberry Pi v1, non avrà abbastanza RAM per compilare, quindi a questo punto il dump dovrebbe essere trasferito su una macchina diversa. E’ possibile usare il computer da cui è stato scaricato il chip flash, anche se questo richiederà un riassemblaggio e un altro disassemblaggio più tardi.
Strumenti per il dump e la compilazione
Ora, il repository git di coreboot deve essere clonato in una directory di lavoro, poiché contiene gli strumenti necessari per proseguire. Devono anche essere create le directory per il produttore e il modello specifici.
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
Sostituire <manufacturer> e <model> rispettivamente con il proprio produttore e modello (es.g. lenovo/x220).
Il prossimo passo è quello di estrarre le regioni del flash dump. Le regioni sono simili alle partizioni, e sono un chip flash contiene un descrittore flash che può essere visto come una tabella delle partizioni per la flash SPI con alcune proprietà aggiuntive. Questo descrittore viene letto da un programma chiamato ifdtool, che verrà utilizzato per ottenere le singole partizioni.
Prima, ifdtool deve essere compilato. Il suo sorgente è contenuto sotto quello di coreboot, quindi fai un cd nella directory in cui è stato clonato coreboot.
user $
cd util/ifdtool
user $
make
È una buona idea installare globalmente, ma non è necessario.
root #
make install
Poi, torna indietro a dove si trova flash.bin.
user $
ifdtool -x flash.bin
Questo stamperà una tabella delle partizioni, ed estrarrà alcuni blob. Una tabella delle partizioni standard può assomigliare a questa:
Regione | Descrizione | Regione iniziale | Regione finale |
---|---|---|---|
0 | Descrittore flash | 0x00000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fffff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Dati piattaforma | inutilizzato | inutilizzato |
Dati di configurazione Intel ME e Gigabit Ethernet
Nota come la tabella precedente contiene ME e GbE. Questi sono blob binari che inizializzano parti del computer (in questo caso, Intel Management Engine e Gigabit Ethernet). Sui dispositivi più vecchi, questi possono essere tranquillamente rimossi con libreboot, ma su Sandy Bridge e più recenti, sono necessari affinché il computer funzioni correttamente. Poiché Intel ME è richiesto su queste schede, deve essere estratto. Tuttavia, coreboot può ridurne drasticamente la dimensione, rimuovendo il suo accesso alla rete e alle risorse di sistema. Questo è raccomandato, poiché non solo migliora la sicurezza, ma lascia anche più spazio sul chip flash per altri payloads. I dati di configurazione Gigabit Ethernet sono specifici per ogni macchina, e come tali, devono anche essere estratti dal chip flash.
A questo punto, la directory di lavoro dovrebbe contenere quattro nuovi file, che seguono il formato flashregion_*.bin. Questi dovrebbero corrispondere alla tabella che è stata stampata. Come menzionato in precedenza, il descrittore, Intel ME e i blob GbE sono necessari. Rinominali rispettivamente in descriptor.bin, me.bin e gbe.bin, e copiali in coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; la directory creata in precedenza.
Configurazione e compilazione di Coreboot
Ora, coreboot deve essere configurato per la macchina specifica. È meglio controllare la pagina wiki di coreboot per il dato dispositivo, nel caso ci siano determinati requisiti. Come tale, questa pagina cercherà di dettagliare solo le impostazioni che devono essere impostate nella maggior parte delle installazioni. Questo non può essere garantito, e alcune impostazioni possono causare conflitti con la macchina.
Prima di tutto, devi inserire la configurazione. Questo viene eseguito in modo simile alla configurazione di un kernel.
user $
make nconfig
In alternativa, si potrebbe usare menuconfig, o anche modificare il file di configurazione manualmente (una volta che è stato generato da nconfig/menuconfig).
Configurazione generale
Consiglio di abilitare quanto segue:
- Usa CMOS per i valori di configurazione
- Comprimi il ramstage con LZMA
- Include il file coreboot .config nell’immagine ROM
- Crea una tabella di timestamp raccolta durante il boot
- Costruisci il ramstage per essere rilocabile nello spazio di indirizzi a 32 bit.
Per un dispositivo Sandy Bridge o successivo:
- Consenti l’uso di repository solo binari
E se hai precedentemente compilato coreboot, puoi ridurre ulteriormente i tempi di compilazione abilitando:
- Aggiorna l’immagine coreboot.rom esistente
Mainboard
Qui, il fornitore e il modello devono essere selezionati. Assicurati di inserire il modello esatto, se sono disponibili derivati (per esempio X220/X220t). Anche la dimensione del chip ROM dovrebbe essere selezionata. Questo dovrebbe essere stato emesso da flashrom, ma se non lo è può essere determinato controllando il filesize di flash.bin.
Chipset
Questo menu contiene opzioni specifiche del chipset, e anche le posizioni per i blob binari estratti in precedenza. Raccomando di abilitare:
- Enable VMX for virtualization
- Set lock bit after configuring VMX
- Beep on fatal error
- Flash LEDs on fatal error
Queste permettono un debugging più facile se hai un flash cattivo. Possono essere disabilitati una volta creata una configurazione funzionante nota.
In seguito, i percorsi devono essere forniti sotto Intel Firmware. Abilita queste opzioni:
- Aggiungi file Intel descriptor.bin
- Aggiungi firmware Intel ME/TXE
- Strip down del firmware Intel ME/TXE
- Aggiungi firmware gigabit ethernet
Opzioni per percorsi dovrebbero ora apparire. Dovrebbero corrispondere ai nomi usati in precedenza, ma se non è così, correggeteli in modo che lo facciano.
Devices
Questa area riguarda in gran parte la grafica, specialmente nel contesto dei portatili. Personalmente, ho l’inizializzazione grafica impostata su ‘Use native graphics init’, e Display/Framebuffer Mode impostato su ‘Linear “high-resolution” framebuffer’. Il resto di queste opzioni dovrebbe essere già impostato per la macchina. Se il dispositivo specifico richiede un’immagine BIOS VGA, seguite il wiki di coreboot.
Driver generici
Io spesso abilito:
- PS/2 keyboard init
Se il dispositivo ha una scheda Intel PCIe WiFi, abilita l’opzione
- Supporta gli adattatori Intel PCI-e WiFi
Security
Lascio spesso questo da solo, poiché attualmente contiene solo opzioni di Verified Boot, ma se è richiesto il supporto per questo, abilitalo.
Console
Questa sezione contiene opzioni sul debug delle console. Può essere utile abilitare alcune opzioni, specialmente se si verificano problemi. Ho abilitato:
- Squelch AP CPUs from early console.
- Invia l’output della console ad un buffer CBMEM
- Mostra i codici POST sulla console di debug
Tabelle di sistema
Abilita Generate SMBIOS tables, l’unica opzione qui.
Payloads
In questa sezione, il payload può essere scelto. Questa pagina spiegherà in dettaglio come impostare SeaBIOS, dato che ha la maggiore compatibilità con i sistemi operativi, ma è anche possibile usare GRUB2 per un avvio più veloce, o anche mettere un kernel sul chip flash (se c’è abbastanza spazio).
Seleziona quanto segue per una corretta configurazione di SeaBIOS:
- Aggiungi un payload > SeaBIOS
- SeaBIOS version > master
- Hardware init durante l’esecuzione della ROM opzionale
- Usa la compressione LZMA per i payloads
Si può anche voler abilitare alcuni payloads secondari. Questi possono essere usati per il debug e per cambiare le opzioni. Un’opzione raccomandata è nvramcui, che agisce in modo simile a un menu di opzioni BIOS standard.
Debuging
Queste opzioni sono in gran parte per lo sviluppo. Gli utenti regolari non hanno bisogno di abilitare nulla in questo sottomenu.
Compilazione
Ora che la configurazione è fatta, coreboot deve essere compilato. Prima, il cross-compilatore deve essere compilato:
utente $
make crossgcc-i386 CPUS=${nproc}
Questo richiede che dev-lang/gnat-gpl sia installato, altrimenti molte funzioni non funzioneranno correttamente.
Una volta fatto questo, compila IASL:
user $
make iasl
E infine, compila coreboot
user $
make
Flashing coreboot.rom
Questo dovrebbe produrre un file nella directory build/ chiamato coreboot.rom. Questa è l’immagine finale che deve essere flashata. Copiala sul flash, se non è già presente, smonta il dispositivo di destinazione e attacca il flash al chip flash.
Sul flash, usa flashrom per flashare:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom
Il secondo comando dovrebbe riportare VERIFIED. Se è così, coreboot è stato flashato con successo sul dispositivo.
Flashing via interno
Una volta che coreboot è stato flashato inizialmente, può essere successivamente flashato internamente, senza bisogno di un dispositivo di flashing esterno. Per fare questo, una volta compilata una nuova coreboot.rom, fai semplicemente quanto segue:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Sebbene questo sia stato testato su diversi portatili, potrebbe non funzionare sul dispositivo in uso. Assicurati di controllare se altri hanno avuto successo o fallimenti con il flasher interno per il modello specifico.
Risoluzione dei problemi
Coreboot non si avvia (Broken build)
Se coreboot non si avvia, allora di solito significa che o non è configurato correttamente, o manca un payload. Assicurati che sia stato selezionato un payload appropriato, compilato correttamente e configurato correttamente.
È anche possibile che coreboot funzioni correttamente, ma il componente grafico no. Questo può essere causato dall’utilizzo di gfx init nativo. Prova a scaricare un BIOS VGA e usa quello al suo posto. Potrebbe anche essere il contrario; provate a passare da un BIOS VGA a un gfx init nativo. Come ultima risorsa, prova a usare la modalità di testo Legacy VGA per la modalità framebuffer sotto Devices/Display.
Non si avvia più nulla (aka SPI chip bricked)
Questo è solitamente causato dall’aver lasciato la macchina accesa durante il dump o dal flashing con un flasher esterno. Se la macchina non si accende affatto (nessuna luce, ventola o display si accende al boot), questo può significare che la macchina è brickata. Può essere possibile riparare acquistando un nuovo chip flash (assicurati che sia compatibile – cerca di usare lo stesso produttore e modello per i migliori risultati) e flashandolo con il BIOS originale o con la ROM coreboot. Questo spesso richiede saldature molto delicate e non è per i deboli di cuore. Può significare che deve essere acquistata una nuova macchina, o almeno una nuova scheda madre.
Assicuratevi sempre di controllare che la causa non sia un coreboot mal configurato!