Inicializa o arquivo ISO através de uEFI chamando o executável EFI dentro da iso

4

Eu quero criar um pendrive que eu possa usar para inicializar vários arquivos iso. Eu quero fazer isso através de uEFI.

O stick usb seria algo como isto:

/EFI
  /bootx64.efi
  /something.conf
/isos
  /foo.iso
  /bar.iso
  ...

Aqui, /isos contém vários arquivos iso inicializáveis por uEFI. Pelo que entendi, estas isos têm um arquivo /EFI/BOOT<some arch>.efi que o carregador de uEFI normalmente executaria.

Na unidade /EFI/bootx64.efi , alguns devem ser determinados efi booloader e /EFI/something.conf é seu arquivo de configuração.

O que eu preciso é de algum executável do uEFI que possa de alguma forma chamar /EFI/BOOT<some arch>.efi dentro de um dos arquivos iso. Eu não sei se isso é teoricamente possível.

Eu sei que algo semelhante pode ser feito com o GRUB2, mas requer a especificação da imagem do Linux, suas opções e o arquivo initrd. Isto é diferente de um iso para o outro e, às vezes, não funciona de todo. Minha esperança é que, chamando /EFI/BOOT<some arch>.efi , eu não tenho que especificar isso e eu posso ter uma receita para inicializar qualquer imagem iso.

Minha pergunta é: Existe um carregador de inicialização uEFI que pode me chamar um executável EFI localizado dentro de um arquivo iso?

    
por Boris Bera 26.07.2015 / 03:13

3 respostas

1

Isso não funcionará para todos os ISOs, mas você pode usar MEMDISK do syslinux para copiar o ISO na memória como uma imagem RAMDISK. As chamadas do BIOS verão o RAMDISK, e o linux também reconhecerá o RAMDISK. Para fazer isso, você terá que copiar o syslinux.efi e os arquivos associados em algum lugar na partição do sistema EFI (ESP), como EFI/syslinux . Em seguida, em /EFI/syslinux/syslinux.cfg , crie um monte de opções de memória de memdisk para seus arquivos ISO, ao longo das linhas dos exemplos no Página MEMDISK .

    
por 26.07.2015 / 20:19
1

Sim e não. Você pode inicializar em um ambiente de pré-inicialização ( grub , iPXE e etc) , mas isso simplesmente complicará as coisas. A maioria dos discos ao vivo não tem os arquivos que você está falando - não exatamente. O que a maioria dos discos iso-híbridos fazem é algo como o que é descrito na outra resposta aqui - eles montam um arquivo de imagem onde os executáveis reais estão em um dispositivo de loop em um disco RAM e depois chamam esse kernel. O ponto de toda essa complicação deveria ser a compatibilidade com os sistemas BIOS. Se isso não é uma preocupação sua, você provavelmente faria melhor apenas para extrair alguns arquivos de cada iso e fazer o boot dirwctly. Em um sistema EFI - porque o firmware é seu bootloader nesse caso.

Então, o que você quer é um dispositivo USB formatado em FAT. Você pode montar as isos em questão, encontrar seu arquivo de imagem raiz x86 .sfs , encontrar seus initramfs e kernel (você provavelmente precisará montar outra imagem dentro da montagem iso) / em> - e é sobre isso. O kernel do Linux é um executável da EFI - você não precisa de um gerenciador de inicialização, porque o firmware pode executar o seu kernel. E o primeiro sistema de arquivos raiz do kernel é montado a partir da imagem initramfs. A próxima é o arquivo .sfs. É assim que funciona.

É meio vago aqui, mas há um passo a passo bem detalhado de fazer algo semelhante com uma mídia de instalação do Arch Linux aqui .

(o processo difere muito pouco pela distribuição em geral)

    
por 26.07.2015 / 23:48
0

Quando você inicializa diretamente de um ISO, assim que o kernel do linux é carregado, ele precisará obter os squashfs dentro do ISO. Para fazer isso, o kernel e os scripts do Linux precisarão montar o ISO como um dispositivo de loop. Para fazer isso, ele precisa conhecer o caminho e o nome do arquivo ISO. O caminho completo é normalmente especificado nos parâmetros do kernel, por ex. iso-scan/filename=/images/ubuntux64.iso

Alguns ISOs do Ubuntu contêm um arquivo /boot/grub/loopback.cfg e esperam que uma variável grub2 já tenha sido predefinida com o caminho completo do arquivo ISO.

Portanto, com esses arquivos ISO, temos uma maneira genérica de fazer com que eles inicializem - basta configurar a variável grub2 com o caminho completo do arquivo ISO e executar o arquivo loopback.cfg .

Portanto, é possível ter um arquivo grub2.cfg , que lista todos os arquivos ISO na pasta /images , e permite ao usuário escolher um deles e inicializá-lo. O único problema é que eles precisam conter o arquivo / boot/grub/loopback.cfg e muito poucos ISOs que não são do Ubuntu!

Se apenas mais desenvolvedores de distro incluírem um arquivo loopback.cfg dentro de seus ISOs, então o que você quer seria possível!

O

link pode ajudar. Também link

    
por 18.02.2017 / 18:06