O QEMU não pode mais inicializar o kernel Linux construído localmente

1

Desde ontem, não consigo mais iniciar o qemu com um kernel externo compilado no meu laptop (executando o Arch Linux).

Se eu compilar um kernel Linux vanilla (versão 4.13, do repositório github de Linus Torvalds), tente inicializar qemu desta maneira:

qemu-system-x86_64 --enable-kvm -boot c -kernel arch/x86/boot/bzImage

Isso inicia a exibição, mostrando essa saída do SeaBIOS sendo atualizada a cada 2-3 segundos:

   Booting from ROM...
   Probing EDD (edd=off to disable)... ok
   early console in extract_kernel
   input_data: 0x0000000002c773b4
   input_len: 0x000000000090c470
   output: 0x0000000001000000
   output_len: 0x000000000173a968
   kernel_total_size: 0x00000000025a7000

   Decompressing Linux... Parsing ELF...

Se eu adicionar esses sinalizadores a qemu para habilitar a saída de depuração do SeaBIOS:

-chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios

Recebo esta saída que continua repetindo: link

Engraçado, se eu compilar o mesmo kernel, com o mesmo arquivo de configuração em outra máquina (rodando o Debian) e copiar o bzImage para a minha máquina, ele inicializa muito bem. Então eu acho que algo aconteceu no meu toolchain. Houve uma atualização de gcc recentemente, mas voltar para a versão anterior do pacote (a que eu tinha quando não havia problema) não resolve o problema.

Como uma solução temporária, eu pensei que poderia compilar na máquina Debian usando distcc para evitar copiar arquivos, mas o problema ainda ocorre, então eu acho que o problema está nas etapas finais do processo de compilação ( da ligação até o fim, já que isso acontece no meu laptop).

Informação adicional:

  • gcc version no meu laptop (ArchLinux): 8.2.0 (pkg version = 8.2.0-2)
  • gcc version na minha máquina Debian: 6.3.0 (pkg version = 4: 6.3.0-4)

Editar : saída SeaBIOS concluída

    
por rgouicem 08.08.2018 / 17:48

1 resposta

0

Eu tive o mesmo problema. No meu caso, isso foi causado pela atualização do binutils para o 2.31. A julgar pela data em que você postou sua pergunta, não é improvável que você tenha acabado de instalar a atualização arch linux binutils para 2.31 de 2 de agosto, que combina muito bem.

Você precisa de este commit para kernels anteriores a 4.16.

binutils 2.31 alterou os padrões do vinculador ( ld ) de tal forma que o padrão para max-page- o tamanho foi diminuído de 2 MiB para 4 kB. Esta alteração quebra o kernel x86_64, a menos que o commit seja aplicado.

    
por 14.09.2018 / 11:20