Coreboot

Resources
Home

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

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.

Nee

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

lspcon-i2c-spi

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.
Gegevens verstrekt door de Gentoo Pakket Database – Laatste update: 2021-01-27 17:12 Meer informatie over USE vlaggen

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.

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

Opmerking
Controleer altijd of de oorzaak niet een verkeerd geconfigureerde coreboot is!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.