Coreboot is een vrije en opensource firmware met als doel een snelle, veilige en flexibele vervanging te zijn voor UEFI. Het ondersteunt meerdere payloads, variërend van een BIOS implementatie (SeaBIOS), tot een GRUB2 installatie, tot een complete linux kernel.Deze gids laat zien hoe coreboot met een SeaBIOS payload op ondersteunde apparaten geïnstalleerd kan worden, hoe om te gaan met userspace tools en het gebruik van flashrom.
- Ondersteunde hardware
- De basis
- Flasher
- SPI flash
- flashrom
- USE flags for sys-apps/flashrom Utility voor het lezen, schrijven, wissen en verifiëren van flash ROM chips
- Dump en compileer gereedschappen
- Intel ME en Gigabit Ethernet Configuratiegegevens
- Configureren en Compileren van Coreboot
- Algemene Instellingen
- Mainboard
- Chipset
- Devices
- Generieke stuurprogramma’s
- Security
- Console
- Systeemtabellen
- Payloads
- Debugging
- Compileren
- Het flashen van coreboot.rom
- Flashing via intern
- Troubleshooting
- Coreboot start niet op (Broken build)
- Niets boot meer (aka SPI chip bricked)
Ondersteunde hardware
Er zijn verschillende soorten architecturen en ondersteunde hardware. De volledig bijgewerkte tabel is beschikbaar op de volgende link. In de tabel hieronder staan enkele goed ondersteunde apparaten die min of meer recent zijn uitgebracht. Als een ouder apparaat wordt gebruikt, kan het mogelijk zijn om alle propriëtaire binaire blobs te verwijderen. Gebruik hiervoor de libreboot gids.
Hardware | Ondersteund | Blob Vrij | Native RAM Init | Native Graphics Init | Flashable via Hardware | Flashable via Software | Desolderen nodig |
---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | Ja / Momenteel kapot | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Ja |
Lenovo Thinkpad T430s | Ja / momenteel kapot | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Ja |
Lenovo Thinkpad X230 | Ja | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | |
Lenovo Thinkpad T420s | Ja | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad T420 | Nee / WIP | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad T520 | Ja | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad X220 | Ja | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad X220 | Ja | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad T410 | Nee / WIP | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad T510 | Nee / WIP | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Lenovo Thinkpad X201 | Ja / Momenteel kapot | Nee | Ja | Gedeeltelijk | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
Apple Macbook Air 4.,2 | Ja | Nee | Ja | Nee | Ja | Gedeeltelijk / niet met OEM BIOS | Nee |
De basis
In het algemeen moet de flash chip te vinden zijn op de printplaat van de geselecteerde hardware. Dit is belangrijk, omdat de leverancier de flash-chip meestal vergrendelt via soft lockdown. Gidsen voor het lokaliseren van de chip staan meestal op de coreboot wiki. Deze gids gaat ervan uit dat het apparaat een SPI-flashchip bevat, waarvoor een clip nodig is om verbinding te maken met de flasher.
Flasher
Als flasher kan gemakkelijk een Raspberry Pi worden gebruikt. Elk model en revisie is goed, maar wees gewaarschuwd dat de eerdere modellen niet genoeg RAM hebben om coreboot zelf te compileren. Als je er zo een gebruikt, zorg er dan voor dat je de dump van de flash chip kopieert naar een krachtigere computer. Als de flash chip SPI gebaseerd is, zorg dan voor een Pomona SOIC-8 testclip voor £15. Maar er zijn ook veel andere programmers. Zorg ook voor debug-draadjes.
SPI flash
Er zijn verschillende soorten SPI chips (lijst). De meest voorkomende verpakking voor deze chips is SOIC-8 die kan worden geflitst via testclip. Soms zitten deze chips in een WSON-8 pakket; in dat geval moet de WSON-8 chip worden gedesoldeerd, en omgesoldeerd met een nieuwe SOIC-8. Als je hulp nodig hebt bij het solderen, vraag het dan aan hackerspaces bij jou in de buurt. SPI-chips zijn gangbaar in groottes van 2MB – 16MB. Vaak solderen leveranciers twee chips om geld te besparen.
flashrom
USE flags for sys-apps/flashrom Utility voor het lezen, schrijven, wissen en verifiëren van flash ROM chips
atahpt |
Highpoint (HPT) ATA/RAID controller ondersteuning |
atapromise |
Ondersteuning voor Promise PDC2026x (FastTrak/Ultra) |
atavia |
Ondersteuning voor VIA VT6421A SATA-controllers |
buspirate-spi |
Schakel Bus Pirate SPI in programmer |
ch341a-spi |
Schakel WCH CH341A SPI programmer in |
dediprog |
Dediprog SF100 ondersteuning |
developerbox-spi |
Devloperbox SPI recovery ondersteuning inschakelen |
digilent-spi |
Ondersteuning inschakelen voor Digilent iCEblink40 development board |
drkaiser |
Ondersteuning inschakelen voor Dr. Kaiser programmer |
dummy |
Schakel dummy tracing in |
ene-lpc |
Schakel ENE LPC interface keyboard controller in |
ft2232-spi |
Schakel ftdi programmer in, knipperen via FTDI/SPI USB interface |
gfxnvidia |
NVIDIA programmer inschakelen |
internal |
Interne/onboard ondersteuning inschakelen |
internal-dmi |
Interne DMI decodering inschakelen in plaats van gebruik te maken van sys-apps/dmidecode |
it8212 |
Ondersteuning voor ITE IT8212F ATA/RAID-controllers |
jlink-spi |
Ondersteuning voor SEGGER J-Link en compatibele apparaten |
linux-mtd |
Ondersteuning voor Linux mtd SPI flash apparaten |
linux-spi |
Ondersteuning voor Linux userspace spidev interface |
Ondersteuning voor Parade lspcon USB-C naar HDMI protocol vertaler | |
mec1308 |
Schakel ondersteuning in voor Microchip MEC1308 embedded controller |
mstarddc-spi |
Ondersteuning voor SPI flash ROMs toegankelijk via DDC in MSTAR-uitgeruste displays |
nic3com |
Inschakelen 3Com NIC programmer |
nicintel |
Ondersteuning voor Intel NICs |
nicintel-eeprom |
Ondersteuning voor EEPROMs op Intel Gigabit netwerkkaarten |
nicintel-spi |
Ondersteuning voor SPI op Intel NICs |
nicnatsemi |
Ondersteuning voor National Semiconductor NIC’s |
nicrealtek |
Ondersteuning voor Realtek NIC’s |
ogp-spi |
Schakel ondersteuning in voor OGP (Open Graphics Project) SPI flashing |
pickit2-spi |
SUpport for SPI flash ROMs accessible via Microchip PICkit2 |
pony-spi |
Enable support for SI-Prog-achtige hardware door Lancos |
raiden-debug-spi |
Schakel ChromiumOS Servo DUT debug board in |
rayer-spi |
RayeR SPIPGM hardware ondersteuning |
realtek-mst-i2c-spi |
Schakel ondersteuning in voor Realtek MultiStream Transport (MST) |
satamv |
Activeer programmer voor Marvell SATA controllers |
satasii |
Activeer programmer voor SiI SATA controllers |
serprog |
Schakel Seriële Flasher programmeur in |
static |
!!niet instellen tijdens bootstrap!! Zorgt ervoor dat binaries statisch gelinkt worden in plaats van dynamisch |
stlinkv3-spi |
Schakel SPI programmer in met STLINK-V3 |
tools |
Installeer ich_descriptor_tool, een tool voor het lezen van descriptor-mode SPI-flash images voor Intel chipsets |
usbblaster-spi |
Activeer ondersteuning voor Altera USB-Blaster dongles |
wiki |
Activeer wiki informatie, zoals ondersteunde apparaten etc. |
flashrom wordt het meest gebruikt om te dumpen en te schrijven naar flash chips. Dit moet worden geïnstalleerd op de flasher, of op de machine waarop de flasher is aangesloten.
Het is nuttig om flashrom te installeren op het systeem waarop geflasht zal worden, aangezien eens coreboot initieel geflasht is, het intern kan geherflasht worden, zonder demontage of gebruik van een flasher.
root #
emerge --ask sys-apps/flashrom
Nu moet de machine gedemonteerd worden. Volg de handleiding of een online gids totdat de flash-chip toegankelijk is, en bevestig dan de clip en verbind deze met de flasher.
Zorg ervoor dat ALLE stroombronnen van de machine zijn losgekoppeld, behalve de CMOS-batterij. Het is mogelijk om moederborden te frituren als ze zijn aangesloten terwijl ze worden geflashed.
Als de flash chip eenmaal is aangesloten op een flasher, gebruik dan flashrom om de inhoud van de flash chip te dumpen.
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
Het is belangrijk om meerdere dumps te maken, voor het geval er een verbindingsfout optreedt. Zodra een goede dump is verkregen, is het veilig om de flasher voorlopig los te koppelen als dat gewenst is. Denk eraan, als het op een Raspberry Pi v1 draait, zal het niet genoeg RAM hebben om te compileren, dus op dit punt moet de dump overgezet worden naar een andere machine. Het is mogelijk om de computer te gebruiken waarvan de flash chip is gedumpt, hoewel dit later opnieuw in elkaar gezet en gedemonteerd moet worden.
Dump en compileer gereedschappen
Nu moet de coreboot git repository gekloond worden naar een werkmap, omdat deze gereedschappen bevat die nodig zijn om verder te gaan. Er moeten ook mappen worden aangemaakt voor de specifieke fabrikant en het model.
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
Vervang <fabrikant> en <model> door respectievelijk uw fabrikant en model (bijv.g. lenovo/x220).
De volgende stap is om regio’s uit de flashdump te halen. Regio’s zijn vergelijkbaar met partities, en zijn een flash chip bevat een flash descriptor die kan worden gezien als een partitietabel voor de SPI flash met enkele aanvullende eigenschappen. Deze descriptor wordt gelezen door een programma genaamd ifdtool, dat gebruikt zal worden om de individuele partities te verkrijgen.
Eerst moet ifdtool worden gecompileerd. De broncode staat onder die van coreboot, dus cd in de directory waar coreboot naar is gekloond.
user $
cd util/ifdtool
user $
make
Het is een goed idee om globaal te installeren, maar niet noodzakelijk.
root #
make install
Dan, cd terug naar waar flash.bin ook is.
user $
ifdtool -x flash.bin
Dit zal een partitietabel printen, en een aantal blobs uitpakken. Een standaard partitietabel kan er als volgt uitzien:
Regio | Beschrijving | Startregio | Eindregio |
---|---|---|---|
0 | Flash Descriptor | 0x00000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fffff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Platformgegevens | ongebruikt | ongebruikt |
Intel ME en Gigabit Ethernet Configuratiegegevens
Merk op dat de bovenstaande tabel ME en GbE bevat. Dit zijn binaire blobs die delen van de computer initialiseren (In dit geval, Intel Management Engine en Gigabit Ethernet). Op oudere apparaten kunnen deze veilig verwijderd worden met libreboot, maar op Sandy Bridge en nieuwer zijn ze nodig om de computer goed te laten werken. Aangezien Intel ME vereist is op deze borden, moet het worden uitgepakt. Echter, coreboot kan het drastisch verkleinen door de netwerk- en systeembronnentoegang te verwijderen. Dit wordt aanbevolen, omdat het niet alleen de veiligheid verbetert, maar ook meer ruimte op de flashchip overlaat voor andere payloads. De Gigabit Ethernet configuratiegegevens zijn specifiek voor elke machine, en moeten als zodanig ook uit de flashchip worden gehaald.
Op dit punt zou de werkdirectory vier nieuwe bestanden moeten bevatten, die het formaat flashregion_*.bin volgen. Deze moeten overeenkomen met de tabel die is afgedrukt. Zoals eerder vermeld, zijn de descriptor, Intel ME en de GbE blobs nodig. Hernoem deze naar respectievelijk descriptor.bin, me.bin en gbe.bin, en kopieer ze naar coreboot/3rdparty/blobs/mainboard/<fabrikant>/<model>/; de directory die eerder werd aangemaakt.
Configureren en Compileren van Coreboot
Nu moet coreboot worden geconfigureerd voor de specifieke machine. Het is het beste om de coreboot wiki pagina voor het gegeven apparaat te bekijken, voor het geval er bepaalde vereisten zijn. Als dusdanig zal deze pagina proberen om alleen de instellingen te detailleren die ingesteld moeten worden voor de meerderheid van de installaties. Dit kan niet worden gegarandeerd, en sommige instellingen kunnen conflicten veroorzaken met de machine.
Eerst moet u de configuratie invoeren. Dit gebeurt op een vergelijkbare manier als het configureren van een kernel.
user $
make nconfig
Als alternatief zou men menuconfig kunnen gebruiken, of zelfs het config-bestand handmatig kunnen bewerken (nadat het is gegenereerd door nconfig/menuconfig).
Algemene Instellingen
Ik raad u aan het volgende in te schakelen:
- Gebruik CMOS voor configuratie waarden
- Compresseer ramstage met LZMA
- Integreer het coreboot .config bestand in de ROM image
- Maak een tabel van tijdstempels die tijdens het opstarten zijn verzameld
- Bouw de ramstage zo dat deze verplaatsbaar is in de 32-bit adresruimte.
Voor een Sandy Bridge of later apparaat:
- Gebruik van binary-only repository toestaan
En als u coreboot al eerder hebt gecompileerd, kunt u de compileertijd nog verder verkorten door het volgende in te schakelen:
- Update existing coreboot.rom image
Mainboard
Hier moeten de leverancier en het model worden geselecteerd. Zorg ervoor dat het exacte model is ingevoerd, als er afgeleiden beschikbaar zijn (b.v. X220/X220t). De ROM-chipgrootte moet ook worden gekozen. Deze zou door flashrom moeten zijn ingevoerd, maar als dat niet het geval is kan dit worden bepaald door de bestandsgrootte van flash.bin te controleren.
Chipset
Dit menu bevat chipset-specifieke opties, en ook de locaties voor de binaire blobs die eerder werden uitgepakt. aangezien dit grotendeels machinespecifiek is, zijn er slechts enkele opties die over de hele lijn zouden moeten ingeschakeld worden. Ik raad aan om in te schakelen:
- VermX inschakelen voor virtualisatie
- Set lock bit na configureren VMX
- Piep bij fatale fout
- Flits LED’s bij fatale fout
Deze maken het eenvoudiger om te debuggen als u een slechte flitser hebt. Ze kunnen worden uitgeschakeld zodra een bekende werkende configuratie is gemaakt.
Volgende, paden moeten worden verstrekt onder Intel Firmware. Schakel deze opties in:
- Toevoegen van Intel descriptor.bin bestand
- Toevoegen van Intel ME/TXE firmware
- Toevoegen van Intel ME/TXE firmware
- Toevoegen van gigabit ethernet firmware
De opties voor paden zouden nu moeten verschijnen. Ze zouden overeen moeten komen met de eerder gebruikte namen, maar als dat niet het geval is, corrigeert u ze zodat ze dat wel doen.
Devices
Dit gebied betreft voornamelijk grafische afbeeldingen, vooral in de context van laptops. Persoonlijk heb ik Graphics Initialisation ingesteld op ‘Use native graphics init’, en Display/Framebuffer Mode ingesteld op ‘Linear “high-resolution” framebuffer’. De rest van deze opties zou al ingesteld moeten zijn voor de machine. Als het specifieke apparaat een VGA BIOS image vereist, volg dan de coreboot wiki.
Generieke stuurprogramma’s
Ik schakel vaak in:
- PS/2 keyboard init
Als het apparaat een Intel PCIe WiFi-kaart heeft, schakelt u de optie
- Support Intel PCI-e WiFi-adapters
Security
Ik laat dit vaak met rust, aangezien het momenteel alleen Verified Boot-opties bevat, maar als ondersteuning hiervoor vereist is, schakelt u deze in.
Console
Deze sectie bevat opties over het debuggen van consoles. Het kan nuttig zijn om bepaalde opties aan te zetten, vooral als er zich problemen voordoen. Ik heb ingeschakeld:
- Squelch AP CPUs van vroege console.
- Send console uitvoer naar een CBMEM buffer
- Toon POST codes op de debug console
Systeemtabellen
Inschakelen Genereren SMBIOS tabellen, de enige optie hier.
Payloads
In deze sectie kan de payload gekozen worden. Deze pagina beschrijft hoe SeaBIOS moet worden ingesteld, omdat het de grootste compatibiliteit heeft met besturingssystemen, maar het is ook mogelijk om GRUB2 te gebruiken voor sneller booten, of zelfs een kernel op de flash chip te plaatsen (als er genoeg ruimte is).
Selecteer het volgende voor een goede SeaBIOS setup:
- Een payload toevoegen > SeaBIOS
- SeaBIOS versie > master
- Hardware init tijdens optie ROM uitvoering
- Gebruik LZMA compressie voor payloads
Het kan ook gewenst zijn om enkele secundaire payloads in te schakelen. Deze kunnen gebruikt worden voor debugging, en het veranderen van opties. Een aanbevolen optie is nvramcui, dat op een vergelijkbare manier werkt als een standaard BIOS opties menu.
Debugging
Deze opties zijn grotendeels voor ontwikkeling. Gewone gebruikers hoeven niets in dit submenu in te schakelen.
Compileren
Nu de configuratie klaar is, moet coreboot gecompileerd worden. Eerst moet de cross-compiler worden gebouwd:
user $
make crossgcc-i386 CPUS=${nproc}
Dit vereist dat dev-lang/gnat-gpl is geïnstalleerd, anders zullen veel functies niet goed werken.
Als dit klaar is, compileert u IASL:
user $
make iasl
En tenslotte compileert u coreboot
user $
make
Het flashen van coreboot.rom
Dit zou een bestand moeten opleveren in de build/ directory met de naam coreboot.rom. Dit is de uiteindelijke image die geflashed moet worden. Kopieer dit naar de flasher, als het er nog niet op staat, demonteer het doelapparaat en bevestig de flasher aan de flash chip.
Op de flasher, gebruik flashrom om te flashen:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom
Het tweede commando zou VERIFIED moeten teruggeven. Als dat zo is, is coreboot met succes naar het apparaat geflashed.
Flashing via intern
Als coreboot eenmaal initieel geflashed is, kan het later intern geflashed worden, zonder dat er een extern flashing apparaat nodig is. Om dit te doen, zodra een nieuwe coreboot.rom is gecompileerd, doet u simpelweg het volgende:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Hoewel dit is getest op verschillende laptops, kan het zijn dat het niet werkt op het apparaat dat wordt gebruikt. Controleer of anderen succes of falen hebben gehad met de interne flasher voor het specifieke model.
Troubleshooting
Coreboot start niet op (Broken build)
Als coreboot niet opstart, betekent dit meestal dat het niet goed is geconfigureerd, of dat er een payload ontbreekt. Zorg ervoor dat een juiste payload is geselecteerd die correct is gecompileerd, en zelf correct is geconfigureerd.
Het is ook mogelijk dat coreboot correct werkt, maar de grafische component niet. Dit kan worden veroorzaakt door het gebruik van native gfx init. Probeer een VGA BIOS te dumpen en dat in plaats daarvan te gebruiken. Het kan ook andersom zijn; probeer over te schakelen van een VGA BIOS naar native gfx init. Als laatste redmiddel, probeer de Legacy VGA tekst mode te gebruiken voor de framebuffer mode onder Devices/Display.
Niets boot meer (aka SPI chip bricked)
Dit wordt meestal veroorzaakt door de machine aan te laten staan tijdens het dumpen of flashen met een externe flasher. Als de machine helemaal niet aangaat (geen lampjes, ventilatoren of display gaan aan bij het opstarten), kan dit betekenen dat de machine gemetseld is. Het kan mogelijk zijn om dit te herstellen door een nieuwe flash-chip te kopen (zorg ervoor dat deze compatibel is – probeer dezelfde fabrikant en hetzelfde model te gebruiken voor de beste resultaten) en deze te flashen met ofwel het originele BIOS of het coreboot ROM. Dit vereist vaak zeer delicaat soldeerwerk, en is niet voor lichtzinnigen. Het kan betekenen dat een nieuwe machine moet worden aangeschaft, of op zijn minst een nieuw moederbord.
Controleer altijd of de oorzaak niet een verkeerd geconfigureerde coreboot is!