Coreboot

Resources
Home

Coreboot ist eine freie und quelloffene Firmware, die einen schnellen, sicheren und flexiblen Ersatz für UEFI darstellen soll. Diese Anleitung zeigt, wie man coreboot mit einem SeaBIOS-Payload auf unterstützten Geräten installiert, wie man mit Userspace-Tools umgeht und wie man flashrom verwendet.

Unterstützte Hardware

Es gibt verschiedene Architekturen und unterstützte Hardware. Die ganz aktuelle Tabelle ist unter folgendem Link zu finden. In der folgenden Tabelle sind einige gut unterstützte Geräte aufgeführt, die mehr oder weniger neu sind. Wenn ein älteres Gerät verwendet wird, kann es möglich sein, alle proprietären Binär-Blobs zu entfernen. Verwenden Sie dazu die libreboot-Anleitung.

Hardware Unterstützt Blob Free Native RAM Init Native Graphics Init Flashbar über Hardware Flashbar über Software Entlöten erforderlich
Lenovo Thinkpad T530 Ja / Derzeit defekt Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Ja
Lenovo Thinkpad T430s Ja / Derzeit kaputt Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Ja
Lenovo Thinkpad X230 Ja Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad T420s Ja Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad T420 Nein / WIP Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad T520 Ja Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad X220 Ja Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad X220 Ja Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad T410 Nein / WIP Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad T510 Nein / WIP Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Lenovo Thinkpad X201 Ja / Derzeit kaputt Nein Ja Teilweise Ja Teilweise / nicht mit OEM BIOS Nein
Apple Macbook Air 4,2 Ja Nein Ja Nein Ja Teilweise / nicht mit OEM-BIOS Nein

Die Grundlagen

In der Regel muss sich der Flash-Chip auf der Platine der ausgewählten Hardware befinden. Dies ist wichtig, da der Hersteller den Flash-Chip in der Regel per Soft-Lockdown sperrt. Anleitungen zum Auffinden des Chips finden sich im Allgemeinen im Coreboot-Wiki. In dieser Anleitung wird davon ausgegangen, dass das Gerät einen SPI-Flash-Chip enthält, für den ein Clip zum Anschluss an den Flasher erforderlich ist.

Flasher

Als Flasher kann ein Raspberry Pi verwendet werden. Jedes Modell und jede Revision ist geeignet, aber seien Sie gewarnt, dass die älteren Modelle nicht genug RAM haben, um coreboot selbst zu kompilieren. Wenn Sie einen solchen Pi verwenden, stellen Sie sicher, dass Sie den Dump des Flash-Chips auf einen leistungsfähigeren Computer kopieren. Wenn der Flash-Chip SPI-basiert ist, besorgen Sie sich einen Pomona SOIC-8 Testclip für £15. Es gibt aber auch viele andere Programmiergeräte. Stellen Sie sicher, dass Sie auch einige Debug-Drähte bekommen.

SPI-Flash

Es gibt verschiedene Arten von SPI-Chips (Liste). Das gängigste Gehäuse für diese Chips ist SOIC-8, das per Testclip geflasht werden kann. Manchmal befinden sich diese Chips in einem WSON-8-Gehäuse; in diesem Fall muss der WSON-8-Chip ausgelötet und mit einem neuen SOIC-8-Chip neu verlötet werden. Wenn Sie Hilfe beim Löten benötigen, fragen Sie in einem Hackerspace in Ihrer Nähe nach. SPI-Chips gibt es in Größen von 2 MB bis 16 MB. Oft löten die Hersteller zwei Chips, um Geld zu sparen.

flashrom

USE-Flags für sys-apps/flashrom Dienstprogramm zum Lesen, Schreiben, Löschen und Überprüfen von Flash-ROM-Chips

atahpt Unterstützung für Highpoint (HPT) ATA/RAID-Controller
atapromise Unterstützung für Promise PDC2026x (FastTrak/Ultra)
atavia Unterstützung für VIA VT6421A SATA-Controller
buspirate-spi Enable Bus Pirate SPI Programmierer
ch341a-spi WCH CH341A SPI Programmierer aktivieren
dediprog Dediprog SF100 Unterstützung
developerbox-spi Unterstützung für Devloperbox SPI Recovery aktivieren
digilent-spi Unterstützung für Digilent iCEblink40 Entwicklungsboard aktivieren
drkaiser Dr. Kaiser Programmer
dummy Enable dummy tracing
ene-lpc Enable ENE LPC interface keyboard controller
ft2232-spi Enable ftdi programmer, Flashen über FTDI/SPI-USB-Schnittstelle
gfxnvidia NVIDIA-Programmierer aktivieren
internal Interne/Onboard-Unterstützung aktivieren
internal-dmi Interne DMI-Dekodierung aktivieren, statt Sys-apps/dmidecode
it8212 Unterstützung für ITE IT8212F ATA/RAID-Controller
jlink-spi Unterstützung für SEGGER J-Link und kompatible Geräte
linux-mtd Unterstützung für Linux mtd SPI Flash-Geräte aktivieren
linux-spi Unterstützung für Linux Userspace spidev-Schnittstelle aktivieren
lspcon-i2c-spi Unterstützung für Parade lspcon USB-C zu HDMI Protokollübersetzer
mec1308 Unterstützung für Microchip MEC1308 Embedded Controller aktivieren
mstarddc-spi Unterstützung für SPI Flash ROMs, die über DDC in MSTAR-Displays zugänglich sind
nic3com 3Com NIC-Programmierer aktivieren
nicintel Unterstützung für Intel NICs
nicintel-eeprom Unterstützung für EEPROMs auf Intel Gigabit-Netzwerkkarten
nicintel-spi Unterstützung für SPI auf Intel-NICs
nicnatsemi Unterstützung für National Semiconductor NICs
nicrealtek Unterstützung für Realtek NICs
ogp-spi Aktivieren der Unterstützung für OGP (Open Graphics Project) SPI flashing
pickit2-spi Unterstützung für SPI Flash ROMs, die über Microchip PICkit2 zugänglich sind
pony-spi Unterstützung für SI-Prog wie Hardware von Lancos
raiden-debug-spi ChromiumOS Servo DUT Debug Board aktivieren
rayer-spi RayeR SPIPGM Hardware-Unterstützung
realtek-mst-i2c-spi Unterstützung für Realtek MultiStream Transport (MST) aktivieren
satamv Programmierer für Marvell SATA-Controller aktivieren
satasii Programmierer für SiI-SATA-Controller
serprog Seriellen Flasher-Programmierer aktivieren
static !!nicht während des Bootstraps setzen!! Bewirkt, dass Binärdateien statisch statt dynamisch gelinkt werden
stlinkv3-spi SPI-Programmierer mit STLINK-V3 aktivieren
tools Ich_descriptor_tool installieren, ein Tool zum Lesen von Descriptor-Mode SPI-Flash-Images für Intel-Chipsätze
usbblaster-spi Unterstützung für Altera USB-Blaster Dongles aktivieren
wiki Wiki-Informationen, wie unterstützte Geräte etc. aktivieren
Daten bereitgestellt von der Gentoo Paketdatenbank – Letztes Update: 2021-01-27 17:12 Weitere Informationen über USE-Flags

flashrom wird am häufigsten zum Dumpen und Schreiben auf Flash-Chips verwendet. Es muss auf dem Flasher oder auf der Maschine, an die der Flasher angeschlossen ist, installiert werden.

Es ist nützlich, Flashrom auf dem System zu installieren, auf das geflasht werden soll, da Coreboot nach dem ersten Flashen intern neu geflasht werden kann, ohne dass es zerlegt oder ein Flasher verwendet werden muss.

root #emerge --ask sys-apps/flashrom

Nun muss die Maschine zerlegt werden. Folgen Sie dem Handbuch oder einer Online-Anleitung, bis der Flash-Chip zugänglich ist, und bringen Sie dann den Clip an und verbinden Sie ihn mit dem Flasher.

Warnung
Stellen Sie sicher, dass ALLE Stromquellen vom Gerät getrennt sind, außer der CMOS-Batterie. Es ist möglich, Motherboards zu zerstören, wenn sie angeschlossen sind, während geflasht wird.

Wenn der Flash-Chip mit einem Flasher verbunden ist, benutze Flashrom, um den Inhalt des Flash-Chips zu löschen.

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

Es ist wichtig, mehrere Dumps zu machen, falls es einen Verbindungsfehler gibt. Sobald ein ordnungsgemäßer Dump vorliegt, kann der Flasher vorerst abgeschaltet werden, falls dies gewünscht wird. Denken Sie daran, dass ein Raspberry Pi v1 nicht genug RAM zum Kompilieren hat. Daher sollte der Dump zu diesem Zeitpunkt auf einen anderen Rechner übertragen werden. Es ist möglich, den Computer zu verwenden, von dem der Flash-Chip übertragen wurde, obwohl dies einen erneuten Zusammenbau und eine weitere Disassemblierung zu einem späteren Zeitpunkt erfordert.

