Grub 2 não detectando o cabeçalho Multiboot no kernel
Estou tendo um problema com o Grub 2 (e o QEMU-kernel
) não detectando o cabeçalho Multiboot v1 no meu kernel. Eu tenho o cabeçalho em uma seção separada antes.text
.
linker.ld
:
SECTIONS
{
. = 1M;
.multiboot ALIGN(4K) :
{
*(.multiboot)
}
.text ALIGN(4K) :
{
*(.text)
}
[snip]
boot.s
(GNU como sintaxe):
.set MAGIC, 0x1badb002
.set FLAGS, (1<<0 | 1<<1) # align, provide mem map
.set CHECKSUM, -(MAGIC + FLAGS)
.section .multiboot
.long MAGIC
.long FLAGS
.long CHECKSUM
.section .text
[snip]
Eu verifiquei que a seção de cabeçalho está sendo adicionada conforme especificado com o número mágico:
kernel.bin: file format elf32-i386
Contents of section .multiboot:
101000 02b0ad1b 03000000 fb4f52e4 .........OR.
Contents of section .text:
[snip]
No entanto, o Grub 2 diz que o kernel não tem um cabeçalho Multiboot válido e usa o QEMU-kernel
opção faz com que:
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000
que parece ser um endereço no intervalo mapeado pelo BIOS, não onde deveria ser o Multiboot.
Eu comparei com o código usual em Bran e OSDev (além de um kernel anterior), mas não consigo descobrir o que estou fazendo de errado.