Wie kann ich meinen eigenem Bootloader erstellen



  • supertux schrieb:

    Janjan schrieb:

    Für einen Bootloader benötigst du Assembler. Lern das erst einmal.
    Ansonsten:
    http://wiki.osdev.org/Babystep1

    und deine Glaskugel sagte dir, der Sebastian will einen bootloader für x64 schreiben. So eine Glaskugel will ich auch.

    Wie bitte? Wie kommst du auf x64?



  • ich meinte x86 und da habe ich mir total vertippt 😉



  • Yeah.......Mein Vater saght, er kauft mir erst Assembler Set(also Assembler Grundlagen, OS bau...), wenn ich ihn mit einem Programm in C++ überzeuge. Aber welches soll ich machen?



  • Oder anders gesagt:
    Kann man eine .asm Datei als .Exe OHNE Kompilieren? Und damit sie geht? Denn ich finde weit und breit keinen Compiler.



  • Vielleicht solltest du dir erst einmal Grundkenntnisse im Prorammieren aneignen, ohne Gedanken an ein OS. Dir fehlt ganz klar das absolute Basiswissen.


  • Mod

    Ich stimme Janjan und deinem Vater vollkommen zu. Aber um deine Frage zu beantworten: Dein C++ Compiler hat wahrscheinlich auch einen Compiler für Assembler eingebaut (Ich meine damit nicht Inline-Assembler). Wie genau man den benutzt, hängt natürlich vom Compiler ab.

    Aber mal ehrlich: Das was du vor hast, schaffst du mit deinen Kenntnissen nie. Hast du kein anderes Projekt, dass dich interessieren würde? Vielleicht Grafikprogrammierung? Da hat man was zu sehen und kann das auch seinen Freunden zeigen. Und das was du dabei lernst bringt dich auch allgemein beim Programmieren weiter. Während du beim Betriebssystemprojekt bloß Frust schieben wirst um dann in 5-8 Jahren (Ja, so lange wird das bei dieser Vorgehensweise dauern!) erste Ergebnisse zu erzielen und dabei nur gelernt hast, wie man Betriebssysteme programmiert.

    Der Vorteil, wenn du dich erstmal mit Programmierung allgemein beschäftigt hast ist, dass du dann in ein paar Jahren (vielleicht reichen schon 1-2, wenn du gut bist) dich einfach mal ein paar Wochen mit Betriebssystemprogrammierung beschäftigen kannst und dann ganz schnell Ergebnisse erzielen wirst. Umgekehrt wird das nicht gut funktionieren.



  • Assemblerprogrammierung sollte man schon in den jungen Jahren lernen, da es sehr umfangreich ist und man brauch viel mehr Hintergrundwissen, als man erwartet. Ich hatte mich, rein aus Neugier, auch mal 2-3 Wochen damit beschäftigt. Das war aber mehr um reinzuschnuppern und zu schauen, wie das alles so funktioniert. Bringen tut dir das alles nicht mehr. Selbst wenn du es könntest, bräuchtest du alleine ewig, bis du mal ein ordentlich funktionierendes OS auf die Beine stellst. Heut zu Tage würde ich damit nicht mehr anfangen. Microsoft baut z.B. gerade auch an einem OS komplett in C# (in Zusammenarbeit mit Sing# oder auch Singularity) mit managed Code und die verwenden da kein Asm.



  • FreakY<3Cpp schrieb:

    Microsoft baut z.B. gerade auch an einem OS komplett in C# (in Zusammenarbeit mit Sing# oder auch Singularity) mit managed Code und die verwenden da kein Asm.

    Doch, tun sie.



  • Sicher?

    Singularity ist ein Projekt von Microsoft Research mit dem Ziel, ein zuverlässiges Betriebssystem zu schaffen, in dem der Kernel, Gerätetreiber und alle Applikationen in Managed Code geschrieben sind.
    ...
    Das Betriebssystem ist als Microkernel-System konzipiert. Kernel und Gerätetreiber sind in Managed Code geschrieben, wobei Sing#, eine Variante des C#-Derivats Spec#, zum Einsatz kommt.

    Hab jetzt den Quellcode gerade nicht zur Hand, sonst würde ich selber gucken.



  • Kann natürlich sein, dass sie die direkten Hardwarezugriffe wegabstrahieren (was übrigens jeder tut) und in ein extra Projekt auslagern. Ändert alles nichts daran, dass man für bestimmte Konfigurationsarbeiten an der CPU Assemblercode schreiben muss.



  • Einen kleinen Assembler Teil wird man in der Regel immer brauchen. Es ist in Hochsprachen z.B. nicht so einfach möglich eine Binary für den Bootsektor zu erstellen, die 512 Byte groß ist, am Ende die nötige Signatur enthält und dazu 16 Bit Code enthält. Auch bieten Hochsprachen in der Regel keine Funktionen an um auf bestimmte Register zuzugreifen, Interrupts aktivieren/deaktivieren oder andere Maschinenbefehle gezielt auszuführen. Hochsprachen haben ja den Sinn von der Architektur unabhängig zu sein, also wird auf dessen Besonderheiten nicht eingegangen. Da muss man zumindest ein paar Assembler Funktionen schreiben, die man dann aus dem Hochsprachen Code aufrufen kann.



  • Okay ihr habt Recht, ein kleiner Teil im Kernel ist native (asm + c++). Trotzdem bin ich noch der Meinung, dass man mittlerweile kein Asm mehr lernen sollte.



  • Was denkst du wie der C#-Code ausgeführt wird? Wenn keine neue Architektur rauskommt, wirst du immer erst mit Assembler beginnen müssen. Microsoft wird die Basis in Assembler/C schreiben und dann im inneren des Kernels einen Interpreter für C# schreiben, der es dann ermöglicht die Arbeit in C# fortzufahren.

    Zum Thema bleibt ja nicht viel zu sagen..



  • Wenn er sich durch Assembler durchgenagt hat, kann ihn andererseits keine
    Programmiersprache mehr schrecken. Ich habe mal mit eingetippten Hexdumps
    auf dem C64 angefagen (Assembler per Hand).

    Später Aztec C, der Compiler hat Assembler-output erzeugt, der wurde dann
    vom Assembler übersetzt - hochinteressant.


Anmelden zum Antworten