komm doch am besten mal in den IRC Channel #LOST @ irc.euirc.net.
Da kann man solche Sachen viel besser erklären.
Da kann man solche Sachen viel besser erklären.
09. November 2026, 18:30
Gespeichert
Gespeichert
Gespeichert Naja, aber wenn ich die OBJ-Datei und die Flat-Binary nicht verlinken kann, welche Dateiformate muss ich dann für den Bootloader und den C-Kernel wählen ?Der Bootsektor muss eine flache Binary sein. Für den Kernel kannst du wählen, was für ein Format du haben willst - der Bootsektor muss halt in der Lage sein, dieses Format zu laden. Wahrscheinlich willst du dafür also auch eine flache Binary haben.
Gespeichert Der Bootsektor muss eine flache Binary sein.Stimmt, hab ich vergessen
Als Dateiformat nimmst du bei beiden Flat Binary.OK, wenn Du mir jetzt noch sagen kannst, wie man den 16-Bit-C-Kernel in eine BIN umwandeln kann, ist alles klar.
Gespeichert Mit dem Compiler hat das nichts zu tun, der erzeugt dir Object-Files (.o oder .OBJ oder sowas) - die sind abhängig vom Compiler! Die ELF-Datei erzeugt dir der Linker.Ich zitiere mich ja ungern selbst...
COM-Dateien werden beim Erzeugen reloziiertKorrekt.
und zwar fest auf die Adresse 0x100.Nicht korrekt.
Das ist für den Bootloader unvorteilhaft.Das stimmt natürlich, aber ich meinte das eigentlich für den Kernel. Wenn der Kernel eine COM-Datei ist kann man den einfach überall in den 640k hinlegen und anspringen und er läuft.
Wenn man Features braucht, die nicht-trivial sind, sollte man ohnehin einen anderen Bootloader verwenden.Was IMHO fast immer der Fall ist. Ich will ja nicht überheblich klingen aber reloziieren im Bootloader ist immer "nicht-trivial" (vor allem für Anfänger), das sollte man sich für den Kernel aufheben wenn man ne gute Basis hat und dann richtiges ELF o.ä. laden möchte. Außerdem erspart man sich mit der Verwendung eines vorhandenen/ordentlichen Bootloaders den ekligen x86-Real-Mode und das ganze BIOS-Gedöhns.
Naja, die Adresse 0x100 ist trotzdem fest.Ich weiß Du hällst mich für einen Haarespalter aber die 0x0100 ist keine vollwertige Adresse sondern ein Offset, das muss man im Real-Mode immer explizit dazu sagen.
Der Bootloader muss nicht reloziieren können, der Kernel kann ja an eine feste Adresse (z.B. 128K) geladen werden - die muss halt nur beim Linken des Kernels ebenfalls bekannt sein.Echt? Geht das auch bei ELF? Bekommt man da nicht doch irgendwo Probleme? Mir ist klar das der Linker, wenn er über alle Informationen das Loaders verfügt, auch die Aufgaben des Loaders mit übernehmen kann aber ich hätte nicht gedacht das er dann wirklich 100% vollständig reloziieren kann. Also mal wieder was gelernt.
Gespeichert
Gespeichert 
Gespeichert Ich hab mich jetzt mal ein bisl umgeschaut bzgl. NASM kompatiblen C-Compilern, aber leider noch keinen gefunden.Also mein nasm behauptet, das Format zu können, und zwar wenn man -fobj verlangt. Damit hast du dann alle Objektdateien im gleichen Format. Dann brauchst du aber auch noch einen Linker, der dieses Format kann und was passendes ausspuckt. tlink kann meines Wissens keine flachen Binaries produzieren, das heißt, dein Bootloader müsste einen .exe-Loader implementieren. Das wird zwar ein bisschen Arbeit kosten, dürfte aber machbar sein (die Frage ist allerdings, ob es mit deinem Wissensstand machbar ist - bedenke, dass sich von uns so gut wie keiner mit antiken Formaten beschäftigt und wir dir deshalb nur beschränkt helfen können).
Also gibts nur die folgenden 2 Möglichkeiten, oder ?Weißt du, was ein Crosscompiler ist? Wenn ja, erklär mal, was er mit deinem Problem zu tun hat. Das ist mir nämlich ein wenig rätselhaft.
- Einen 16-Bit-C-Compiler (bzw. Linker) finden, der BINs erstellen kann
- Irgendwie mit einem Crosscompiler

Damit musst du dich aber selbst beschäftigen.
Gespeichert