Un noyau multi-thread intégré en mode protégé pour l'architecture x86
Le noyau a été développé à l'aide d'un compilateur Cross GCC sur mesure à partir de Source
Scorpion a presque tous les composants fondamentaux englobés dans un noyau monolithique à part entière
Scorpion est un noyau monolithique utilisé pour démontrer comment se comporter du noyau et peut être construit à partir de zéro
La référence constante et étendue utilisée pendant le développement de Scorpion est: https://wiki.osdev.org/main_page
Voici quelques-uns des attributs du scorpion:
0x80 pour le processus d'espace utilisateur et la communication du noyauTous les attributs du noyau peuvent ne pas être capturés ici et peuvent continuer à s'améliorer avec le temps, mais ceux ci-dessus resteront les propriétés centrales.
Il y a des conditions préalables à construire et à tester Scorpion
Avant de construire le noyau et le chargeur de démarrage, nous devons préparer l'environnement en construisant le compilateur croisé. Un compilateur croisé est nécessaire car votre hôte peut avoir une architecture différente de la cible sur laquelle nous exécutons le noyau.
Installez les dépendances entre les compilateurs avec les commandes suivantes:
sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libisl-dev
Téléchargez le code source de Bin Utils et GCC dans le répertoire $HOME/src en utilisant les liens suivants:
Extraire les deux téléchargements dans le répertoire $HOME/src
Maintenant, convertissons la source en fichiers d'objets de compilateur pour notre cible
D'abord, certains Env Vars doivent être définis pour permettre à la fabrication d'installer des binaires compilés à la bonne place
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
Exécutez la commande suivante pour construire des binutils. N'oubliez pas de remplacer XYZ par votre propre version.
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
Exécutez la commande suivante pour construire GCC. N'oubliez pas de remplacer XYZ par votre propre version.
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
Une fois toutes les étapes ci-dessus terminées, allez-y et testez si votre compilateur croisé est construit avec succès et installé ou non avec la commande suivante:
$HOME/opt/cross/bin/$TARGET-gcc --version
Maintenant que notre compilateur croisé est prêt, nous sommes prêts à construire Scorpion avec le chargeur de démarrage. Exécutez ce qui suit à la racine de la structure du projet
./build.sh
Si la construction réussit, 3 binaires doivent être générés dans le répertoire bin à la racine du projet
boot.binkernel.bin du noyau.binscorpion.bin Il est temps d'exécuter Scorpion OS en utilisant les binaires générés par la sortie dans la section précédente. Exécutez la commande suivante dans le terminal pour simuler Scorpion avec Qemu
qemu-system-i386 -hda ./bin/scorpion.bin
Alternativement, vous trouverez que la machine démarre sur le shell suivant en cas de test sur une machine physique si le périphérique de démarrage est réglé correctement dans le menu du BIOS

Une invite de shell doit être activée avec la version Scorpion en haut à gauche. Vous pouvez maintenant commencer à taper sur la coquille. Un exemple de programme appelé blank.elf a été créé et chargé sur le disque dur Scorpion pour qu'il puisse accéder.
Chargez le programme en mémoire en exécutant ce qui suit sur l'invite de commande Scorpion
> blank.elf
Le programme peut également être chargé d'arguments qui peuvent être gérés par le processus utilisateur qui s'ensuivit comme suit:
> blank.elf 55 21 tree
Une sortie comme celle-ci doit être générée selon que le programme est chargé avec ou sans arguments:
