Ich möchte eigentlich auch mal eine art Hello world OS in C schreiben. Ich habe zwar schon etwas in ASM programmiert, aber die gesamte Logik mit if und schleifen würde mich sicher für den allerersten Anfang überfordern.
Ich habe jetzt von der göglichkeit gehört, dass man einen Loader mithilfe des Gcc mit .o Dateien aus dem Gcc mergen kann.
Das wäre dann aber Pmode C und ich habe bis jetzt 0 erfahrungen im P-mode und er würde auch mehr Kenntnisse erfordern um Grafik und Tastaturabfragen zu erzeugen.
Ich hab das ganze (mithilfe einiger Tutorials) so zum laufen gebracht:
Der Bootloader wird in ASM geschrieben, mit NASM kompiliert. Der muss dann vor allem in den Protected mode schalten und dann zu einer anderen Stelle springen, an der dein C-Kompilat liegt.
Den C-Code hab ich gantz einfach mit gcc kompiliert:
Quote:
C:\Programme\DJGPP\bin\gcc -fno-builtins -c *.c
Dann gelinkt
Quote:
C:\Programme\DJGPP\bin\ld -T kernel.ld -o kernel.bin
Das LInkerscript sieht folgendermaßen aus (kernel.ld)
Quote:
OUTPUT_FORMAT("binary")
ENTRY(start)
INPUT("k_init.o" "kernel.o" "io.o" "irq.o" "pic.o" "idt.o" "panic.o" "interrupts.o" "video.o" "keyboard.o" "string.o" "input.o" "memory.o" "floppy.o")
SECTIONS
{
.text 0x100000 : {
*(.text)
}
.data : {
*(.data)
}
.bss :
{
*(.bss)
}
}
*.o sind die erzeugten Objektdateien
Dann wird alles mit Rawritewin hintereinander auf eine Diskette (bzw. ein virtuelles Laufwerk) geschrieben und in Bochs getestet.
Hier gibts ein gutes Tutorial: http://web105.essen082.server4free.de/lowlevel/doc/
Mir kamen dann aber zwei Fragen. 1. wo hat er den Loader eingefügt und 2. Wie hat er die Startadresse des erzeugten Codes herausgefunden und wo hat der die dem Linker übergeben??
Wenn ich die zwei Fragen beantwortet bekomme, habe ich noch eine 3.-> Open Watcom kann com Dateien erstellen und beim erstellen wirft er auch obj Dateien aus, in denen supereinfacher Rohcode stehen müsste.(ich glaube nicht einmal wirklich segmentiert)
Könnte ich diese obj, nachdem ich .com oder 16Bit-Realmode Exe erzeugt habe einfach verwenden, bevor ich mir genug Wissen gesammelt habe um weiter vorzudringen?
(Naja, jetzt weiß ich ja noch nicht einmal, wie ich den Code mit dem Linker verbinden kann und wie ich den Startpunkt herausfinde und dem Linker / Loader übergeben kann)
Naja ich bin ein großer Noob im Osproggen, auch wenn ich DirectX, Winapi usw. schon gemacht habe habe ich nie infos gefunden, wie ich mit einem Compiler Rohcode erzeugen kann und schon garnicht, wie man den verwenden könnte.
Ich würde mich über Hilfe sehr sehr freuen.