Ich habe versucht, ein Betriebssystem in der Montage-Fun zu machen. Ich habe versagt. Der Code war knusprig. Dies ist mein zweiter Versuch, denke ich.
Ich benutze den Limin -Bootloader mit dem Stivale -Protokoll.
Da dieses Repo Limine als Submodul verwendet, müssen Sie dieses Repo rekursiv anhand von:
git clone --recursive https://github.com/soumitradev/BruhOS.git
Das Einrichten eines Cross -Compilers wird dringend empfohlen, wenn Sie dieses Projekt kompilieren möchten. Eine grundlegende toolchain.sh -Datei ist im Stamm dieses Repo enthalten, das einen Cross -Compiler für die X86_64 -Plattform für Elf -Dateien installiert.
Nach dem Installieren des Cross -Compilers können Sie make run werden, um das Betriebssystem in QEMU auszuführen.
Ab sofort sind die folgenden Befehle verfügbar:
make all : Machen Sie die .HDD -Datei für das Betriebssystem. Das war's.make disk : Erstellen Sie die .HDD -Datei für das Betriebssystem. Das war's.make run : Erstellen Sie die .HDD -Datei für das Betriebssystem und führen Sie sie in QEMU aus.make log : Erstellen Sie die .HDD -Datei für das Betriebssystem, führen Sie sie aus und lassen Sie QEMU Protokolle generieren.make logs : Erstellen Sie die .HDD -Datei für das Betriebssystem, führen Sie sie aus und lassen Sie QEMU Protokolle generieren.make debug : Erstellen Sie die .HDD -Datei für das Betriebssystem, führen Sie sie aus und fügen Sie sie zum Debuggen an GDB hinzu.make clean : Reinigen Sie das Arbeitsverzeichnis und entfernen Sie alle Build -Artefakte. Durch das Ausführen des Skripts toolchain.sh wird der Cross -Compiler unter ~/.local/bin/cross_compiler/x86_64/ installiert. Es enthält GCC, GDB und Binutils. Die Cross-Compiler-Binärdateien haben das Präfix x86-64-elf- . Um gcc zum Beispiel auszuführen, müssen Sie ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc ausführen. Beachten Sie, wie das Präfix auf die binäre Binärdehnung vorbereitet ist, die wir ausführen möchten.
Hinweis: Um diesen Vorgang schneller zu gestalten, müssen Sie die Anzahl der Threads als Variable festlegen, was normalerweise 1 mehr ist als die Anzahl der Threads, die Ihre Maschine hat. Meine Maschine verfügt über 8 Threads. Daher habe ich die THREADS -Variable im Skript toolchain.sh auf 9 festgelegt. Bitte überprüfen Sie die Anzahl der Threads, die Sie haben, und ändern Sie diese Variable im Skript toolchain.sh entsprechend.
Zum Zeitpunkt des Schreibens sind die neuesten Versionen GCC, GDB und Binutils 10.2.0, 9,2 bzw. 2,35. Wenn Sie eine andere Version wünschen, ersetzen Sie die BINUTILSVERSION , GCCVERSION und GDBVERSION -Variablen im selben toolchain.sh -Skript.
Hinweis: Führen Sie dieses Skript nicht als Superuser aus. Das Ausführen des Skripts erfordert eine stabile Internetverbindung und eine Tasse Kaffee, da es eine Weile dauert;)
Limine ist der epischste Bootloader, der jemals existiert.
QWORD, ROCK und DRIPOS waren sehr hilfreich. Dieser Code ist so ziemlich ein Clusterfuck ihres Code. Ihr Code ist gut geschrieben, leicht zu verstehen und insgesamt ein großartiger Ort, um OSDEV zu lernen.
Der OSDEV Discord Server ist auch ein großartiger Ort zum Lernen, Fragen und im Allgemeinen eine großartige Community.
Screenshots, weil es die Zeit nicht wert ist, die Toolchain dazu zu bringen, einen halbfertigen Kernel zu testen.


Alle Dateien verwenden den C ++ 17 -Standard. Verwenden Sie keine Standardbibliothek außer LIBGCC (offensichtlich für OS/Kernel -Entwicklung). Alle Objektdateien und Kernel -Build -Dateien sollten vor dem Vertrag gereinigt werden, indem Sie die Dateien make clean oder manuell löschen. Der Gitignore enthält einige grundlegende Filter, aber immer doppelte Überprüfung, dass Sie keine Build -Artefakte begehen.
Alle Dateien mit Ausnahme des Makefile sind Platz mit einem Einrückungseinsatz mit 2 Leerzeichen. Ja, ich mag 4 Leerzeichen, aber wenn ich einige frühere Erfahrungen habe, kann dies riesige Baumstrukturen erzeugen und es sieht mit 2 Raumeinstiegsanlagen sauberer aus. Die Makefile erfordert per Definition die Tabulatoren. Formatieren Sie es lässt es brechen.
Stellen Sie sicher, dass Sie die Google -Formatierungsrichtlinien verwenden. Dies kann in VS -Code eingestellt werden.
Schieben Sie keine Commits ohne Testen und stellen Sie sicher, dass sie funktionieren.
Wenn die grundlegenden Funktionen so funktionieren, wie sie verwendet werden sollen, drücken Sie Ihre Commits. Ich erwarte nicht, dass Sie jeden Sicherheitsfehler vor dem Schieben formen.
Ich könnte später ein Vor-Push-Check-Skript hinzufügen, das sicherstellt, dass Ihr Code diesen Standards folgt.