Qual é a maneira correta de usar o ISOLINUX com o UEFI?

6

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:

  1. Eubaixeio syslinux-6.0.3 .
  2. Eu segui as instruções aqui e copiei efi64/efi/syslinux.efi para \EFI\BOOT\BOOTX64.EFI .
  3. também copiei efi64/com32/elflink/ldlinux/ldlinux.e64 para \EFI\BOOT\LDLINUX.E64 .
  4. Eu criei uma máquina virtual no VirtualBox (versão 5.0.20) e habilitei o UEFI.
  5. 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.
  6. Após a inicialização, recebi imediatamente o erro que você vê na captura de tela.
  7. 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.
  8. No shell UEFI, usei o comando edit e, em seguida, naveguei para a pasta \EFI\BOOT .
  9. 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:

  1. A estrutura da EFI contém apenas um arquivo: \efi\boot\bootx64.efi .
  2. 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.
  3. 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.

    
por Ivan Davidov 24.05.2016 / 18:08

1 resposta

2

Parece mais que o System Rescue CD usa o GRUB, não o syslinux. Meu grub64.efi é de cerca de 1MB, mas imagino que você possa construí-lo com menos módulos incluídos.

A imagem que você copiou é chamada syslinux.efi, então eu não a chamaria isolinux. Espero que procure um arquivo chamado syslinux.cfg , não isolinux.cfg . (o isolinux irá retornar para syslinux.cfg ).

Também noto que você diz "todos os arquivos de configuração do ISOLINUX estão na pasta raiz". Não sei dizer como você criou o ISO. Lembre-se de que o gerenciador de inicialização precisa estar em uma imagem de inicialização especial , não na árvore de diretórios exibida se você montar o sistema de arquivos iso9660. Obviamente, o VirtualBox está inicializando algo, então esse não é o problema aqui, mas se for mais permissivo do que outros sistemas, então você ainda pode estar fazendo a coisa "errada".

As imagens híbridas de inicialização criadas por "várias distribuições populares do Linux" são muito divertidas de se ler, mas a última vez que li isso não foi possível ter uma única imagem suportando todo o Mac, EFI de 32 bits. Há pelo menos firmwares que vêem várias das imagens de inicialização e pedem ao usuário para escolher entre "1" e "2". Apenas uma nota antes que alguém tente ir à toca do coelho, pelo menos com o suporte específico do Mac, pode ser mais seguro apenas implementar as partes que você pode testar.

    
por 24.05.2016 / 18:52