======Benötigte Werkzeuge====== **Wichtig**\\ Ich beschreibe hier __nicht__ allgemein, welche Programme man verwenden kann und wie man sie zu verwenden hat. Wer Hilfe hierbei braucht sollte mich im [[http://forum.proggen.org|Forum]] kontaktieren! Außerdem wird hier nur prinzipiell die Einrichtung des Arbeitsplatzes unter Linux (Ubuntu Hardy) beschrieben. Die Versionsnummern sind ermittelt worden, als dieser Artikel geschrieben wurde. Ich update regelmäßig, verwende also die normalerweise neuste, stabile Version. =====gcc===== Natürlich braucht man einen Compiler, wenn man ein Programm schreiben möchte. Und ein Betriebssystem ist im Grunde ein Programm.\\ Und welcher Compiler bietet sich da besser an als der gcc... Meine Version: gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7) Um den gcc zu installieren (falls er das nicht schon ist) einfach sudo apt-get install gcc in die Kommandozeile eingeben. Hier noch die Parameter, die ich zum kompilieren meines Kernels verwendet habe: gcc -m32 -fno-builtin -fno-leading-underscore -fno-strict-aliasing -fno-stack-protector -Wall -O0 -c -g -I ./inc/ *.c Das Includeverzeichnis (Option "-I") muss natürlich angepasst werden.\\ Wichtig ist auch der Parameter //-fno-builtin//. Dies bedeutet, dass keine Standardbibliotheken verwendet werden. Standardbibliotheken haben wir in der Umgebung, in der unser Kernel laufen wird, nicht. Also können wir sie nicht verwenden. =====nasm===== Der Assembler nasm ist auch mit von der Partie. Mit ihm werden wir unseren Assemblercode (es wird nicht allzuviel sein, versprochen) compilieren.\\ Die Installation unter Linux geht mit sudo apt-get install nasm schnell und einfach. Ich benutze folgende Version: NASM version 0.99.06-20071101 compiled on Sep 16 2008 nasm rufe ich folgendermaßen auf: nasm -f elf assmcode.asm =====ld===== Ein Linker ist auch von Nöten, um die einzelnen Binärdateien zusammenzufügen.\\ Ich verwende dazu den Linker ld. GNU ld (GNU Binutils for Ubuntu) 2.18.0.20080103 Copyright 2007 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty. Den Linker rufe ich wie folgt auf: ld -m elf_i386 -Map linker-output-map.txt -T linkerscript.ld -o basic-kernel.bin Eine kurze Erklärung hierzu:\\ Das Ausgabeformat ist elf_i368, es wird eine Linkmap mit dem Namen //linker-output-map.txt// ausgegeben. Außerdem verwenden wir ein Linkerskript mit dem Namen //linkerscript.ld//.\\ Die Ausgabe (der fertig gelinkte Kernel) heißt //basic-kernel.bin//. Das verwendete Linkerskript sieht folgendermaßen aus: ENTRY(start) OUTPUT_FORMAT(elf32-i386) SECTIONS { . = 0x100000; __kernel_start = .; .text : { *(.text) } .data : { *(.data) *(.rodata) } .bss : { *(.bss) } __kernel_end = .; end = .; } Es gibt dem Linker Informationen darüber, wie unser Kernel zusammengelinkt werden soll. Außerdem werden zwei Pointer (//%%__%%kernel_start// und //%%__%%kernel_end//) definiert. Sie werden uns später noch nützlich sein. =====make===== Auf make möchte ich nur ganz kurz eingehen. Ich kann nicht die Funktions- und Bedienweise von make erklären, das würde das Tutorial sprengen.\\ Ich möchte nur das make-File, das ich zum Kompilieren verwende zeigen. Es darf gerne verwendet werden.\\ Bestehen Probleme in der Verwendung, dann bitte ich um eine [[mailto:daniel@proggen.org|Email]] an mich. # Makefile CC = gcc CCFLAGS = -m32 -fno-builtin -fno-leading-underscore -fno-strict-aliasing -fno-stack-protector -Wall -O0 -c -g -I ./inc/ NM = nasm NMFLAGS = -f elf LD = ld LDFLAGS = -m elf_i386 -Map linker-output-map.txt -T linkerscript.ld -o basic-kernel.bin ASMDATS = basic-kernel-asm.asm isr-irq-asm.asm ################################################## Standard: *.c *.asm ./inc/*.h $(CC) $(CCFLAGS) *.c for i in $(ASMDATS); do $(NM) $(NMFLAGS) $$i; done $(LD) $(LDFLAGS) *.o clean: rm -rf *.o floppy-update: *.bin sudo mount -o loop ./bochs/floppy.img /mnt/floppy/ sudo cp basic-kernel.bin /mnt/floppy/ sudo umount /mnt/floppy/ clean-all: rm -rf *.o rm -rf *kernel.bin rm -rf *output-map.txt Einzelheiten dazu werde ich nun nicht erklären.\\ Die beiden Assembler-Code-Dateien werden wir im Verlauf des Tutorials erstellen. Solange sie nicht existieren, wird nasm sich über eine nicht existente Quelle beschweren. Sollte das Probleme verursachen, dann einfach die noch nicht existierenden Dateien herausstreichen. ---- **[[kernel:start|]] | [[kernel:index|]] | [[kernel:first_booting|]]**