Ein Multi-Thread-Kernel, der im geschützten Modus für die X86-Architektur eingebaut ist
Der Kernel wurde mit einem benutzerdefinierten GCC -Cross -Compiler von Quelle entwickelt
Skorpion hat fast alle grundlegenden Komponenten, die in einem ausgeblasenen monolithischen Kernel enthalten sind
Skorpion ist ein monolithischer Kernel, der zeigt, wie Kernel sich verhalten und von Grund auf gebaut werden kann
Die konstante und umfangreiche Referenz, die während der Entwicklung von Skorpion verwendet wird, lautet: https://wiki.osdev.org/main_page
Im Folgenden finden Sie einige der Attribute von Skorpion:
0x80 für den Benutzerraumprozess und die KernelkommunikationAlle Eigenschaften des Kernels werden hier möglicherweise nicht erfasst und können sich im Laufe der Zeit weiter verbessern, aber die oben genannten bleiben als Kerneigenschaften.
Es gibt einige Voraussetzungen, um Skorpion zu bauen und zu testen
Bevor wir den Kernel und den Bootloader bauen, müssen wir die Umgebung durch den Bau des Cross-Compiler vorbereiten. Ein Cross-Compiler wird benötigt, da Ihr Host möglicherweise eine andere Architektur hat als das Ziel, auf dem wir den Kernel leiten.
Installieren Sie die Abhängigkeiten mit den Kompilierern mit den folgenden Befehlen:
sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libisl-dev
Laden Sie den Quellcode für Bin Utils und GCC mit den folgenden Links in $HOME/src -Verzeichnis herunter:
Extrahieren Sie beide Downloads im Verzeichnis $HOME/src
Konvertieren wir nun die Quelle in Compiler -Objektdateien für unser Ziel
Zuerst müssen einige Env -Vars so eingestellt werden, dass er kompilierte Binärdateien am richtigen Ort installiert werden kann
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
Führen Sie den folgenden Befehl aus, um Binutils zu erstellen. Vergessen Sie nicht, XYZ durch Ihre eigene Version zu ersetzen.
cd $HOME/src
mkdir build-binutils
cd build-binutils
../binutils-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make
make install
Führen Sie den folgenden Befehl aus, um GCC zu erstellen. Vergessen Sie nicht, XYZ durch Ihre eigene Version zu ersetzen.
cd $HOME/src
# The $PREFIX/bin dir _must_ be in the PATH. We did that above.
which -- $TARGET-as || echo $TARGET-as is not in the PATH
mkdir build-gcc
cd build-gcc
../gcc-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
Sobald alle oben genannten Schritte abgeschlossen sind, testen Sie, ob Ihr Kreuzkompiler erfolgreich erstellt und installiert ist oder nicht mit dem folgenden Befehl:
$HOME/opt/cross/bin/$TARGET-gcc --version
Nachdem unser Kreuzkompiler fertig ist, können wir mit dem Bootloader Skorpion erstellen. Führen Sie Folgendes mit der Wurzel der Projektstruktur aus
./build.sh
Wenn der Build erfolgreich ist, sollten 3 Binärdateien im bin -Verzeichnis am Wurzel des Projekts generiert werden
boot.binkernel.binscorpion.bin enthält Es ist Zeit, das Skorpion -Betriebssystem mit den im vorherigen Abschnitt erzeugten Binärdateien auszuführen. Führen Sie den folgenden Befehl im Terminal aus, um Skorpion mit QEMU zu simulieren
qemu-system-i386 -hda ./bin/scorpion.bin
Alternativ finden Sie den Maschine, der bis zur folgenden Shell startet, wenn das Testen auf einer physischen Maschine getestet wird, wenn das bootfähige Gerät im BIOS -Menü korrekt eingestellt ist

Eine Shell -Eingabeaufforderung sollte mit einer Scorpion -Version oben links aktiviert werden. Sie können jetzt anfangen, die Schale zu tippen. Ein Beispielprogramm namens blank.elf wurde erstellt und auf der Scorpion -Festplatte geladen, damit es zugreifen kann.
Laden Sie das Programm in den Speicher, indem Sie Folgendes auf der Eingabeaufforderung Scorpion ausführen
> blank.elf
Das Programm kann auch mit Argumenten geladen werden, die durch den folgenden Benutzerprozess wie folgt behandelt werden können:
> blank.elf 55 21 tree
Eine solche Ausgabe sollte generiert werden, je nachdem, ob das Programm mit oder ohne Argumente geladen ist:
