BEARBEITEN: Als ich diese Antwort schrieb, wurden nur sehr wenige Distributionen mit einem EFI_STUB-konfigurierten Kernel ausgeliefert, sodass eine benutzerdefinierte erstellt werden musste. Heutzutage liefern die meisten Distributionen einen entsprechend konfigurierten Kernel und ein benutzerdefinierter Build ist nicht mehr erforderlich. In diesem Fall sind die Abschnitte "Partitionen einrichten" und "Einrichten" interessant. "Anforderungen" und "Kompilieren des Kernels" können übersprungen werden.
Ich weiß nicht, wie Windows mit UEFI umgeht, aber von der Debian-Seite ist es ziemlich einfach.
Richten Sie Ihre Partitionen ein
Verwenden Sie das GPT-Partitionsschema, nicht MBR.
Zum Booten von einer GPT-Partition mit UEFI ist eine dedizierte Boot-Partition erforderlich , die als EFI SYSTEM PARTITION (ESP) bezeichnet wird. Es ist nicht obligatorisch, aber der kompatibelste Weg ist die Verwendung einer FAT32-Partition. Eine Größe von 200 MiB sollte in den meisten Fällen in Ordnung sein.
Um die Partition als ESP zu registrieren, muss sie mit dem boot
Flag gekennzeichnet werden. Im Gegensatz zu MBR-Schemata wird das Startflag nur zur Angabe des ESP verwendet, nicht der Partitionen, von denen aus gestartet werden kann.
UEFI verwendet eine Verzeichnisstruktur \EFI\<vendor>\<application>.efi
zum Speichern von UEFI-Anwendungen. Ein Verzeichnis-Trennzeichen wird auch unter Linux durch einen Backslash gekennzeichnet . könnte ein Verteilungsname sein, der tatsächliche Wert ist für die UEFI nicht relevant.
Anwendungen können Systemdienstprogramme wie Speicherprüfer oder eine UEFI-Shell sein. Es kann sich auch um einen Betriebssystemlader oder das Betriebssystem selbst handeln. Diese Anwendungen müssen im UEFI registriert sein, damit sie beim Booten gestartet werden können.
Bedarf
Die Linux-Kernel-Version> = 3.3 kann direkt vom UEFI geladen werden. Der Kernel kann als eigener Loader fungieren. Dies nennt man EFISTUB . Die folgenden Kernelkonfigurationen werden benötigt.
CONFIG_EFI = y
CONFIG_EFI_PARTITION = y
CONFIG_EFI_STUB = y
CONFIG_RELOCATABLE = y
CONFIG_FB_EFI = y
CONFIG_FRAMEBUFFER_CONSOLE = y
CONFIG_EFI_VARS = m
Ein Kernel mit dieser Konfiguration befindet sich derzeit noch nicht in Debian Stable. Sie können entweder Ihren eigenen Kernel backen oder den aus dem Versuchsbaum verwenden. In diesem Fall können Sie den nächsten Absatz überspringen.
Kernel kompilieren
(wahrscheinlich nicht mehr nötig, siehe bearbeiten)
Wenn Sie sich entscheiden, den Kernel zu kompilieren, finden Sie hier kurze Anweisungen dazu. Wenn Sie auf Probleme stoßen, stehen zahlreiche Informationen zum Kompilieren eines Kernels zur Verfügung.
Quelle ermitteln
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Schauen Sie sich eine bestimmte Version an
Git Checkout v3.6
Kernel konfigurieren
make menuconfig
Nehmen Sie die erforderlichen Einstellungen auf Ihrem System vor oder lassen Sie es unverändert, wenn Sie nichts anpassen müssen. Dadurch wird die Kernelkonfiguration in die Datei geschrieben .config
.
Stellen Sie sicher, dass die Einstellungen aus dem vorherigen Absatz festgelegt sind. Es ist auch sinnvoll auszuwählen CONFIG_INPUT_EVBUG=n
. Andernfalls werden Ihre Protokolle mit GiB Junk gefüllt.
Kernel erstellen
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binärer Bogen
Die Pakete werden im übergeordneten Verzeichnis erstellt.
Kernel installieren
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Initramfs erstellen
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 ist die Kernelversion. Standardmäßig wird der laufende Kernel verwendet, was keine gute Wahl ist, da Sie immer noch den alten Kernel ausführen.
Dinge einrichten
Um den Linux-Kernel booten zu können, muss er zusammen mit den initramfs auf das ESP kopiert werden. Vorausgesetzt, das ESP ist bei montiert/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
HINWEIS: Um die Kompatibilität mit den meisten Systemen zu gewährleisten, efi
muss die Erweiterung zum Kernel hinzugefügt werden.
Jetzt kann der Kernel im UEFI registriert werden. Wir benutzen das Tool efibootmgr
dafür.
echo "root = UUID = 3a4287b6-b3a7-4721-da38-acc38a928278 ro rootfstype = ext4 add_efi_memmap initrd = \\ EFI \\ debian \\ initrd.img-3.6.0" |
iconv -f ascii -t ucs2 |
efibootmgr \
--erstellen \
--gpt \
--disk / dev / sda \
- Teil 4 \
--label "Debian Linux Kernel 3.6.0" \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--write-Signatur \
--append-binary-args -
Das Argument von --disk
ist das Gerät, auf dem sich der Kernel befindet, nicht das ESP.
--part
ist die Partitionsnummer, in der sich der Kernel befindet. --label
ist der Eintrag im UEFI-Startmenü.
Um eine Liste der verfügbaren Einträge anzuzeigen, starten Sie einfach efibootmgr
ohne Argumente. Syntax zum Löschen eines bestimmten Eintrags
efibootmgr -b Eintrag (hex) -B
beispielsweise:
efibootmgr -b 001a -B
Diese Anweisungen behandeln nicht den Fall eines Kernel-Updates. Der Kernel und initramfs werden nicht automatisch in das ESP kopiert. Dies kann mithilfe eines kurzen Skripts erfolgen, das den Kernel und initramfs auf das ESP kopiert und ausführt efibootmgr
. Dieses Skript kann eingefügt werden /etc/kernel/postinst.d
, um automatisch gestartet zu werden, nachdem der Kernel aktualisiert wurde.
Hinweis: Ein Bootmanager wie GRUB wird nicht benötigt, UEFI selbst fungiert als Bootmanager.
Das ist alles, was Sie von der Linux-Seite brauchen. Ich weiß nicht, was es braucht, um Windows hinzuzufügen.