Autor Thema: C++ programm auf ASM Kernel aufsetzen. Nur wie?  (Gelesen 21322 mal)

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« am: 22. March 2004, 16:07 »
Servus erstmal. Also ich hab da ne frage wie kann ich ein C++ programm auf einen Kernel aufsetzen der in ASM geschrieben ist? Oder muss das dann ein bestimmter Kernel sein? Bin nämlich im moment mit ein paar freunden dabei ein OS zu programmieren. Das C++ Hauptprogramm ist schon zu 55% fertig und beim Kernel wollen wir evtl. nächste woche anfangen. Ich hoffe mir kann jemand helfen. Ich will jetzt eigentlich keine schlechwerbung machen ;) aber wer will kann ja mal auf http://e-nigma.de.vu gehn. Da ist auch ein Screenshot des C++ Programms.
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #1 am: 22. March 2004, 17:45 »
Also ich würd kein C++ nehmen sondern C.
Dann musst du dir folgendes überlegen :
1. Existiert keine Umgebung um dein Programm laufen zu lassen bzw. du kannst Keinerlei Bibliotheksfunktionen benutzen die bei deinem Compiler dabei sind du musst die selber schreiben.
2. Es existiert keinerlei unterstützung für objektorientierte Programmierung die müsstest du auch in deinem Kernel implementieren
3. Gibts kein ausführbares Format das dein Kernel unterstzützt also auch implementieren.
4. Muss du die ganze Hardware Unterstzützung auf die deine Bibliotheken aufsetzen implementieren

Außerdem halt ich auch euren Ansatz für falsch mit dem Hauptprogramm anzufangen. Objektorientierte Programmierung halt ich für den Anfang auch für zu schwer also würd ich c nehmen. TeeJay hat für C-Kernel nen gutes Tutorial geschrieben schau dir das ma an. Also versteh mich nich falsch aber leg das Hauptprogramm erstma an Seite und fang mit dem Kernel an.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 22. March 2004, 20:02 »
ok! das hauptprogramm liegt z.Z. eh auf Eis weil wir uns mehr mit ASM beschäftigen für den kernel usw.
Das mit C schalg ich den anderen vor. Danke für die Antwort!
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #3 am: 22. March 2004, 21:07 »
Was heisst denn euer C++ Programm? Habt ihr ein Programm geschrieben das ihr unter "Windows" compilen lasst und das ihr dann von eurem OS starten wollt?

Oder wie soll man das verstehen?
----------------------
Redakteur bei LowLevel

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 22. March 2004, 21:20 »
jenau...hab das mal gelesen das dass so auch funktioniert, aber irgenwie kann es ja net weil es dann ja auf windows aufbaut nachdem es compiliert wurde
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 22. March 2004, 21:24 »
aber dann ne andere frage: wie soll das dann mit C funktionieren?
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #6 am: 22. March 2004, 22:47 »
wie du ja bestimmt schon weiss erweitert c++ quasi c um die objektorientierte Unterstützung. Also so sachen wie Klassen , überladen von Operatoren usw..
Stell dir einfach C als abgespecktes C++ vor. Und da funktioniert es dann genauso wie oben schon gesagt du muss dir deine Bibliotheken nach schreiben. Das heisst wenn du zum Bsp Text ausgeben willst muss du dich erst mal drum kümmern das du nen code entwirfst der das auf lowlevelebene erledigt, der halt die Hardware direkt anspricht. Dann muss du dir mit Hilfe dieses Codes ne Funktion wie Printf(das C-Pendant zu cout) zusammenbasteln und das kannste dir dann als Bibliothek compilieren.
Schau dir das z.B. im Linux-Quellcode mal an.

Falls es daran harpert
mit extern Datentyp funktion(Datentyp) kannst du assembler funktionen in c nutzen
mit extern _funktion C-Funktionen in Assembler


Ansonsten werd ich irgendwie das gefühl nich los das du noch keine Ausgabe von Lowlevel bzw. das C-Kernel Tutorial gelesen hast. Würd mir auf jedenfall mal die Mühe machen das zu tun.

Nichts für Ungut ich hoffe ich konnt dir weiterhelfen
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #7 am: 22. March 2004, 22:59 »
Also wenn ich das richtig verstanden habe, dann schreibt ihr ein "konsolen" ? Programm unter Windows und wollt das dann mit einem eigens geschriebenen Kernel starten?

Wenn ich mit dieser idee recht haben sollte, dann solltet ihr sofort aufhören das Programm zu schreiben! Weil das geht in die Hose!
Ihr müsst erstmal einen Kernel schreiben und Funktionen schreiben mit denen ihr dann auch arbeiten könnt. Sprich Textausgabe usw.

Und ERST wenn ihr diese Funktionen habt, könnt ihr anfangen ein "Programm" zu schreiben das auf eurem OS laufen soll. Mit Windows-compiltem Zeugs könnt ihr da nix anfangen, weil das alles die Bibliotheken von Windows benutzt und diese gibts in eurem OS ja nicht.

