Kernboot - coreboot

Kernboot
Grafik eines laufenden Hasen in Schwarzweiß über dem Text "coreboot" in Sans-Serif-Kleinschreibung
Originalautor(en) Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer und die Coreboot-Community
Erstveröffentlichung 1999 ; Vor 22 Jahren ( 1999 )
Stabile Version
4.14 / 10. Mai 2021 ; vor 5 Monaten ( 2021-05-10 )
Repository
Geschrieben in Meistens C , und etwa 1% in der Montage . Optional Ada
Plattform IA-32 , x86-64 , ARMv7 , ARMv8, MIPS , RISC-V , POWER8
Typ Firmware
Lizenz GPLv2
Webseite www .coreboot .org Bearbeiten Sie dies auf Wikidata

Das Softwareprojekt Coreboot , früher bekannt als LinuxBIOS , zielt darauf ab, proprietäre Firmware ( BIOS oder UEFI ), die in den meisten Computern zu finden ist, durch eine leichte Firmware zu ersetzen , die nur die minimale Anzahl von Aufgaben ausführen soll, die zum Laden und Ausführen eines modernen 32-Bit- oder 64 -Bit- Betriebssystems erforderlich sind -Bit- Betriebssystem .

Da Coreboot die nackte Hardware initialisiert, muss sie auf jeden unterstützten Chipsatz und jedes Motherboard portiert werden. Daher ist Coreboot nur für eine begrenzte Anzahl von Hardwareplattformen und Motherboardmodellen verfügbar.

Eine der Coreboot-Varianten ist Libreboot , eine Software-Distribution, die vollständig frei von proprietären Blobs ist und sich an Endbenutzer richtet.

Geschichte

Das Coreboot-Projekt begann im Winter 1999 im Advanced Computing Laboratory des Los Alamos National Laboratory (LANL) mit dem Ziel, ein BIOS zu schaffen, das schnell startet und Fehler intelligent behandelt. Es ist unter den Bedingungen der GNU General Public License (GPL) lizenziert. Zu den Hauptbeitragenden zählen LANL , SiS , AMD , Coresystems und Linux Networx, Inc sowie die Motherboard-Hersteller MSI , Gigabyte und Tyan , die neben ihrem Standard-BIOS auch Coreboot anbieten oder Spezifikationen der Hardware-Schnittstellen für einige ihrer Motherboards bereitstellen. Google sponsert teilweise das Coreboot-Projekt. Die CME Group , ein Cluster von Terminbörsen , begann 2009 mit der Unterstützung des Coreboot-Projekts.

Coreboot wurde in sieben aufeinander folgenden Jahren (2007–2014) für den Google Summer of Code zugelassen . Abgesehen von den ersten drei Modellen führen alle Chromebooks Coreboot aus. Code von Das U-Boot wurde assimiliert, um die Unterstützung für Prozessoren zu ermöglichen, die auf dem ARM-Befehlssatz basieren .

Im Juni 2019 begann Coreboot, die NSA- Software Ghidra für seine Reverse-Engineering- Bemühungen bei Firmware-spezifischen Problemen nach der Open-Source-Veröffentlichung der Software-Suite zu verwenden.

Unterstützte Plattformen

Zu den von Coreboot unterstützten CPU-Architekturen gehören IA-32 , x86-64 , ARM , ARM64 , MIPS und RISC-V . Zu den unterstützten System-on-a-Chip (SOC)-Plattformen gehört AMD Geode , beginnend mit dem für den OLPC entwickelten Geode GX-Prozessor . Artec Group hat Geode LX-Unterstützung für sein ThinCan- Modell DBE61 hinzugefügt; dieser Code wurde von AMD übernommen und nach dem Upgrade auf die Geode LX-Plattform für den OLPC weiter verbessert und von der Coreboot-Community weiterentwickelt, um andere Geode-Varianten zu unterstützen. Coreboot kann mit Flashrom auf eine Geode-Plattform geflasht werden .

Von dieser anfänglichen Entwicklung auf AMD Geode-basierten Plattformen wurde die Coreboot-Unterstützung auf viele AMD-Prozessoren und -Chipsätze ausgeweitet. Die Prozessorliste umfasst Familie 0Fh und 10h ( K8- Kern) und neuerdings Familie 14h ( Bobcat- Kern, Fusion APU ). Die Coreboot-Unterstützung erstreckt sich auch auf AMD-Chipsätze: RS690 , RS7xx , SB600 und SB8xx.

AMD Generic Encapsulated Software Architecture ( AGESA )‍—‌ein Bootstrap- Protokoll, mit dem Systemgeräte auf AMD64-Mainboards initialisiert werden‍—‌wurde Anfang 2011 als Open Source veröffentlicht, um die erforderliche Funktionalität für die Initialisierung des Coreboot-Systems auf AMD64-Hardware bereitzustellen. Solche Veröffentlichungen wurden jedoch nie zur Grundlage für die zukünftige Entwicklung von AMD und wurden anschließend gestoppt.

Zu den Geräten, die mit Coreboot oder einem seiner Derivate vorgeladen werden können, gehören einige x86-basierte Chromebooks , das Libreboot X200 und T400 (umbenannt in ThinkPad X200 bzw. T400, erhältlich von Minifree, früher bekannt als Gluglug), OLPC XO vom One Laptop per Child Initiative, ThinCan Modelle DBE61, DBE62 und DBE63 und lüfterlos Server / Router - Hardware hergestellt von PC Engines . Alle Librem- Laptops werden mit Coreboot geliefert .

Einige System76- PCs verwenden die Coreboot-TianoCore-Firmware, einschließlich der Open-Source- Embedded-Controller- Firmware.

Entwurf

Coreboot typischerweise lädt ein Linux - Kernel , aber es kann jede andere laden eigenständige ELF ausführbare Datei, wie IPxE , gPXE oder Etherboot , die einen Linux - Kernel booten können über ein Netzwerk oder SeaBIOS , die einen Linux - Kernel laden kann Microsoft Windows 2000 und höher , und BSDs (früher wurde die Unterstützung für Windows 2000/XP und OpenBSD von ADLO bereitgestellt). Coreboot kann auch einen Kernel von jedem unterstützten Gerät laden, z. B. Myrinet, Quadrics oder SCI- Cluster- Interconnects. Es ist auch möglich, andere Kernel direkt zu booten , beispielsweise einen Plan 9- Kernel. Anstatt einen Kernel direkt zu laden, kann coreboot die Kontrolle an einen dedizierten Bootloader übergeben, beispielsweise eine coreboot-fähige Version von GNU GRUB 2.

Coreboot ist hauptsächlich in C geschrieben , mit einer kleinen Menge Assemblercode . Die Wahl von C als primäre Programmiersprache ermöglicht im Vergleich zu modernen PC-BIOS, das im Allgemeinen in Assembler geschrieben wurde, einfachere Code-Audits , was zu einer verbesserten Sicherheit führt. Es gibt Build- und Runtime-Unterstützung, um Teile von Coreboot in Ada zu schreiben , um die Sicherheitslatte weiter zu erhöhen, wird aber derzeit nur sporadisch verwendet. Der Quellcode wird unter der GNU GPL Version 2 Lizenz veröffentlicht.

Coreboot führt die absolut minimale Hardware-Initialisierung durch und übergibt dann die Kontrolle an das Betriebssystem . Infolgedessen wird kein Coreboot-Code ausgeführt, sobald das Betriebssystem die Kontrolle übernommen hat. Ein Merkmal von Coreboot ist, dass die x86- Version im 32-Bit- Modus läuft, nachdem nur zehn Anweisungen ausgeführt wurden (fast alle anderen x86-BIOSes laufen ausschließlich im 16-Bit- Modus). Diese ähnelt der modernen UEFI- Firmware, die auf neuerer PC-Hardware verwendet wird.

Coreboot selbst bietet keine BIOS-Aufrufdienste . Die SeaBIOS- Nutzlast kann verwendet werden, um BIOS-Aufrufe bereitzustellen und so Coreboot das Laden von Betriebssystemen zu ermöglichen , die diese Dienste benötigen, wie z. B. Windows 2000/XP/Vista/7 und BSDs. Die meisten modernen Betriebssysteme greifen jedoch auf andere Weise auf die Hardware zu und verwenden BIOS-Aufrufe nur während der frühen Initialisierung und als Fallback-Mechanismus.

Coreboot-Phasen

  1. Bootblock-Phase: Bereiten Sie sich vor, um Flash-Zugriff zu erhalten, und suchen Sie nach der zu verwendenden ROM-Phase
  2. ROM-Stufe: Speicher und frühe Chipsatz-Init (ein bisschen wie PEI in UEFI)
  3. RAM-Stufe: CPU, Chipsatz, Mainboard- und Peripherie-Init, PCI-Ressourcenzuweisung, ACPI-Tabellenerstellung, SMM-Handler (ein bisschen wie DXE-Stufe in UEFI)
  4. Nutzlast.

DRAM initialisieren

Die schwierigste Hardware, die Coreboot initialisiert, sind die DRAM-Controller und DRAM . In einigen Fällen ist die technische Dokumentation zu diesem Thema NDA- beschränkt oder nicht verfügbar. Die RAM-Initialisierung ist besonders schwierig, da der RAM vor der Initialisierung nicht verwendet werden kann. Um DRAM-Controller und DRAM zu initialisieren, kann der Initialisierungscode daher nur die Universalregister der CPU oder Cache-as-RAM als temporären Speicher aufweisen.

