Estou tentando adicionar suporte a UEFI na versão de 64 bits do Minimal Linux Live por um bom tempo, infelizmente sem muito sucesso. Como você pode ver na imagem abaixo, recebo erro crítico sempre que tento inicializar via UEFI.
Foioquefizparachegaraesteponto:
- Eubaixeio syslinux-6.0.3 .
- Eu segui as instruções aqui e copiei
efi64/efi/syslinux.efi
para \EFI\BOOT\BOOTX64.EFI
.
- também copiei
efi64/com32/elflink/ldlinux/ldlinux.e64
para \EFI\BOOT\LDLINUX.E64
.
- Eu criei uma máquina virtual no VirtualBox (versão 5.0.20) e habilitei o UEFI.
- Gerei uma nova imagem ISO (todos os arquivos de configuração ISOLINUX estão na pasta raiz, veja a captura de tela) e a coloque como mídia inicializável primária na máquina virtual.
- Após a inicialização, recebi imediatamente o erro que você vê na captura de tela.
- Neste momento, tive de renomear
\EFI\BOOT\BOOTX64.EFI
para \EFI\BOOT\BOOTX641.EFI
para "quebrar" o processo de inicialização e retornar ao shell UEFI.
- No shell UEFI, usei o comando
edit
e, em seguida, naveguei para a pasta \EFI\BOOT
.
- Invoquei manualmente
BOOTX641.EFI
e acabei com o mesmo erro que você pode ver.
Então, posso concluir que meu stub EFI está sendo executado, mas algo quebra durante o processo de execução e, a essa altura, não sei o que está errado.
Eu verifiquei a estrutura da imagem ISO do CD de resgate do sistema que sei que suporta UEFI e notei o seguinte:
- A estrutura da EFI contém apenas um arquivo:
\efi\boot\bootx64.efi
.
- O tamanho de
\efi\boot\bootx64.efi
é de 724KB, enquanto o arquivo correspondente no Syslinux 6,03 efi64/efi/syslinux.efi
é ~ 200KB, então esse definitivamente não é o mesmo arquivo.
- Quando copiei
\efi\boot\bootx64.efi
do "System Rescue CD" e usei-o na estrutura EFI em "Minimal Linux Live", o processo de inicialização do UEFI foi bom ao ponto em que me foi apresentado o shell do GRUB 2.
Foi assim que descobri que o arquivo \efi\boot\bootx64.efi
em "System Rescue CD" possui suporte integrado ao GRUB 2, portanto, deve ser uma solução personalizada.
Então, o problema em poucas palavras - estou usando o pacote Syslinux vanilla e gostaria de criar uma configuração compatível com UEFI que inicialize uma imagem ISO simples. Seguir as instruções oficiais não parece funcionar para mim.
Todas as sugestões são muito apreciadas! Obrigada!
Nota 1: A imagem ISO inicializa bem no modo BIOS. Não há problema aí.
Nota 2: O mais provável é que este não seja um bug no VirtualBox porque outros sistemas operacionais (por exemplo, Ubuntu e Linux Mint) inicializam bem no modo UEFI.
EDIT 1 - (Jan-2017):
Já faz muito tempo sem responder, então eu implementei a minha solução de maneira bem diferente:
- Eu não uso
Syslinux
no modo de inicialização UEFI.
- Eu compilei meu kernel Linux com o stub EFI.
- Eu criei o script simples
startup.nsh
que é executado automaticamente após a inicialização do UEFI.
- O mesmo script carrega o kernel e o initramfs.
Desta forma, perco um pouco da funcionalidade de arranque, por ex. vga=ask
, que funciona bem em Syslinux
, mas não funciona no modo UEFI, já que essa opção de inicialização específica requer o carregador de inicialização adequado do Linux.
Apesar de eu ter uma solução que funciona bem, a questão ainda está em aberto.
EDIT 2 - (Dez-2017):
Isso é adicionado à atualização anterior. A solução com startup.nsh
funciona somente se o sistema UEFI tiver 'UEFI Shell' (de acordo com as especificações UEFI, o firmware pode ou não fornecer shell) e somente se esse shell tiver nível de suporte 1 ou superior. Além disso, não há garantia de que o script de inicialização será executado, porque a maneira correta de fornecer ESP na imagem ISO é através da imagem de inicialização 'El Torito'. Fornecer estrutura compatível com ESP diretamente na imagem ISO parece funcionar bem em determinados firmwares, mas não é uma solução universal.
A questão ainda está em aberto, mas enquanto isso eu consegui integrar systemd-boot e não considero mais esse problema como alto prioridade.