Dumping und Kompilieren von Tools

Jetzt muss das coreboot git Repository in ein Arbeitsverzeichnis geklont werden, da es Tools enthält, die zum Fortfahren benötigt werden. Außerdem müssen Verzeichnisse für den jeweiligen Hersteller und das Modell angelegt werden.

user $git clone --recursive https://review.coreboot.org/coreboot.git
user $cd coreboot
user $mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>

Ersetzen Sie <Hersteller> und <Modell> mit Ihrem Hersteller bzw. Modell (z.z. B. lenovo/x220).

Der nächste Schritt ist die Extraktion von Regionen aus dem Flash-Dump. Regionen sind ähnlich wie Partitionen und ein Flash-Chip enthält einen Flash-Deskriptor, der als eine Partitionstabelle für den SPI-Flash mit einigen zusätzlichen Eigenschaften angesehen werden kann. Dieser Deskriptor wird von einem Programm namens ifdtool gelesen, das zur Gewinnung der einzelnen Partitionen verwendet wird.

Zuerst muss ifdtool kompiliert werden. Sein Quellcode befindet sich unter dem von coreboot, also cd in das Verzeichnis, in das coreboot geklont wurde.

user $cd util/ifdtool
user $make

Es ist eine gute Idee, global zu installieren, aber nicht notwendig.

root #make install

Dann, cd zurück zu wo auch immer flash.bin ist.

user $ifdtool -x flash.bin

Dies wird eine Partitionstabelle ausgeben und einige Blobs extrahieren. Eine Standard-Partitionstabelle kann wie folgt aussehen:

Region Beschreibung Start Region End Region
0 Flash Descriptor 0x00000000 0x00000fff
1 BIOS (Firmware) 0x00500000 0x00bfffff
2 ME 0x00003000 0x004fffff
3 GbE 0x00001000 0x00002fff
4 Plattformdaten unbenutzt unbenutzt

Intel ME und Gigabit Ethernet Konfigurationsdaten

Beachten Sie, dass die obige Tabelle ME und GbE enthält. Dies sind binäre Blobs, die Teile des Computers initialisieren (in diesem Fall Intel Management Engine und Gigabit Ethernet). Auf älteren Geräten können diese sicher mit libreboot entfernt werden, aber auf Sandy Bridge und neueren Geräten sind sie erforderlich, damit der Computer richtig läuft. Da Intel ME auf diesen Boards erforderlich ist, muss es extrahiert werden. Mit coreboot kann es jedoch drastisch verkleinert werden, indem der Zugriff auf Netzwerk- und Systemressourcen entfernt wird. Dies ist empfehlenswert, da es nicht nur die Sicherheit verbessert, sondern auch mehr Platz auf dem Flash-Chip für andere Nutzdaten schafft. Die Gigabit-Ethernet-Konfigurationsdaten sind für jeden Rechner spezifisch und müssen daher ebenfalls aus dem Flash-Chip extrahiert werden.

Zu diesem Zeitpunkt sollte das Arbeitsverzeichnis vier neue Dateien enthalten, die das Format flashregion_*.bin haben. Diese sollten der Tabelle entsprechen, die ausgedruckt wurde. Wie bereits erwähnt, werden der Deskriptor, Intel ME und die GbE-Blobs benötigt. Benennen Sie diese in descriptor.bin, me.bin bzw. gbe.bin um und kopieren Sie sie in das Verzeichnis coreboot/3rdparty/blobs/mainboard/<Hersteller>/<Modell>/, das zuvor erstellt wurde.

Konfigurieren und Kompilieren von Coreboot

Nun muss coreboot für den jeweiligen Rechner konfiguriert werden. Es ist am besten, die Coreboot-Wiki-Seite für das jeweilige Gerät zu lesen, falls es bestimmte Anforderungen gibt. Auf dieser Seite wird versucht, nur die Einstellungen zu beschreiben, die bei den meisten Installationen vorgenommen werden müssen. Dies kann nicht garantiert werden, und einige Einstellungen können Konflikte mit dem Gerät verursachen.

Zuerst müssen Sie die Konfiguration eingeben. Dies geschieht in ähnlicher Weise wie die Konfiguration eines Kernels.

user $make nconfig

Alternativ könnte man menuconfig verwenden oder sogar die Konfigurationsdatei manuell bearbeiten (nachdem sie von nconfig/menuconfig erzeugt wurde).

General Setup

Ich empfehle, folgendes zu aktivieren:

  • CMOS für Konfigurationswerte verwenden
  • Ramstage mit LZMA komprimieren
  • Die coreboot .config-Datei in das ROM-Image ein
  • Erstellen Sie eine Tabelle mit Zeitstempeln, die während des Bootens gesammelt werden
  • Erstellen Sie das Ramstage so, dass es im 32-Bit-Adressraum verschiebbar ist

Für ein Sandy Bridge- oder späteres Gerät:

  • Verwendung von binary-only repository zulassen

Und wenn Sie coreboot bereits kompiliert haben, können Sie die Kompilierzeit weiter verkürzen, indem Sie Folgendes aktivieren:

  • Vorhandenes coreboot.rom-Image aktualisieren

Hauptplatine

Hier müssen der Hersteller und das Modell ausgewählt werden. Achten Sie darauf, dass das genaue Modell eingegeben wird, falls Derivate verfügbar sind (z.B. X220/X220t). Auch die ROM-Chipgröße sollte ausgewählt werden. Diese sollte von flashrom ausgegeben worden sein, kann aber, falls nicht, durch Überprüfung der Dateigröße von flash.bin ermittelt werden.

Chipset

Dieses Menü enthält Chipsatz-spezifische Optionen und auch die Speicherorte für die zuvor extrahierten binären Blobs. Da dies größtenteils gerätespezifisch ist, gibt es nur bestimmte Optionen, die durchgängig aktiviert werden sollten. Ich empfehle folgende Optionen zu aktivieren:

  • VMX für Virtualisierung aktivieren
  • Sperrbit nach der Konfiguration von VMX setzen
  • Beep on fatal error
  • Flash-LEDs bei fatal error

Diese Optionen erleichtern die Fehlersuche, wenn der Flash defekt ist. Sie können deaktiviert werden, sobald eine funktionierende Konfiguration erstellt wurde.

Als Nächstes müssen unter Intel Firmware Pfade angegeben werden. Aktivieren Sie diese Optionen:

  • Add Intel descriptor.bin file
  • Add Intel ME/TXE firmware
  • Strip down the Intel ME/TXE firmware
  • Add gigabit ethernet firmware

Optionen für Pfade sollten nun erscheinen. Sie sollten mit den zuvor verwendeten Namen übereinstimmen, aber wenn nicht, korrigieren Sie sie so, dass sie es tun.

Geräte

Dieser Bereich betrifft hauptsächlich die Grafik, insbesondere im Zusammenhang mit Laptops. Ich persönlich habe die Grafikinitialisierung auf „Use native graphics init“ und den Display/Framebuffer Mode auf „Linear „high-resolution“ framebuffer“ eingestellt. Die übrigen Optionen sollten bereits für das Gerät eingestellt sein. Wenn das spezifische Gerät ein VGA-BIOS-Image erfordert, folgen Sie dem coreboot-Wiki.

Generic Drivers

Ich aktiviere oft:

  • PS/2 keyboard init

Wenn das Gerät über eine Intel PCIe WiFi Karte verfügt, aktivieren Sie die Option

  • Support Intel PCI-e WiFi adapters

Security

Ich lasse dies oft in Ruhe, da es derzeit nur Verified Boot Optionen enthält, aber wenn die Unterstützung dafür erforderlich ist, aktivieren Sie es.

Konsole

Dieser Abschnitt enthält Optionen zum Debuggen von Konsolen. Es kann sinnvoll sein, bestimmte Optionen zu aktivieren, insbesondere wenn Probleme auftreten. Ich habe Folgendes aktiviert:

  • Ap-CPUs von der frühen Konsole aus abschalten
  • Konsolenausgaben in einen CBMEM-Puffer senden
  • POST-Codes auf der Debug-Konsole anzeigen

Systemtabellen

SMBIOS-Tabellen generieren aktivieren, die einzige Option hier.

Nutzlasten

In diesem Abschnitt kann die Nutzlast ausgewählt werden. Auf dieser Seite wird beschrieben, wie man SeaBIOS einrichtet, da es die größte Kompatibilität mit Betriebssystemen hat, aber es ist auch möglich, GRUB2 für schnelleres Booten zu verwenden oder sogar einen Kernel auf dem Flash-Chip zu platzieren (wenn genug Platz vorhanden ist).

