Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Shining am 03. May 2004, 22:18

Titel: linken geht nicht beim c-kernel tut
Beitrag von: Shining am 03. May 2004, 22:18
wenn ich versuche die kernel32.obj und die ckernel.obj zu verlinken gibt es immer eine Fehlermeldung:
KERNEL32.obj: file not recognized: File format not recognized

muss ich noch was an der linkfile ändern? hab beide files drin stehen und alles zuum testen wie im tut gemacht..
Titel: linken geht nicht beim c-kernel tut
Beitrag von: TeeJay am 03. May 2004, 23:18
das bedeutet das du die kernel32.obj in ein falsches Format compiliert hast.

Der Linker kennt dieses Format nicht und kann diese Datei daher nicht linken.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Shining am 04. May 2004, 07:36
ok, mit dem richtigen compiler geht es jetzt auch, aber jetzt ergibt sich ein anderes prob...

Ich hab nun zum testen mal alle files kombiniert und zusammen gefügt bzw in den boot sec geschrieben. Wenn ich jetzt die disc starte, passtert: nichts
keine meldung kein nichts, er hängt sich einfach auf
Titel: linken geht nicht beim c-kernel tut
Beitrag von: TeeJay am 04. May 2004, 13:29
Alle Files in den Bootsector??

Wie soll das alles in 512 Bytes passen?
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Shining am 04. May 2004, 17:02
Neee natürliche nicht :)
Der loader ist 512 bytes groß, der kernel ist, wie nach tuturial compiliert und gemerged und liegt im stamm verzeichnis. der loader ist in den boot sektor geschrieben
Titel: linken geht nicht beim c-kernel tut
Beitrag von: TeeJay am 04. May 2004, 18:20
Kontaktiere mich doch einfach mal per Mail oder ICQ.

Dann schick ich dir einfach mal den Code (inklusive Compiler-scripts) zu meinem OS.

Dann kannst du vielleicht mal vergleichen und den Fehler finden.

PS: Ich benutze Windows und daher sind die Scripts auch als Batchdatei.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Another Stupid Coder am 05. May 2004, 13:49
Hm..Wenns nicht zuviel verlangt ist könntest du überhaupt mal Code zu deinen in-Tutorials-beschriebenen-Os uploaden denn dann könnte sich keiner mehr wegen mangelden Beispielen beklagen und eventuell würde ich dann auch draufkommen was bei mir beim Linken nicht funktioniert.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Shining am 05. May 2004, 15:08
Also ich binn jetzt soweit: der loader funzt, es MUSS am kernel liegen, da ich nen anderen puren assembler kernel kompiliert und getestet hab, er geht.
Das heist wohl, das entweder der sample code nicht stimmt, oder mir doch irgend ein fehler eingeschlichen ist ...
Titel: linken geht nicht beim c-kernel tut
Beitrag von: TeeJay am 05. May 2004, 16:50
Vielleicht hast du den Startpunkt nicht richtig gesetzt.

Du muss ja im Linkerscript angeben an welche Adresse gelinkt werden soll.
Das musst du Berücksichtigen, da sonst der Code auf die falschen Daten zugreift.

Dazu hatte ich aber auch was in dem C-Kernel Tutorial geschrieben.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: kleiner am 05. May 2004, 17:42
oder Du kopierst TeeJay's Beispiel Code einfach mal in einen Texteditor, speicherst ihn und kontrollierst mit diff Datei1 Datei2 ob sie gleich sind.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Limbo am 05. July 2004, 17:59
Zitat
TeeJay postete
Vielleicht hast du den Startpunkt nicht richtig gesetzt.

Du muss ja im Linkerscript angeben an welche Adresse gelinkt werden soll.
Das musst du Berücksichtigen, da sonst der Code auf die falschen Daten zugreift.

Dazu hatte ich aber auch was in dem C-Kernel Tutorial geschrieben.
Startpunkt - In Link.txt steht :  .text 0x200 ...
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Limbo am 05. July 2004, 18:11
Zitat
TeeJay postete
Vielleicht hast du den Startpunkt nicht richtig gesetzt.

Du muss ja im Linkerscript angeben an welche Adresse gelinkt werden soll.
Das musst du Berücksichtigen, da sonst der Code auf die falschen Daten zugreift.

Dazu hatte ich aber auch was in dem C-Kernel Tutorial geschrieben.
Startpunkt ....   In Link.txt (aus ckernel.zip) steht :  .text 0x200 ...
                                            Im Tutorial steht :  .text 0x10200 ...

Müsste es nicht aber 0x1200 sein ?

Kernel16.bin beginnt doch bei 0x1000 und hat 512 Bytes.
c32kernel.bin soll doch, wenn ich das richtig verstanden hab, direkt hinter kernel16.bin gelinkt werden, also 0x1200 ?

Na ja, ich hab's mit allen drei Werten versucht, bei mir klappts aber auch nicht !
Bootloader funktioniert, dann rebootet er ohne eine Meldung auszugeben.
Weiß vielleicht jemand inzwischen woran es liegt ?
Titel: linken geht nicht beim c-kernel tut
Beitrag von: lobmann am 05. July 2004, 20:30
wenn du den bootloader von TeeJay nimmst steht der Kernel an 0x10000. Du must 0x1000 mit 16 multiplizieren weil es ja im RM eine Segment adresse ist.
Titel: linken geht nicht beim c-kernel tut
Beitrag von: Limbo am 05. July 2004, 23:18
Also ich  hab's jetzt mit 0x10000, 0x10200, 0x1200, 0x200 probiert.

Konnte leider kein Erfolgserlebnis verzeichnen :o[
Titel: linken geht nicht beim c-kernel tut
Beitrag von: lobmann am 05. July 2004, 23:30
vielleicht setzt du die Dateien falsch zusammen ???