Autor Thema: C-Programm mit OS verknüpfen  (Gelesen 4040 mal)

FlorianN

  • Beiträge: 50
    • Profil anzeigen
Gespeichert
« am: 21. October 2012, 17:51 »
Hallo,
ich habe ein lauffähiges OS (es gibt eines string aus, mehr nicht) und ein C-Programm welches ich mit meinem OS verknüpfen will. d.h. Ich will das einfach nur ein C-Programm welches z.B. auch einen String ausgibt laufen lassen.

Mein erstes Problen ist schon dieses, wie ich es Compilieren soll. Mit NASM (wie mein ursprüngliches OS) oder mit GCC?

Und wie soll ich den ASM-Kern (den ich gern behalten würde...) sagen, dass er das C-Programm (bzw. eine Methode im C-Prog.) ausfühern soll?


Danke, Florian
Woher ich das weiß? Keine Ahnung.

markusb.

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. October 2012, 19:19 »
in deinen kernel schreibst du
[EXTERN name_der_C_Methode]
call name_der_C_Methode

damit rufst du eine Methode auf, welche name_der_C_Methode heißt.
Diese implementierst du in C.

die Assemblerdatei kompilierst du am besten so:
nasm -felf -o kernel.o kernel.asm

In C machst du folgendes:
void name_der_C_Methode()
{
    //rufe textausgabe funktion auf
}
ich kompiliere immer mit:
gcc -m32 -fno-builtin -fno-leading-underscore -fno-strict-aliasing -fno-stack-protector -Wall -O0 -c -g -o ausgabe.o ausgabe.c

diese beiden Sachen linkst du noch zusammen.
ld -melf_i386 -Tlinkerscript.ld -o kernel ausgabe.o kernel.o
das linkerskript musst du noch erstellen.
Das solltest du aber eigentlich schon haben, wenn du einen (multiboot) Kernel hast.

Achja: die Textausgabefunktion kannst du auch über C implementieren.

Was mir jetzt gerade noch einfällt: du müsstest in C bekannt geben, dass die Textausgabefunktion eine ASM funktion ist.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 22. October 2012, 10:59 »
Mein erstes Problen ist schon dieses, wie ich es Compilieren soll. Mit NASM (wie mein ursprüngliches OS) oder mit GCC?
Um ein C-Programm zu kompilieren, braucht man einen C-Compiler. gcc ist einer, nasm nicht.

Zitat
Und wie soll ich den ASM-Kern (den ich gern behalten würde...) sagen, dass er das C-Programm (bzw. eine Methode im C-Prog.) ausfühern soll?
Wenn du den C-Code in den Kernel einbauen willst, siehe markusb. Ansonsten http://www.lowlevel.eu/wiki/Teil_8_-_Ein_erstes_Programm.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

FlorianN

  • Beiträge: 50
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 22. October 2012, 16:24 »
Danke,
ich versuche es gleich einmal!
Woher ich das weiß? Keine Ahnung.

FlorianN

  • Beiträge: 50
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 22. October 2012, 18:33 »
 :-D :-D Super!  :-D :-D Es klappt!

Danke
Woher ich das weiß? Keine Ahnung.

 

Einloggen