Bootloader in ASM, Kernel in C!?



  • Hi,

    kennt einer ein tutorial, in dem gezeigt wird wie man aus einem Assembler-Bootloader einen C-Kernel starten kann?

    Danke!
    Darts 🤡



  • Such dir was aus: google, yahoo, altavista, Forensuche oder FAQ 🤡



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Assembler verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ja ich hab mir schon n wolf gesucht aber bisher nur bootloader gefunden die assembler-kernel tsraten können! ich guck mir ma die linsk an, thx!



  • Ganz einfach: Kernel in den Speicher laden und den IP auf die Startadresse des Kernels setzen. Erklär uns aber bitte mal, was genau ein Assembler-Bootloader genau sein soll. Nach dem Übersetzen ist es kaum noch von Belang, in welches Sprache es geschrieben wurde. Man muss nur berücksichtigen, dass Sprachen bestimmte Sachen, z. B. Unterprogrammaufrufe bei C und Pascal, unterschiedlich realisieren, aber ansonsten ist es doch alles das Gleiche.



  • Erklär uns aber bitte mal, was genau ein Assembler-Bootloader genau sein soll. Nach dem Übersetzen ist es kaum noch von Belang, in welches Sprache es geschrieben wurde.

    Na wenn du in der Lage bist, ein kleines Programm in C/C++ zu schreiben, die nur 512 Byte gross ist, dann gibts sicherlich kein Unterschied mehr 😃

    Nur Assembler ist in d. Lage so ein kleines Code erzeigen 👍



  • Das ist schon klar. Aber an der Funktionsweise ändert das nichts. Kannst du denn mit deinem Assembler-Bootloader Assembler-Kernel laden? Warum soll das anders funktionieren als das Laden eines Kernels, der in C geschrieben ist?



  • In Assembler ist es einfach, den Code auf eine absolute Adresse zu relozieren.

    In C muss man erst einen Linker haben, der ein absolut adressiertes Modul erzeugen kann, das mit einer bestimmten Adresse anfaengt. Dies braucht man, um die Relozierung nicht im Assembler-Loader machen zu muessen.

    Fuer ein C Programm sind 512 Byte zuwening, aber der Assembler-Bootloader kann ja den compilierten C-Code an eine bestimmte Adresse laden, ohne viel Aufhebens. Ein Lesezugriff aufs Bootlaufwerk und ein JMP an die Startadresse.

    Noch besser ist es, gleich in den Protected Mode zu schalten (nach dem Laden, vor dem Ausfuehren), damit das C-Programm 32-Bittig sein kann. Man muss ausserdem noch Interface-Code in Assembler schreiben, um z.B. Port-Adressen bedienen zu koennen, sowie die Register des Prozessors setzen zu koennen.

    Alles in allem ein nettes Stueck Arbeit, das sich aber lohnen kann! 😃


Anmelden zum Antworten