romcc , ein C- Compiler , der Register anstelle von RAM verwendet, erleichtert die Aufgabe. Mit romcc ist es relativ einfach, SMBus- Zugriffe auf die SPD- ROMs der DRAM- DIMMs zu machen , die die Nutzung des RAMs ermöglichen.

Bei neueren x86-Prozessoren kann der Prozessorcache als RAM verwendet werden, bis DRAM initialisiert wird. Der Prozessor-Cache muss ebenfalls in den Cache-as-RAM-Modus initialisiert werden, aber dies erfordert weniger Anweisungen als das Initialisieren von DRAM. Außerdem ist die Initialisierung im Cache-as-RAM-Modus spezifisch für CPU-Architekturen und somit allgemeiner als die DRAM-Initialisierung, die für jeden Chipsatz und jedes Mainboard spezifisch ist.

Für die meisten modernen x86-Plattformen werden für die DRAM-Einrichtung ausschließlich vom Hersteller bereitgestellte Closed-Source-Binärkomponenten verwendet. Für Intel-Systeme ist FSP-M erforderlich, während AMD derzeit keine Unterstützung bietet. Binäres AGESA wird derzeit für proprietäre UEFI-Firmware auf AMD-Systemen verwendet, und es wird erwartet, dass dieses Modell auf jede zukünftige AMD-bezogene Coreboot-Unterstützung übertragen wird.

Coreboot entwickeln und debuggen

Hacking Coreboot beim Gipfel von Denver 2008.

Da Coreboot die nackte Hardware initialisieren muss, muss sie auf jeden unterstützten Chipsatz und jedes Motherboard portiert werden. Vor der Initialisierung des RAM initialisiert coreboot den seriellen Port (nur Adressierung von Cache und Registern), damit er Debug-Text an ein angeschlossenes Terminal senden kann . Es kann auch Byte-Codes an Port 0x80 senden, die auf einem zwei-hex-stelligen Display einer angeschlossenen POST-Karte angezeigt werden .

Eine weitere Portierungshilfe war das kommerzielle Produkt "RD1 BIOS Savior" von www.ioss.com.tw (nicht zu verwechseln mit US Interagency OPSEC Support Staff unter www.iad.gov/ioss/), das eine Kombination aus zwei Boot-Speichern war Geräte, die in den Boot-Speichersockel eingesteckt werden und einen manuellen Schalter haben, um zwischen den beiden Geräten zu wählen. Der Computer könnte von einem Gerät booten, und dann kann der Schalter umgeschaltet werden, damit der Computer das zweite Gerät neu programmieren oder "flashen" kann. Eine teurere Alternative ist ein externer EEPROM / NOR-Flash- Programmierer.

Es gibt auch CPU- Emulatoren , die entweder die CPU ersetzen oder sich über einen JTAG- Port verbinden, beispielsweise die Sage SmartProbe. Code kann auf BIOS-Emulatoren erstellt oder auf BIOS-Emulatoren heruntergeladen werden, anstatt das BIOS-Gerät zu flashen.

Nutzlasten

SeaBIOS-Nutzlast läuft auf einem Lenovo ThinkPad X60

Coreboot kann eine Nutzlast laden, die mit der libpayload-Hilfsbibliothek geschrieben werden kann . Vorhandene Nutzlasten umfassen Folgendes:

Europäische Coreboot-Konferenz

Ein physisches Treffen ist die European Coreboot Conference, die im Oktober 2017 organisiert wurde und 3 Tage dauerte.

Konferenzgeschichte

Veranstaltung und Jahr Datum Gastgeberstadt Veranstaltungsort Ressourcen Themen
ECC2017 26.10. – 29.10 Bochum , Deutschland RUB Kongresszentrum https://ecc2017.com

Varianten

Coreboot hat eine Reihe von Varianten seiner ursprünglichen Codebasis mit jeweils leicht unterschiedlichen Zielen:

  • librecore - Eine Variante mit mehr Fokus auf Freiheit , Nicht-x86- Befehlssatz- Computern und Firmware-Entwicklungs-Frameworks.
  • Libreboot - Eine Variante mit einem primären Fokus, um alle binären Blobs zu entfernen.

Libreboot wurde als Coreboot-Distribution ohne proprietäre Binär-Blobs etabliert . Libreboot ist keine direkte Abzweigung von Coreboot; Stattdessen ist es eine parallele Anstrengung, die eng mit dem neuesten Coreboot als Upstream-Lieferant zusammenarbeitet und von Zeit zu Zeit darauf basiert , wobei Patches nach Möglichkeit Upstream zusammengeführt werden. Neben der Entfernung proprietärer Software versucht libreboot auch, Coreboot benutzerfreundlich zu machen, indem die Build- und Installationsprozesse automatisiert werden.

Das Libreboot-Projekt ermöglichte die erforderlichen Modifikationen für vollständig freie Varianten einiger ThinkPad- , MacBook- und ARM- Chromebook- Laptops.

Siehe auch

Verweise

Weiterlesen

Externe Links