EDIT: Quando escrevi esta resposta, poucas distribuições foram enviadas com um kernel configurado para EFI_STUB; portanto, foi necessário criar um personalizado. Atualmente, a maioria das distribuições envia um kernel configurado adequadamente e uma compilação personalizada não é mais necessária. Nesse caso, as seções “Configurar suas partições” e “Configurando as coisas” são as mais interessantes, “Requisitos” e “Compilando o kernel” podem ser puladas.
Não sei como o Windows lida com UEFI, mas do lado do Debian é bem direto.
Configure suas partições
Use o esquema de partição GPT, não MBR.
Para inicializar a partir de uma partição GPT com UEFI, é necessária uma partição de inicialização dedicada, chamada EFI SYSTEM PARTITION (ESP). Não é obrigatório, mas a maneira mais compatível é usar uma partição FAT32. Um tamanho de 200 MiB deve ser bom para a maioria dos casos.
Para registrar a partição como um ESP, ela deve ser sinalizada com a boot
sinalização. Ao contrário dos esquemas MBR, o sinalizador de inicialização é usado apenas para indicar o ESP, não as partições para as quais é possível inicializar.
O UEFI usa uma estrutura de diretórios \EFI\<vendor>\<application>.efi
para armazenar aplicativos UEFI. Um separador de diretório é indicado por uma barra invertida , mesmo no Linux. pode ser um nome de distribuição, o valor real não é relevante para a UEFI.
Os aplicativos podem ser utilitários de sistema, como verificadores de memória ou um shell UEFI. Também pode ser um carregador de SO ou o próprio sistema operacional. Esses aplicativos precisam ser registrados na UEFI para poderem ser iniciados no momento da inicialização.
Exigências
A versão do kernel do Linux> = 3.3 pode ser carregada diretamente pelo UEFI. O kernel pode atuar como seu próprio carregador. Isso é chamado EFISTUB . As seguintes configurações do kernel são necessárias.
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
Um kernel com esta configuração ainda não está estável no Debian. Você pode assar seu próprio kernel ou usar o da árvore experimental; nesse caso, você pode pular o próximo parágrafo.
Compilando o kernel
(provavelmente não é mais necessário, veja editar)
Se você decidir compilar o kernel, aqui estão breves instruções sobre como fazer isso. Se você tiver problemas, há muitas informações disponíveis sobre como compilar um kernel.
Obtendo a fonte
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Confira uma versão específica
git checkout v3.6
Configurando o kernel
fazer menuconfig
Faça as configurações necessárias em seu sistema ou deixe como está, se você não tiver nada para personalizar. Isso grava a configuração do kernel no arquivo .config
.
Verifique se as configurações do parágrafo anterior estão definidas. Também faz sentido selecionar CONFIG_INPUT_EVBUG=n
. Caso contrário, seus logs serão preenchidos com GiB de lixo eletrônico.
Construindo o kernel
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binário-arco
Os pacotes são criados no diretório pai.
Instalando o kernel
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Construindo initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 é a versão do kernel. O padrão é o kernel em execução, o que não é uma boa escolha, pois você ainda está executando o kernel antigo.
Configurando as coisas
Para poder inicializar o kernel do Linux, ele deve ser copiado para o ESP junto com o initramfs. Dado que o ESP está montado em/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
NOTA: Para garantir a compatibilidade com a maioria dos sistemas, a extensão efi
deve ser adicionada ao kernel.
Agora o kernel pode ser registrado no UEFI. Nós usamos a ferramenta efibootmgr
para isso.
eco "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 \
--crio \
--gpt \
--disk / dev / sda \
--part 4 \
--label "Kernel Debian Linux 3.6.0" \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--write-signature \
--append-binary-args -
O argumento de --disk
é o dispositivo em que o kernel reside, não o ESP.
--part
é o número da partição em que o kernel reside. --label
é a entrada no menu de inicialização UEFI.
Para ver uma lista das entradas disponíveis, basta iniciar efibootmgr
sem argumentos. Sintaxe para excluir uma entrada específica
efibootmgr -b entrada (hex) -B
por exemplo:
efibootmgr -b 001a -B
Essas instruções não tratam do caso de uma atualização do kernel. O kernel e o initramfs não são copiados automaticamente para o ESP. Isso pode ser feito usando um script curto que copia o kernel e o initramfs para o ESP e é executado efibootmgr
. Este script pode ser colocado /etc/kernel/postinst.d
para ser iniciado automaticamente após a atualização do kernel.
Nota: Não é necessário um gerenciador de inicialização como o GRUB, o próprio UEFI atua como um gerenciador de inicialização.
É tudo o que você precisa do lado do Linux, não sei o que é necessário para adicionar o Windows.