Easy way initrd para encadear o carregamento de outro kernel com kexec

4

Eu tenho aqui uma máquina que não inicializa os kernels de 64 bits (tem o efi32 com um pouco de ... firmware incomum).

Atualmente, minha única maneira de inicializar meu sistema Linux de 64 bits é:

  1. Inicializando uma distro de 32 bits a partir de um boot / live cd,
  2. Usando kexec para inicializar meu próprio kernel de 64 bits.

Claro que eu poderia reinstalar uma distro de 32 bits, mas isso não é o que eu quero. Eu quero um combo kernel / initrd de 32bits, que poderia funcionar como um bootloader para o meu kernel / initrd real de 64bits.

Era um sistema initrd mínimo que é capaz de carregar e iniciar meu próprio kernel secundário. Existe alguma solução já existente para o trabalho?

    
por peterh 28.09.2014 / 01:55

2 respostas

1

CONFIG_EFI_MIXED pode ser o que você precisa.

    
por 28.09.2014 / 17:18
2

Um bootloader grub de 32 bits inicializará uma imagem Linux de 64 bits compilada com a opção CONFIG_EFI_MIXED usando os comandos "linux" e "initrd".

Observe que esses comandos do Grub executam os ExitBootServices () do EFI antes de iniciar o kernel. Assim, o kernel não pode usar boot seguro nem pode acessar as ROMs dos slots PCI (mais notavelmente a BIOS da placa gráfica).

Uma alternativa é executar o carregador de inicialização "shim" e depois o Grub e usar os comandos linuxefi e linuxrdefi do Grub. Eles não executam ExitBootServices (), mas chamam um stub EFI no kernel que copia ROMs, etc e chama ExitBootServices () antes de iniciar o kernel. A tentativa de executar o comando "linuxefi" do Grub sem o shim bootloader resulta em um erro "checksum incorreto", independentemente da presença ou não de inicialização segura. Infelizmente esta abordagem tem dois problemas: (1) o kernel deve ser de 32 bits e (2) existe atualmente um bug no stub EFI de 32 bits que impede o kernel de iniciar (ele trava sem saída).

O bug é notório. Além disso, algumas imagens linux de 64 bits falham, sugerindo strongmente algum problema de alinhamento ou substituição de dados.

O único caminho a seguir para obter o resultado desejado é modificar o kernel para que ele possa ser iniciado com um stub EFI de 32 bits e, em seguida, fazer a transição para o kernel de 64 bits. É possível que o autor do CONFIG_EFI_MIXED esteja trabalhando nisso, talvez você possa enviá-los por e-mail.

    
por 08.02.2015 / 07:13