Coreboot

Risorse
Home

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

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 Parziale Parziale / non con BIOS OEM
Lenovo Thinkpad T430s Sì / Attualmente rotto No Parziale Parziale / non con BIOS OEM
Lenovo Thinkpad X230 No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad T420s No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad T420 No / WIP No Parziale Parziale / non con OEM BIOS No
Lenovo Thinkpad T520 No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad X220 No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad X220 No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad T410 No / WIP No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad T510 No / WIP No Parziale Parziale / non con BIOS OEM No
Lenovo Thinkpad X201 Sì / Attualmente rotto No Parziale Parziale / non con BIOS OEM No
Apple Macbook Air 4,2 No No 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.
Dati forniti dal Gentoo Package Database – Ultimo aggiornamento: 2021-01-27 17:12 Maggiori informazioni sui flag USE

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.

Attenzione
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
Attenzione
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.

Nota
Assicuratevi sempre di controllare che la causa non sia un coreboot mal configurato!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.