OS in C
-
Ich möchte gern den Kernel meines OS in C bzw. C++ schrieben.
Allerdings finde ich keinen Compiler der in der Lage ist meine
.c bzw. .cpp Dateien zu einer .bin Datei zu machen.
Alle Linker/Compiler die ich ich fand unterstützen nur .exe
und .com.könnt ihr mir was empfehlen?
danke
Mario
-
Ich benutze zwar kein Windows, aber ist .com nicht eine Binary?
-
Hi
Ich denke nicht ganz aus den beschreibungen auf diversen Sieten werde ich nicht so ganz schlau aber eine .com braucht ist wesentlich größer als ne .bin
-
Ne, das muss dann was mit dem compiler zu tun haben, mit dem die bin oder com erstellt wurden, die Du verglichen hast...
com und bin sind prinzipiell das gleiche: eine .com-Datei hat keinerlei header und wird 1 zu 1 in den Speicher geladen. Deshalb kann eine .com-Anwendung auch maximal 64KB-100hByte (PSP) gross sein.
Bei den C-Compilern, die com-Dateien erstellen koennen musst Du aber beruecksichtigen, dass .com Dateien immer ans offset 100h eines 64KB-Segments geladen werden. D.h. dein OS muss diese .com-binaries auch immer zum offset 100h eines Segments laden. (IMHO kann man dieses Startoffset in C-Programmen nicht aendern)
-
Hi
Hab jetzt das so umgeschrieben, dass es am Offset 100 satrten sollte.
Allerdings bootet er jetzt nur noch und führt dann keinen Kernelcode mehr aus.
Was ist daran falsch.
Bzw. kennt wer nen Linker der nicht 1kb für ein
void main() { asm jmp 1FFFF:0000 } braucht?mov al,1 mov cl,2 mov ax,0x2000 mov es,ax mov bx,0x0100 mov ah,0x02 mov ch,0 mov dl,00h mov dh,0 int 0x13 jmp 0x2000:0x0100 ;die stelle wo der kernl gespeichert ist
-
Wenn Du 0 Sektoren einliesst, kann auch nichts ausgefuehrt werden.
Du solltest 2000h ueber ax in es kopieren, bevor Du ax fuer den int 13h setzt.
-
Okay das stimmt aber es war nicht das einzige problem.
Also das wirklcihe problem ist jetzt dass wenn ich die .com in nem
Hexeditor betrachte ist sie nichts ausser 00000....
Also brauch ich wohl nen geshceiten linker.
Kennt wer einen?
-
Der GNU gcc compiler kann IMHO binaries erstellen. Ich meine das in der Hilfe gelesen zu haben. Muss man wahrscheinlich beim Compilieren und linken angeben.
Du musst bedenken, dass du keinerlei standard libs benutzen darfst.Achso:
Der gcc erzeugt natürlich 32bit code für den protected mode. Ich hoffe dein OS läuft im Protected mode.
-
Schau dir doch wegen plain binaries mal das hier an
http://www.nondot.org/sabre/os/files/Booting/CompilingBinaryFilesUsingACompiler.pdf
-
mal ne blöde frage, sind objektdateien nicht binaries ohne header?
okay, sie sind noch nicht verlinkt, aber das wird sich ja irgendwie machen lassen..
-
Die .obj-Dateien haben AFAIK sehr wohl einen Header.
-
ja. obj Dateien haben einen Header. Man muss diese erst mit dem Linker bearbeiten, der GNU ld, hat aber Optionen um ein plain binary zu erstellen (also keine Header etc.).
-
da ich denke, das folgendes hier am besten passt, wollte ich euch fragen, was ihr hierzu meint. saugenswert?
-
Was hat das mit einem OS in C zu tun
Na egal, ich habe diese Version, die es da zum Download gibt nicht richtig zum Laufen bekommen