Ich behelfe mich zurzeit mit ld's Flags (--architecture=i386:i386 --entry=_start --output=elf32-i386 (Ich finde leider kein Kommando, um die Multiboot-Sektion in .text einzubinden, hab deshalb das ganze mal ohne eigene Sektion implentiert)
Mein alter Skript:
/* Bei _start soll die Ausfuehrung losgehen */
ENTRY(_start)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)
/*
* Hier wird festgelegt, in welcher Reihenfolge welche Sektionen in die Binary
* geschrieben werden sollen
*/
SECTIONS
{
/*
* . ist die aktuelle Position in der Datei. Wir wollen den Kernel wie gehabt
* an 1 MB laden, also muessen wir dort die erste Sektion hinlegen
*/
. = 0x100000;
/*
* Der Multiboot-Header muss zuerst kommen (in den ersten 8 kB).
* Die Standardsektionen einfach hintereinander weg einbinden.
*/
.text : {
*(multiboot)
*(.text)
}
.data ALIGN(4096) : {
*(.data)
}
.rodata ALIGN(4096) : {
*(.rodata)
}
.bss ALIGN(4096) : {
*(.bss)
}
}
GRUB gibt Error 28 (Item can't fit into memory). Komisch, eigentlich ist die Datei sogar noch kleiner als zuvor...
EDIT: Ich Depp! Hab glatt -Ttext vergessen ... gleich mal korrigieren.
EDIT2: Ok, vergesst das mit Error 28. Funzt jetzt.