Hallo,
Ich will mit meinem Kernel jetzt C Programme laden wie stelle ich das am Besten an?
Wenn Du die Programme als eigenen Prozess starten möchtest, dann sollte als erstes das Multitasking funktionieren, damit meine ich nicht nur den Kontextwechsel sondern auch das erstellen (und später natürlich auch löschen) eines neuen Prozesses mit eigenem Adressraum und allem was in Deinem OS dazugehört. Zum erstellen eines neuen Adressraum gehört auch diesen vom Kernel (oder bei Micro-Kernel eventuell von nem extra User-Mode-Service) aus mit Code und Daten befüllen zu können.
Einen passenden Executable-Loader (der im wesentlich die oben genannten Dinge benötigt und Dateien laden kann) brauchst Du natürlich auch noch.
Eine weitere sehr wichtige Design-Entscheidung muss dann getroffen werden: Welches Executable-Format möchtest Du benutzen? Viele tendieren hier zu ELF weil es gut Dokumentiert ist und ne Menge Beispielcode dafür gibt. Nachdem Du diese Entscheidung getroffen hast steht auch fest wie Du Deine Programme compilieren musst. Wahrscheinlich musst Du dann für GCC und binutils ein neues Target integrieren, nämlich Dein OS. Das sollte aber nicht allzu kompliziert sein, schau Dir mal die Patches an mit dehnen andere das machen.
Als kleinen Extraaufwand benötigst Du dann noch ne crt0.S also ein Stück Assembler-Code das den tatsächlichen Einsprungspunkt ins Programm enthält und dann den Stack u.ä. Basics initialisiert um anschließend main() aufzurufen. Dafür findest Du bestimmt auch ne Reihe Beispiele.
Grüße
Erik