Un núcleo multiproceso incorporado en modo protegido para la arquitectura x86
El núcleo se desarrolló utilizando un compilador cruzado GCC personalizado de la fuente
Scorpion tiene casi todos los componentes fundamentales abarcados en un núcleo monolítico completo
Scorpion es un núcleo monolítico utilizado para demostrar cómo se comporta el kernel y se puede construir desde cero
La referencia constante y extensa utilizada durante el desarrollo de Scorpion es: https://wiki.osdev.org/main_page
Los siguientes son algunos de los atributos de Scorpion:
0x80 para el proceso de espacio de usuario y la comunicación del kernelTodos los atributos del núcleo pueden no ser capturados aquí y pueden seguir mejorando con el tiempo, pero los anteriores permanecerán como propiedades centrales.
Hay algunos requisitos previos para construir y probar Scorpion
Antes de construir el núcleo y el cargador de arranque, necesitamos preparar el entorno construyendo el compilador cruzado. Se necesita un compilador cruzado porque su anfitrión puede tener una arquitectura diferente al objetivo en el que estamos ejecutando el núcleo.
Instale dependencias de compilador cruzado con los siguientes comandos:
sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libisl-dev
Descargue el código fuente para BIN Utils y GCC en $HOME/src Directory utilizando los siguientes enlaces:
Extraiga ambas descargas en el directorio $HOME/src
Ahora convirtamos la fuente en archivos de objetos del compilador para nuestro objetivo
Primero, se deben configurar algunos Vars Env para habilitar la instalación de binarios compilados en la ubicación correcta
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
Ejecute el siguiente comando para construir binutils. No olvide reemplazar XYZ con su propia versión.
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
Ejecute el siguiente comando para construir GCC. No olvide reemplazar XYZ con su propia versión.
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
Una vez que se completen todos los pasos anteriores, continúe y pruebe si su compilador cruzado está construido e instalado con éxito o no con el siguiente comando:
$HOME/opt/cross/bin/$TARGET-gcc --version
Ahora que nuestro compilador cruzado está listo, estamos listos para construir Scorpion con el cargador de arranque. Ejecute lo siguiente en la raíz de la estructura del proyecto
./build.sh
Si la construcción tiene éxito, se deben generar 3 binarios en el directorio bin en la raíz del proyecto
boot.binkernel.bin binario del núcleo.scorpion.bin Es hora de ejecutar el sistema operativo Scorpion utilizando los binarios generados por la salida en la sección anterior. Ejecute el siguiente comando en el terminal para simular Scorpion con QEMU
qemu-system-i386 -hda ./bin/scorpion.bin
Alternativamente, encontrará que la máquina inicia hasta el siguiente shell si se prueba en una máquina física si el dispositivo de arranque está configurado correctamente en el menú BIOS

Se debe activar una solicitud de shell con la versión de Scorpion en la parte superior izquierda. Ahora puede comenzar a escribir en la carcasa. Se ha creado y cargado un programa de muestra llamado blank.elf en el disco duro de Scorpion para que pueda acceder.
Cargue el programa en la memoria ejecutando lo siguiente en el símbolo del sistema Scorpion
> blank.elf
El programa también se puede cargar con argumentos que pueden ser manejados por el proceso de usuario resultante de la siguiente manera:
> blank.elf 55 21 tree
Se debe generar una salida como esta dependiendo de si el programa está cargado con o sin argumentos:
