x86アーキテクチャ用に保護されたモードで構築されたマルチスレッドカーネル
カーネルは、ソースからカスタムビルドGCCクロスコンパイラを使用して開発されました
スコーピオンには、完全に吹き飛ばされたモノリシックカーネルに含まれる基本的なコンポーネントのほぼすべてがあります
スコーピオンは、カーネルがどのように振る舞い、ゼロから構築できるかを示すために使用されるモノリシックカーネルです
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のソースコード$HOME/srcディレクトリにダウンロードします。
$HOME/srcディレクトリで両方のダウンロードを抽出します
次に、ソースをターゲットのコンパイラオブジェクトファイルに変換しましょう
最初にいくつかのenv varを設定する必要があります。
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全体を含むスコーピオンOSバイナリ前のセクションで出力生成されたバイナリを使用して、Scorpion OSを実行する時期。ターミナルで次のコマンドを実行して、QemuでScorpionをシミュレートする
qemu-system-i386 -hda ./bin/scorpion.bin
または、起動可能なデバイスがBIOSメニューに正しく設定されている場合、物理マシンでテストする場合、マシンが次のシェルまで起動するマシンを見つけることができます。

シェルプロンプトは、左上にScorpionバージョンを使用してアクティブにする必要があります。これで、シェルで入力を開始できます。 blank.elfと呼ばれるサンプルプログラムが作成され、Scorpionハードドライブにロードされ、アクセスできるようになりました。
Scorpionコマンドプロンプトで以下を実行して、プログラムをメモリにロードします
> blank.elf
プログラムには、次のように次のように、次のように次のように処理できる引数をロードすることもできます。
> blank.elf 55 21 tree
このような出力は、プログラムが引数の有無にかかわらずロードされているかどうかに応じて生成する必要があります。
