EDIT: Quando ho scritto questa risposta, pochissime distribuzioni sono state spedite con un kernel configurato EFI_STUB, quindi è stato necessario crearne uno personalizzato. Oggi la maggior parte delle distribuzioni distribuisce un kernel opportunamente configurato e non è più necessaria una compilazione personalizzata. In questo caso le sezioni "Configura le tue partizioni" e "Configurare le cose" sono quelle interessanti, "Requisiti" e "Compilazione del kernel" possono essere saltati.
Non so come Windows gestisce UEFI, ma dal lato Debian è piuttosto semplice.
Imposta le tue partizioni
Utilizzare lo schema di partizione GPT, non MBR.
Per eseguire l'avvio da una partizione GPT con UEFI è obbligatoria una partizione di avvio dedicata, denominata EFI SYSTEM PARTITION (ESP). Non è obbligatorio, ma il modo più compatibile è utilizzare una partizione FAT32. Una dimensione di 200 MiB dovrebbe andare bene per la maggior parte dei casi.
Per registrare la partizione come ESP, è necessario contrassegnarla con il boot
flag. Contrariamente agli schemi MBR, il flag di avvio viene utilizzato solo per indicare ESP, non le partizioni da cui è possibile eseguire l'avvio.
UEFI utilizza una struttura di directory \EFI\<vendor>\<application>.efi
per archiviare le applicazioni UEFI. Un separatore di directory è indicato da una barra rovesciata , anche su Linux. potrebbe essere un nome di distribuzione, il valore effettivo non è rilevante per l'UEFI.
Le applicazioni possono essere utilità di sistema come controllori di memoria o shell UEFI. Può anche essere un caricatore del sistema operativo o il sistema operativo stesso. Queste applicazioni devono essere registrate nell'UEFI per poter essere avviate all'avvio.
Requisiti
La versione del kernel Linux> = 3.3 può essere caricata direttamente dall'UEFI. Il kernel può fungere da proprio caricatore. Questo si chiama EFISTUB . Sono necessarie le seguenti configurazioni del kernel.
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
Un kernel con questa configurazione non è attualmente in Debian stable, ancora. Puoi creare il tuo kernel o usare quello dall'albero sperimentale in quel caso puoi saltare il paragrafo successivo.
Compilare il kernel
(probabilmente non è più necessario, vedi modifica)
Se decidi di compilare il kernel qui ci sono brevi istruzioni su come farlo. In caso di problemi, sono disponibili molte informazioni su come compilare un kernel.
Ottenere la fonte
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Dai un'occhiata a una versione particolare
git checkout v3.6
Configurare il kernel
fare menuconfig
Effettua le impostazioni necessarie sul tuo sistema o lascialo così com'è se non hai nulla da personalizzare. Questo scrive la configurazione del kernel nel file .config
.
Assicurarsi che le impostazioni del paragrafo precedente siano impostate. Ha anche senso selezionare CONFIG_INPUT_EVBUG=n
. Altrimenti i tuoi log saranno riempiti con GiB di spazzatura.
Compilare il kernel
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binary-arch
I pacchetti vengono creati nella directory principale.
Installazione del kernel
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Costruire initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 è la versione del kernel. L'impostazione predefinita è il kernel in esecuzione, che non è una buona scelta, poiché si sta ancora eseguendo il vecchio kernel.
Preparare le cose
Per poter avviare il kernel Linux, deve essere copiato nell'ESP insieme a initramfs. Dato che l'ESP è montato su/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
NOTA: per garantire la compatibilità con la maggior parte dei sistemi, l'estensione efi
deve essere aggiunta al kernel.
Ora il kernel può essere registrato nell'UEFI. Usiamo lo strumento efibootmgr
per quello.
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 \
--creare \
--gpt \
--disk / dev / sda \
--parte 4 \
--label "Debian Linux kernel 3.6.0" \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--write-signature \
--append-binary-args -
L'argomento di --disk
è il dispositivo in cui risiede il kernel, non l'ESP.
--part
è il numero di partizione in cui risiede il kernel. --label
è la voce nel menu di avvio UEFI.
Per visualizzare un elenco delle voci disponibili, basta avviare efibootmgr
senza argomenti. Sintassi per eliminare una voce specifica
efibootmgr -b entry (hex) -B
per esempio:
efibootmgr -b 001a -B
Queste istruzioni non gestiscono il caso di un aggiornamento del kernel. Il kernel e initramfs non vengono copiati automaticamente nell'ESP. Questo può essere fatto usando un breve script che copia il kernel e initramfs su ESP ed esegue efibootmgr
. Questo script può essere inserito /etc/kernel/postinst.d
per essere lanciato automaticamente dopo l'aggiornamento del kernel.
Nota: non è necessario un boot manager come GRUB, la stessa UEFI funge da boot manager.
Questo è tutto ciò che serve dal lato Linux, non so cosa ci vuole per aggiungere Windows.