c++ kernel tutorial



  • Hallo erstmal!
    Ich bin schon länger auf der suche nach os dev.
    Da ich euer Forum sehr interessant finde, (gerade wegen dem os-Bereich)
    habe ich mich direkt angelmeldet.
    Ich habe schon viel gesucht aber immer nur Beispielcode in c gefunden.
    Jetzt wollte ich fragen ob ihr tutorials für os dev in c++ kennt.
    Ich habe schon einen Bootloader in asm jetzt will ich einen kernel-Loader programmieren, der den c++ kernel aufruft.
    Leider habe ich nur das hier(http://www.osdever.net/tutorials/) gefunden, aber sie benutzen dort GRUB (nicht das ich etwas gegen GRUB hätte, aber wenn dann möchte ich sogut wie alles selber schreiben).
    Gibt es überhaupt gute tutorials für c++ oder muss man wirklich alles aus c "portieren"?
    Danke schon mal.



  • 1. Was für einen Bootloader die verwenden ist doch völlig egal. Wenn du verstehst, was sie machen, sollte es kein Problem sein, statt Grub deinen eigenen Bootloader zu verwenden.
    2. C++ bietet beim Schreiben eines Kernels nicht so viele Vorteile. Der Link auf der von dir geposteten Seite funktioniert bei mir nicht, aber hier z.B. ein kleiner Artikel:

    http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB

    Die Seite ist übrigens eh zu empfehlen... Wenn du einen Kernel in C++ schreibst, kannst du nicht alle C++ Features nutzen, musst auf einiges aufpassen, und dann hast du im Endeffekt auch etwas, was weniger transparent und weniger gut mit anderen Sprachen kombinierbar ist.



  • Würde es gehen den Kernel in c und den Rest in c++ zu schreiben oder gibt es dann irgendwelche Fehler (wegen Features die nicht vorhanden sind etc)?



  • MrBig schrieb:

    Würde es gehen den Kernel in c und den Rest in c++ zu schreiben

    Was ist der Rest? Wenn du Anwendungsprogramme meinst, kann man das natürlich machen, ist doch unter jedem handelsüblichen Betriebssystem so.



  • Also meiner Erfahrung nach funktioniert C++ im Kernel wunderbar, auch wenn man auf Exceptions, RTTI etc. der Einfachheit halber verzichtet. Imo wär es jedenfalls verrückt, nicht C++ zu verwenden, wenn C++ eine Option ist...



  • Geh so früh wie möglich auf C++. Dazu musst Du in den Sources von GCC ein wenig puhlen. Klar. Zum Beispiel wirst Du aus im Kernel auf einen pure virtual function call zunächst nicht einen hilfreichen Text ausgeben, sondern direkt panic auslösen.
    Das wird sich millionenfach auszahlen. Der Weg der Hasen und Häsinnen, den Kernel auf C zu belassen, ist ausgereizt, und alle Probleme, die wir in Linux/BSD noch haben, sind ausschließlich Probleme, die es mit C++ nicht im Ansatz gegeben hätte.



  • volkard schrieb:

    Der Weg der Hasen und Häsinnen, den Kernel auf C zu belassen, ist ausgereizt, und alle Probleme, die wir in Linux/BSD noch haben, sind ausschließlich Probleme, die es mit C++ nicht im Ansatz gegeben hätte.

    Was zum Bsp.?



  • Mit Rest meine ich zB die Oberfläche (Input/Output) visualisieren (natürlich keine grafiken aber mit text etc) oder auch Programme die halt mit dem Kernel arbeiten müssen.



  • Das wichtige ist das C++ eine Sprache ist die eine Laufzeitumgebung vorraussetzt, während C das nicht braucht.
    Meine Empfehlung: schreibe deine (unvollständige) Laufzeitumgebung in C,
    was du mindestens implementieren must und welche compiler flags du brauchst findest du hier aufgelistet http://www.lowlevel.eu/wiki/C%2B%2B

    Ohne große arbeit kannst du simple Klassen benutzten, du brauchst allerdings eine funktionierende speicherverwaltung (new,delete).
    Das ganze hört sich sehr einfach an, aber du wirst ohne aufwändigere laufzeitumgebung viele sprachfeatures die du gewohnt bist nicht benutzen können.


  • Mod

    Kannst ja mal hier schauen: http://www.c-plusplus.net/forum/273023
    http://www.pedigree-project.org/ ist in C++, soweit ich weiß.



  • In erster Linie danke für eure Antworten.
    Ich werde mir mal ein paar os angucken.
    Das mit der Laufzeitumgebung in c ist eine gute Idee, aber ich will halt nicht "zu viel c verwenden".
    Warum ist es eigentlich so schwer an OS Source mit Erklärung etc in c++ zu bekommen?
    Ich habe jetzt schon viele OS durch und die meisten sind halt in c was ja klar ist, aber dann noch in Assembler und glaub Basic habe ich noch eins gesehen.
    Kaum c++ warum?



  • MrBig schrieb:

    Kaum c++ warum?

    Weil die meisten OS-Frickler halt einfach C bevorzugen. 😉 Abgesehen davon verstehe ich aber nicht so ganz was du suchst. Für dich dürfte das doch kaum einen Unterschied machen. Kompilierst halt mit -fno-rtti und -fno-exceptions und nutzt C++. Was soll da groß erklärt werden? 😕



  • Na zB die Erklärungen was geht in c was in c++ nicht geht und anders herum oder ob man bestimmte Dinge beachten muss...
    Außerdem finde ich das die Umstellung auch wenn sie noch so klein ist eine Erklärung benötigt (damit man es versteht und nicht bild macht)



  • Es gibt prinzipiell nix, was man in C machen könnte, was man nicht auch in C++ machen könnte. C war eben zuerst da und ist in erster Näherung eine Untermenge von C++. C++ hat gegenüber purem C viele Vorteile. Es gibt imo keinen rationalen Grund, heutzutage noch C zu benutzen, wenn C++ ebenfalls eine Option wäre...



  • MrBig schrieb:

    oder ob man bestimmte Dinge beachten muss...

    Grundsätzlich solltest du C++ schon halbwegs drauf haben. Ein OSDev Tutorial kann dir nicht nebenbei noch eine Sprache beibringen. OSDev eignet sich auch wirklich nicht besonders zum lernen einer Sprache. Insofern sollten dir die eventuellen Unterschiede schon bewusst sein. (z.B. dass der Compiler dich früher oder später nach einer Funktion fragen wird die pure virtual calls handelt. Wenn du jetzt nicht weist was das ist: Erst C++ lernen, dann eigenes OS schreiben. ;))


  • Mod

    Du solltest das Thema C/C++ im Bereich OSDev mit den Entwicklern von pedigree oder mit Linux-Entwicklern diskutieren. Ich persönlich habe C++ im Kernel wenig vermisst.



  • ich kann c++ zum größten teil (alles kann so gut wie keiner).
    Mir geht es auch nicht darum die sprache zu lernen sondern wie man sie anwenden kann (in diesem fall Betriebssystem), weil ich auch was neues lernen will und nicht dieses ständige Programme schreiben. Nein, ich möchte mal was anderes, komplizierteres, wo aber jede Veränderung zum "normalen" Programme programmieren erklärt wird -> neues lernen.
    Mein Problem ist nur, es gibt (also ich habe keine gefunden) keine guten erklärungen.



  • Weil es nicht relevant ist. Wenn du C++ kannst, sollten dir die Unterschiede zu C sofort klar sein. Und an die "Tutorial"-Grenze stößt man bei OSDev eh sofort, danach gibt's nur noch Refs. Beschwerst du dich dann auch dass da zu wenig C++ drin ist? 😃



  • Wie oft noch...?!
    Mir geht es nicht um die Unterschiede zwischen den Sprachen an sich sondern um den Unterschied in der Anwendung. Ich glaube wir reden bzw schreiben aneinander vorbei. Du meinst anscheinend was anderes als ich.



  • Und was genau verstehst du unter solchen "Unterschieden in der Anwendung"?


Anmelden zum Antworten