Naar inhoud springen

Ontwerp en bouw een besturingssysteem/Hallo wereld/De eerste test

Uit Wikibooks

Voordat we onze code kunnen testen, moeten we het assembleren en linken tot één bestand. Het assembleren doen we met nasm en linken met ld. Om het linken goed te laten verlopen, moeten we een linkbestand maken, waarin we de linker vertellen hoe ons kernelbestand in elkaar gezet moet worden.

Linkbestand

[bewerken]

Ons kernelbestand heeft drie secties ('.text', '.data' en '.bss'), en begint in het geheugen op de 1 MiB grens (.text 0x00100000 :0). Het bestand begint bij het label start (ENTRY(start)). De drie secties zijn uitgelijnd op een 4 KiB grens (. = ALIGN(4096)).

link.ld

ENTRY(start)
SECTIONS
{
    .text 0x00100000 :
    {
        code = .; _code = .; __code = .;
        *(.text)
	*(.rodata)
	*(.rdata)
        . = ALIGN(4096);
    }
    .data :
    {
        data = .; _data = .; __data = .;
        *(.data)
        . = ALIGN(4096);
    }
    .bss :
    {
        bss = .; _bss = .; __bss = .;
        *(.bss)
        . = ALIGN(4096);
    }
    end = .; _end = .; __end = .;
}

Assembleren en linken

[bewerken]

Om start.asm te assembleren, moeten we nasm aanroepen. We willen dat het uitvoerformaat 'elf' wordt (-f elf), want GRUB, de bootloader die we gaan gebruiken, kan daar goed mee overweg. Het te maken objectbestand is start.o (-o start.o) en het enige te assembleren bestand is nu start.asm. Als je fouten tegenkomt, verhelp die dan voordat je verder gaat.

nasm -f elf -o start.o start.asm

Als we dit gedaan hebben, hebben we een start.o bestand er bij. Dit moet nog gelinkt worden; dan worden alle onbekende symbolen opgelost en komt er een uitvoerbaar bestand uit. Het linkbestand is link.ld (-T link.ld) en de te maken binary is kernel.bin (-o kernel.bin). Het enige objectbestand is start.o. Ook hier kunnen fouten ontstaan. Verhelp die eerst voordat je verder gaat.

ld -T link.ld -o kernel.bin start.o
InformatieFoutmelding?
Als je één van de volgende meldingen krijgt, kijk dan eens in het hoofdstuk Toolchain voor informatie over hoe je een cross-platform toolchain maakt, en gebruik dan de ld uit de toolchain (bijv. i586-elf-ld).
ld: i386 architecture of input file 'start.o' is incompatible with xxx output
start.o: file not recognized: File format not recognized


Nu hebben we een kernel.bin bestand, maar we kunnen het nog niet starten. In het volgende hoofdstuk staat hoe kernel.bin op een CD image kan worden gezet. Als het goed is verschijnt het menu van GRUB dan op je scherm. Als het besturingssysteem dan start, verschijnt er eventueel nog wat GRUB uitvoer, en daarna een knipperende cursor.

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.