Autor Thema: linken geht nicht beim c-kernel tut  (Gelesen 6219 mal)

Shining

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« 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..

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 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.
----------------------
Redakteur bei LowLevel

Shining

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #2 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

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #3 am: 04. May 2004, 13:29 »
Alle Files in den Bootsector??

Wie soll das alles in 512 Bytes passen?
----------------------
Redakteur bei LowLevel

Shining

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #4 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

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #5 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.
----------------------
Redakteur bei LowLevel

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #6 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.

Shining

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #7 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 ...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #8 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.
----------------------
Redakteur bei LowLevel

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #9 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.

Limbo

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #10 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 ...

Limbo

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #11 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 ?

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #12 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.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

Limbo

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 05. July 2004, 23:18 »
Also ich  hab's jetzt mit 0x10000, 0x10200, 0x1200, 0x200 probiert.

Konnte leider kein Erfolgserlebnis verzeichnen :o[

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #14 am: 05. July 2004, 23:30 »
vielleicht setzt du die Dateien falsch zusammen ???
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

 

Einloggen