C++ ist zwar ne feine Sache, erfordert jedoch etwas mehr vorarbeit in eurem Kernel, weshalb es einfacher ist mit C anzufangen. Genug Lesestoff haben wir hier dazu ja bereitgestellt.

Wenn ihr dann an einem Problem hängt, könnt ihr das gerne hier Posten. Wir helfen gerne.
----------------------
Redakteur bei LowLevel

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 22. March 2004, 23:32 »
Was muss ich denn alles groß zusätzlich implementieren, um OO zu verwenden?
Ein new ein delete und den Rest sollte der Compiler machen.
Und warum sollte ich ELF nicht auch für OO verwenden können?

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #9 am: 22. March 2004, 23:43 »
Also wie du jetzt auf ELF kommst weiß ich nicht.

Aber new und delete alleine genügen nicht. Du musst noch einen Startupcode haben, der beim Starten des Programms auch die Konstruktoren aufruft.

So genau kenn ich mich damit auch nicht aus.

Es wäre zumindest wahrscheinlich möglich zumindest Klassen zu erstellen und zu verwenden. Man kann auch malloc anstatt new benutzen. Das ist zwar nicht C++ konform, funzt aber genauso. Aber diese muss man natürlich ebenfalls selbst schreiben :)

Wenn hier mal jemand Erfahrungen in Sachen OO im Kernel gemacht hat oder das tut, dann soll er mir doch bitte mal ein kurzes Statement zukommen lassen wie es denn funktioniert hat.
----------------------
Redakteur bei LowLevel

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 23. March 2004, 15:18 »
so um missverständnisse aus dem weg zu räumen: das C++ programm dient erstmal nur dazu wie es später fertig aussehen könnte. Grob genommen eine Emulation.
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #11 am: 23. March 2004, 15:47 »
Achso ok.

Dann solltet ihr aber vorsehen, das ihr sämtliche Bibliothekfunktionen später durch eigene ersetzen müsst.

Daher sei angeraten so wenig wie möglich an Bibliotheksfunktionen zu nutzen. Dann könnt ihr euer Programm später einfacher Portieren.
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #12 am: 23. March 2004, 15:58 »
Sag ma bescheid wenn ihr mal was weiter seit mit dem kernel.

Noch nen kleiner Tip ich würd die Formatierung der Quelltexte auf eurer Page nochma überarbeiten. Liegt zwar wahrscheinlich an meinem Vorkriegsmonitor(800*600), aber auch da muss man es ja lesen können. ;)

Naja wünsch euch aufjedenfall viel erfolg mit eurem os
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 23. March 2004, 17:02 »
dankeschön..ich werd euch ständig über das projekt auf dem laufenden halten.
zum Thema Bibliothekfunktionen: die sind das kleinste übel
Aber trotzdem erstmal danke
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #14 am: 23. March 2004, 18:30 »
Nochmal ne Frage zu eurem Projekt. Kann man da auch irgendwo die Sources sehen?

Im Forum waren eher generelle Fragen gepostet und Download gibts noch nicht.

Gibts denn überhaupt schon einen Kernel bei euch?
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #15 am: 23. March 2004, 19:56 »
Ach ja noch nen Tip ich würd mich bei den Bibliotheken am POSIX Standart orientieren gibt nen gutes buch von addison wesley das den standart beschreibt weiss leider nich mehr wie das heisst
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

KingofWerlte

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 23. March 2004, 20:11 »
ok also Sources vom OS gibt es nur im Internbereich, also nur für regestrierte benutzer mit besonderen rechten. Einen Bootloader haben wir und einen Standarteinstiegskernel auch, den wir aber für dieses Projekt nicht gebrauchen können. Nächste woche fangen wir mit dem richtigen Kernel an. Und im Forum was man da auf den ersten blick sieht sind halt nur so kleine Tutorials und sources für kleine Programme in C++ und BASIC. Mit den Downloads warten wir noch bis unser Server läuft..da fehlen noch 2 CPU's und eine SCSI Festplatte.
General Ferdinand Foch an der Spitze der 9. Armee am 8.September 1914:"Mein Zentrum gibt nach, mein rechter Flügel weicht zurück, Lage ausgezeichnet. Ich greife an."

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 23. March 2004, 21:47 »
Ich würd Euch raten erstmal nur die ISO-C-Funktionen zu implementieren. Damit sollte der Textmodus ja eigentlich machbar sein.

Zu OO. Also ich glaub nicht, dass die StartUp-Routine so der Haken wäre, weil die auch in den meisten C-Kerneln verwendet wird.

Und new kannst Du natürlich auch einfach so machen, dass es malloc aufruft. Dann ist das auch kein Problem.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #18 am: 23. March 2004, 23:15 »
Wie gesagt mit OO in einem Kernel hab ich mich noch nicht auseinandergesetzt. Ich hab nur mal gelesen, das es nicht ganz so einfach sein soll das zu implementieren.

Aber du kannst ja gerne etwas damit experimentieren und deine Ergebnisse hier bekanntgeben.
----------------------
Redakteur bei LowLevel

 

Einloggen