Mein erstes Betriebssystem, das Koffein angetrieben hat.
Dies ist ein Lernprojekt, wir werden sehen, wie weit es geht. Wenn ich "von Koffein angetrieben" sage, meine ich buchstäblich Koffein, nicht ein neues OS -Gebäudegerüst. Aber das wäre ein ziemlich cooler Name für ein Betriebssystemgebäude -Framework.
Ich betreibe dieses Projekt in Ubuntu18.04 LTS. Ich verwende einen Remote -Build mit Visual Studio auf dem PC, aber Sie können das Makefile direkt auf einer Ubuntu -Maschine verwenden. Mein Betriebssystem läuft derzeit in einer VM in Ubuntu. Ich würde nicht empfehlen, dieses "auf Metall" auszuführen, da Fehler den Computer durch Permintaly -Änderung von BIOs und ROM -Daten abstrichen können. Im Folgenden sind die Pakete aufgeführt, die ich installiert habe, um dieses Projekt in Gang zu bringen:
Das Makefile erstellt jedes Mal, wenn sie ausgeführt wird, eine ISO -Datei am selben Ort mit demselben Namen. In VirtualBox habe ich ein VM namens Caffeinos mit 512 MB RAM, kein VDK/VMDK und mit den optischen Medien auf die ISO -Datei und das "Live -CD" -Box geprüft.
Sogar die ISO -Datei ändert sich mit jedem Build, der VM wird immer an denselben Ort gehen, um die ISO zu finden und daraus zu starten.
Im Moment habe ich einen bootfähigen Kernal. Es macht nichts anderes, als den Betriebssystemnamen auszudrucken. Bisher habe ich Totorials gefolgt, aber nur sehr wenige über diesen Punkt abdecken. Keine Ich fand verwendet C ++, nur C.
Ich recherchiere, was der nächste Teil des Kernels ist, den ich als nächstes bauen sollte. Meine Vermutung ist ein dynamischer Speicher. Derzeit habe ich die Ausgabe mit einer VGA -Adresse, um Text auf den Bildschirm zu schreiben. Ich habe die Eingabe noch nicht herausgefunden. Wie gesagt, Tutorials kommen nicht wirklich über das bootbare "Hello World" -Boik.
Ich habe den RAM erkannt und Werte erhalten, die eine Sicht machen (niedrige Mem ~ = 640 kb, niedrig+hi ~ = 512mb), also bin ich wirklich glücklich. Ich konnte auch eine Zeichenfolge aus dem Bootloader bekommen, indem ich einen Uint32_t in einen const char* und das Drucken von Array am Zeiger einlegte. Ich habe die multiboboot.h -Spezifikation von der Gnu.org -Site verwendet. Die multiboot.h -Datei enthält Emmpty Struct- und TypedeF -Deklarationen, die mit den Blöcken der Informationen übereinstimmen, die der Bootloader (grub2.02) über die multiboot_info_t*sendet. Wenn ich die Blockisierungen kennen, kann ich die Zeiger in die Daten geben, die ich vom Bootloader benötige.