Zum Inhalt springen

Firmware — UEFI & BIOS

Die Firmware ist das erste Programm, das beim Einschalten eines Rechners ausgeführt wird. Sie initialisiert Hardware (RAM-Test, CPU-Erkennung, Geräteerkennung) und startet dann ein EFI-Binary — meistens einen Bootloader, aber nicht zwingend.

UEFI (Unified Extensible Firmware Interface) ist der aktuelle Standard und ersetzt seit ca. 2012 schrittweise das ältere BIOS.

  1. UEFI initialisiert die Hardware
  2. UEFI sucht auf allen Datenträgern nach einer EFI System Partition (ESP) — eine FAT32-Partition mit dem Typ-GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  3. In der ESP sucht UEFI nach .efi-Dateien (Bootloader-Programme)
  4. Welche Datei gestartet wird, bestimmen die NVRAM-Booteinträge (dauerhaft im Firmware-Speicher gespeichert)
  5. Fallback: Wenn kein NVRAM-Eintrag passt, wird \EFI\BOOT\BOOTx64.EFI geladen (wichtig für bootfähige USB-Sticks und neue Festplatten)
Terminal-Fenster
efibootmgr -v # alle Booteinträge anzeigen
efibootmgr -n 0001 # beim nächsten Start Eintrag 0001 booten
efibootmgr -o 0001,0000 # Bootreihenfolge festlegen

UEFI kann jeden gültigen EFI-Binary direkt starten — und Linux-Kernel sind seit Version 3.3 selbst gültige EFI-Executables. Das Stichwort dazu: EFI stub (CONFIG_EFI_STUB=y, in allen gängigen Distributionen aktiviert).

Damit entfällt GRUB als Zwischenschicht. Stattdessen gibt es drei Boot-Wege:

Boot-KetteBeschreibung
UEFI → GRUB → Kernelklassisch, maximale Flexibilität
UEFI → systemd-boot → Kernelschlanker EFI-Bootloader ohne eigene Konfigurationssprache
UEFI → Kernel (EFISTUB direkt)kein Bootloader, Parameter per efibootmgr im NVRAM
UEFI → UKIalles in einer einzigen .efi-Datei

Der Kernel liegt als .efi-Binary auf der ESP und wird von UEFI direkt geladen. Kernel-Parameter und der Pfad zur initramfs werden als NVRAM-Eintrag hinterlegt:

Terminal-Fenster
sudo efibootmgr \
--create \
--disk /dev/sda --part 1 \
--label "Linux EFISTUB" \
--loader /vmlinuz-6.1.0-18-amd64 \
--unicode 'root=UUID=abc123 initrd=\initrd.img-6.1.0-18-amd64 quiet'

Ein UKI bündelt Kernel, initramfs und Kernel-Parameter in einer einzigen signierten .efi-Datei. UEFI lädt die Datei direkt — kein Bootloader, keine separaten Konfigurationsdateien.

Vorteile:

  • Secure Boot vereinfacht: nur eine Datei muss signiert werden
  • Manipulationssicher: cmdline ist Teil der signierten Datei
  • Kein Bootloader-Konfigurationsfehler möglich

UKIs werden mit ukify (systemd-Tools) erstellt:

Terminal-Fenster
ukify build \
--linux /boot/vmlinuz-6.1.0 \
--initrd /boot/initrd.img-6.1.0 \
--cmdline "root=UUID=abc123 quiet" \
--output /boot/efi/EFI/Linux/linux-6.1.0.efi

Das ältere BIOS (Basic Input/Output System) nutzt einen anderen Mechanismus:

  1. BIOS initialisiert die Hardware
  2. BIOS liest den Master Boot Record (MBR) — die ersten 512 Bytes des Boot-Datenträgers
  3. Im MBR liegt der erste Teil des Bootloaders (Stage 1), der den Rest nachlädt

Neuere GPT-Partitionstabellen benötigen auf BIOS-Systemen eine spezielle BIOS Boot Partition (ca. 1 MB, Typ BIOS boot), in der GRUB seinen Code ablegt.

UEFIBIOS
PartitionstabelleGPT (empfohlen)MBR
Bootloader-SpeicherortESP (eigene Partition)MBR / BIOS Boot Partition
Secure BootJaNein
Max. Disk-Größe> 2 TB2 TB (MBR-Limit)
Partitionenbis 128 (GPT)4 primäre (MBR)