Ontwerp en bouw een besturingssysteem/Hallo wereld/De eerste test: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Virtlink (overleg | bijdragen)
Pagina aangemaakt: "{{beg}} Voordat we onze code kunnen testen, moeten we het compileren en linken tot één bestand. Het compileren doen we met ''gcc'' en linken met ''ld''. Om het linken goed te..."
 
Virtlink (overleg | bijdragen)
herschreven
Regel 1:
Voordat we onze code kunnen testen, moeten we het compilerenassembleren en linken tot één bestand. Het compilerenassembleren doen we met ''gccnasm'' en linken met ''ld''. Om het linken goed te laten verlopen, moeten we een link-bestandlinkbestand maken, waarin we de linker vertellen hoe ons besturingssysteemkernelbestand in elkaar gezet moet worden.
{{beg}}
 
== Linkbestand ==
Voordat we onze code kunnen testen, moeten we het compileren en linken tot één bestand. Het compileren doen we met ''gcc'' en linken met ''ld''. Om het linken goed te laten verlopen, moeten we een link-bestand maken, waarin we de linker vertellen hoe ons besturingssysteem in elkaar gezet moet worden.
Ons kernelbestand heeft drie secties ('text', 'data' en 'bss'), en begint in het geheugen op de 1 MiB grens (<code>phys = 0x00100000</code>). Het is een plat, binair bestand (<code>OUTPUT_FORMAT("binary")</code>), en de code begint bij het label <tt>start</tt> (<code>ENTRY(start)</code>). De drie secties zijn uitgelijnd op een 4 KiB grens.
 
{{Code|Titel=link.ld|Code=<pre>
OUTPUT_FORMAT("binary")
ENTRY(start)
phys = 0x00100000;
SECTIONS
{
.text phys : AT(phys)
{
code = .;
*(.text)
*(.rodata*)
. = ALIGN(4096);
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .;
}</pre>}}
 
== Assembleren en linken ==
Om <tt>start.asm</tt> te assembleren, moeten we <tt>nasm</tt> aanroepen. We willen dat het uitvoerformaat 'aout' wordt (<code>-f aout</code), want dichterbij een échte platte binary kunnen we niet komen. Het te maken objectbestand is <tt>start.o</tt> (<code>-o start.o</code>) en het enige te assembleren bestand is nu <tt>start.asm</tt>. Als je fouten tegenkomt, verhelp die dan voordat je verder gaat.
<pre>
nasm -f aout -o start.o start.asm
</pre>
<!-- Mogelijke fout(en): Op een 64-bit computer proberen te compileren? -->
 
Als we dit gedaan hebben, hebben we een <tt>start.o</tt> bestand er bij. Dit moet nog gelinkt worden; dan worden alle onbekende symbolen opgelost en komt er een uitvoerbaar bestand uit. Het linkbestand is <tt>link.ld</tt> (<code>-T link.ld</code>) en de te maken binary is <tt>kernel.bin</tt> (<code>-o kernel.bin</code>). Het enige objectbestand is <tt>start.o</tt>. Ook hier kunnen fouten ontstaan. Verhelp die eerst voordat je verder gaat.
<pre>
ld -T link.ld -o kernel.bin start.o
</pre>
<!-- Mogelijke fout(en): ? -->
 
Nu hebben we een <tt>kernel.bin</tt> bestand, maar we kunnen het nog niet starten. In het hoofdstuk [[../Bootloader instellen|Bootloader instellen]] hebben we al een diskette(image) gemaakt met de bootloader en de configuratie erop. We moeten nu nog het <tt>kernel.bin</tt> bestand op de diskette kopiëren. Als je een disketteimage gebruikt, kijk dan in het hoofdstuk [[../Bootloader instellen|Bootloader instellen]] hoe je de disketteimage via een loopback apparaat kan gebruiken.
 
== Testen ==
Alles is klaar: we hebben een diskette met de bootloader en de kernel binary erop, en alles is ingesteld. We kunnen nu gaan testen. Als je een fysieke testcomputer gebruikt, steek dan de diskette in het diskettestation en start de computer op. Als je daarentegen een emulator gebruikt, kijk dan bij [[../../Werkomgeving en hulpmiddelen/Emulator|Emulator]] voor informatie over hoe je de emulator kan instellen en gebruiken om de disketteimage te lezen.
 
Als het goed is wordt de diskette gelezen, en verschijnt het menu van GRUB op je scherm. Je kan hier kiezen voor je besturingssysteem. Als je dat doet, eindig je (als het goed is) met een zwart scherm. Gefeliciteerd!
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.