Grub 2 erkennt Multiboot-Header im Kernel nicht

Ich habe ein Problem mit Grub 2 (und QEMUs)-kernel) Den Multiboot v1-Header in meinem Kernel nicht erkennen. Ich habe den Header in einem separaten Abschnitt vor.text.

linker.ld:

SECTIONS
{
    . = 1M;

    .multiboot ALIGN(4K) :
    {
        *(.multiboot)
    }

    .text ALIGN(4K) :
    {
        *(.text)
    }

    [snip]

boot.s (GNU als Syntax):

.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]

Ich habe überprüft, dass der Header-Abschnitt wie mit der magischen Nummer angegeben hinzugefügt wird:

kernel.bin:     file format elf32-i386

Contents of section .multiboot:
 101000 02b0ad1b 03000000 fb4f52e4           .........OR.    
Contents of section .text:
 [snip]

Dennoch sagt Grub 2, dass der Kernel keinen gültigen Multiboot-Header hat und QEMUs verwendet-kernel Option verursacht:

qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000

Dies scheint eine Adresse im BIOS-Bereich zu sein, nicht dort, wo Multiboot sein sollte.

Ich habe mit dem üblichen Code in Bran's und OSDev (plus einem früheren Kernel von mir) verglichen, aber ich kann nicht herausfinden, was ich falsch mache.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage