EDITAR: cuando escribí esta respuesta, muy pocas distribuciones se enviaron con un kernel configurado EFI_STUB, por lo que uno tuvo que construir uno personalizado. Hoy en día, la mayoría de las distribuciones envían un kernel configurado adecuadamente y ya no se requiere una compilación personalizada. En este caso, las secciones “Configurar sus particiones” y “Configurar cosas” son interesantes, se pueden omitir “Requisitos” y “Compilar el núcleo”.
No sé cómo Windows maneja UEFI, pero desde el lado de Debian es bastante sencillo.
Configura tus particiones
Use el esquema de partición GPT, no MBR.
Para arrancar desde una partición GPT con UEFI se requiere una partición de arranque dedicada, llamada EFI SYSTEM PARTITION (ESP). No es obligatorio, pero la forma más compatible es usar una partición FAT32. Un tamaño de 200 MiB debería estar bien para la mayoría de los casos.
Para registrar la partición como ESP, debe marcarse con la boot
bandera. A diferencia de los esquemas MBR, el indicador de inicio solo se usa para indicar el ESP, no las particiones desde las que se puede iniciar.
UEFI utiliza una estructura de directorio \EFI\<vendor>\<application>.efi
para almacenar aplicaciones UEFI. Un separador de directorio se denota con una barra diagonal inversa , incluso en Linux. podría ser un nombre de distribución, el valor real no es relevante para la UEFI.
Las aplicaciones pueden ser utilidades del sistema, como verificadores de memoria o un shell UEFI. También puede ser un cargador de sistema operativo o el propio sistema operativo. Estas aplicaciones deben registrarse en la UEFI para poder iniciarse en el momento del arranque.
Requisitos
La versión del kernel de Linux> = 3.3 puede ser cargada directamente por el UEFI. El kernel puede actuar como su propio cargador. Esto se llama EFISTUB . Se necesitan las siguientes configuraciones de 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 núcleo con esta configuración no está actualmente en Debian estable, todavía. Puede hornear su propio núcleo o usar el del árbol experimental en ese caso, puede omitir el siguiente párrafo.
Compilando el núcleo
(probablemente ya no sea necesario, ver editar)
Si decide compilar el núcleo, aquí encontrará instrucciones breves sobre cómo hacerlo. Si tiene problemas, hay mucha información disponible sobre cómo compilar un núcleo.
Obteniendo la fuente
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Mira una versión en particular
git checkout v3.6
Configurando el núcleo
hacer menuconfig
Realice los ajustes necesarios en su sistema o déjelo como está si no tiene nada que personalizar. Esto escribe la configuración del kernel en el archivo .config
.
Asegúrese de que la configuración del párrafo anterior esté establecida. También tiene sentido seleccionar CONFIG_INPUT_EVBUG=n
. De lo contrario, sus registros se llenarán con GiB de basura.
Núcleo de construcción
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binary-arch
Los paquetes se crean en el directorio principal.
Instalando kernel
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Construyendo initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 es la versión del kernel. El valor predeterminado es el kernel en ejecución, que no es una buena opción, ya que todavía está ejecutando el kernel anterior.
Preparando las cosas
Para poder arrancar el kernel de Linux, debe copiarse al ESP junto con initramfs. Dado que el ESP está montado en/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
NOTA: Para garantizar la compatibilidad con la mayoría de los sistemas, la extensión efi
debe agregarse al núcleo.
Ahora el núcleo se puede registrar en la UEFI. Usamos la herramienta efibootmgr
para eso.
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 \
--crear \
--gpt \
--disk / dev / sda \
--parte 4 \
- etiqueta "Debian Linux kernel 3.6.0" \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--escribir-firma \
--append-binary-args -
El argumento de --disk
es el dispositivo donde reside el núcleo, no el ESP.
--part
es el número de partición donde reside el núcleo. --label
es la entrada en el menú de arranque UEFI.
Para ver una lista de las entradas disponibles, simplemente inicie efibootmgr
sin argumentos. Sintaxis para eliminar una entrada particular
efibootmgr -b entrada (hexadecimal) -B
por ejemplo:
efibootmgr -b 001a -B
Estas instrucciones no manejan el caso de una actualización del kernel. El kernel y initramfs no se copian automáticamente al ESP. Esto se puede hacer usando un script corto que copia el kernel y initramfs al ESP y se ejecuta efibootmgr
. Este script se puede colocar /etc/kernel/postinst.d
para que se inicie automáticamente después de que se haya actualizado el núcleo.
Nota: No se necesita un administrador de arranque como GRUB, el propio UEFI actúa como administrador de arranque.
Eso es todo lo que necesita del lado de Linux, no sé qué se necesita para agregar Windows.