Wählen Sie folgendes für eine korrekte SeaBIOS-Einrichtung:

  • Hinzufügen einer Nutzlast > SeaBIOS
  • SeaBIOS-Version > Master
  • Hardware-Init während der Ausführung der Option ROM
  • Verwenden Sie LZMA-Komprimierung für Nutzlasten

Es kann auch gewünscht sein, einige sekundäre Nutzlasten zu aktivieren. Diese können zur Fehlersuche und zum Ändern von Optionen verwendet werden. Eine empfohlene Option ist nvramcui, die ähnlich wie ein Standard-BIOS-Optionsmenü funktioniert.

Debugging

Diese Optionen sind hauptsächlich für die Entwicklung gedacht. Normale Benutzer müssen in diesem Untermenü nichts aktivieren.

Kompilieren

Nachdem die Konfiguration abgeschlossen ist, muss coreboot kompiliert werden. Zuerst muss der Cross-Compiler gebaut werden:

user $make crossgcc-i386 CPUS=${nproc}

Dazu muss dev-lang/gnat-gpl installiert sein, sonst funktionieren viele Funktionen nicht richtig.

Nachdem dies geschehen ist, kompiliere IASL:

user $make iasl

Und schließlich kompiliere coreboot

user $make

Flashen von coreboot.rom

Dies sollte im Verzeichnis build/ eine Datei namens coreboot.rom erzeugen. Dies ist das endgültige Image, das geflasht werden muss. Kopieren Sie diese Datei auf den Flasher, falls noch nicht vorhanden, zerlegen Sie das Zielgerät und schließen Sie den Flasher an den Flash-Chip an.

Verwenden Sie auf dem Flasher flashrom zum 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

Der zweite Befehl sollte VERIFIED zurückgeben. Wenn dies der Fall ist, wurde coreboot erfolgreich auf das Gerät geflasht.

Flashen über intern

Wenn coreboot einmal geflasht wurde, kann es später intern geflasht werden, ohne dass ein externes Flashergerät benötigt wird. Sobald eine neue coreboot.rom kompiliert wurde, führen Sie einfach die folgenden Schritte aus:

root #flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Warnung
Dies wurde zwar auf mehreren Laptops getestet, funktioniert aber möglicherweise nicht auf dem verwendeten Gerät. Stellen Sie sicher, dass Sie überprüfen, ob andere mit dem internen Flasher für das spezifische Modell Erfolg oder Misserfolg hatten.

Fehlersuche

Coreboot bootet nicht (Broken build)

Wenn Coreboot nicht bootet, bedeutet dies normalerweise, dass es entweder nicht richtig konfiguriert ist oder eine Nutzlast fehlt. Stellen Sie sicher, dass eine korrekte Nutzlast ausgewählt wurde, die korrekt kompiliert und konfiguriert ist.

Es ist auch möglich, dass coreboot korrekt funktioniert, aber die grafische Komponente nicht. Dies kann durch die Verwendung von nativem gfx init verursacht werden. Versuchen Sie, ein VGA-BIOS zu dumpen und stattdessen dieses zu verwenden. Es könnte auch andersherum sein; versuchen Sie, von einem VGA-BIOS zu nativem gfx init zu wechseln. Versuchen Sie als letzten Ausweg, den Legacy-VGA-Textmodus für den Framebuffer-Modus unter Geräte/Anzeige zu verwenden.

Es bootet nichts mehr (aka SPI-Chip gebrickt)

Dies wird normalerweise dadurch verursacht, dass Sie den Rechner während des Dumpings eingeschaltet lassen oder mit einem externen Flasher flashen. Wenn sich das Gerät überhaupt nicht einschaltet (keine Lichter, Lüfter oder das Display schalten sich beim Booten ein), kann dies bedeuten, dass das Gerät gebrickt ist. Möglicherweise können Sie das Problem beheben, indem Sie einen neuen Flash-Chip kaufen (stellen Sie sicher, dass er kompatibel ist – versuchen Sie, denselben Hersteller und dasselbe Modell zu verwenden, um beste Ergebnisse zu erzielen) und diesen entweder mit dem Original-BIOS oder dem Coreboot-ROM flashen. Dies erfordert oft sehr schwierige Lötarbeiten und ist nichts für schwache Nerven. Es kann bedeuten, dass ein neues Gerät oder zumindest ein neues Motherboard gekauft werden muss.

Hinweis
Überprüfen Sie immer, ob die Ursache nicht ein falsch konfiguriertes Coreboot ist!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.