X86体系结构以保护模式内置的多线程内核
内核是使用来自源的自定义GCC交叉编译器开发的
Scorpion几乎拥有完整吹散整体内核中包含的所有基本组件
Scorpion是一种整体内核,用于证明内核的行为方式并可以从头开始
蝎子发展过程中使用的常数和广泛的参考为:https://wiki.osdev.org/main_page
以下是蝎子的一些属性:
0x80用于用户空间过程和内核通信内核的所有属性可能不会在这里捕获,并且可以随着时间的推移而继续改进,但是上述属性将保留为核心属性。
有一些先决条件可以建立和测试蝎子
在构建内核和引导加载程序之前,我们需要通过构建交叉补偿器来准备好环境。需要交叉补偿器,因为您的主机可能具有与我们正在运行内核的目标不同的架构。
使用以下命令安装交叉编译器依赖项:
sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libisl-dev
使用以下链接下载Bin Utils和GCC的源代码和GCC中的$HOME/src目录:
在$HOME/src目录中提取两个下载
现在,让我们将源转换为我们目标的编译器对象文件
首先,需要设置一些env vars以启用在正确的位置安装编译的二进制文件
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
运行以下命令来构建Binutils。不要忘记用自己的版本替换XYZ。
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
运行以下命令来构建GCC。不要忘记用自己的版本替换XYZ。
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
一旦完成所有步骤完成,请继续测试您的交叉补偿器是否通过以下命令成功构建和安装:
$HOME/opt/cross/bin/$TARGET-gcc --version
现在,我们的交叉编译器已经准备好,我们准备使用引导加载程序来构建蝎子。在项目结构的根部运行以下内容
./build.sh
如果构建成功,则应在项目根部的bin目录中生成3个二进制文件
boot.binkernel.binscorpion.bin 是时候使用上一节中使用输出生成的二进制文件运行Scorpion OS了。在终端中运行以下命令以使用QEMU模拟蝎子
qemu-system-i386 -hda ./bin/scorpion.bin
另外,如果在BIOS菜单中正确设置了可启动设备,则可以在物理计算机上进行测试,从而发现机器将启动到以下外壳

左上方的蝎子版本应激活外壳提示。您现在可以开始在外壳上输入。已经创建了一个称为blank.elf的示例程序,并在蝎子硬盘驱动器上加载了一个示例程序,以便它可以访问。
通过在蝎子命令提示符上执行以下以下操作,将程序加载到内存中
> blank.elf
该程序也可以加载参数,随后的用户过程如下:
> blank.elf 55 21 tree
这样的输出应根据程序是否加载或没有参数生成:
