アセンブリファンでOSを作成してみました。私は失敗しました。コードは無愛想でした。これは私の2回目の試みだと思います。
StivaleプロトコルでLimine Bootloaderを使用しています。
このレポはリミンをサブモジュールとして使用するため、次のことを再帰的にクローンする必要があります。
git clone --recursive https://github.com/soumitradev/BruhOS.git
このプロジェクトをコンパイルする場合は、クロスコンパイラをセットアップすることを強くお勧めします。基本的なtoolchain.shファイルは、ELFファイル用のX86_64プラットフォーム用のクロスコンパイラをインストールするこのレポのルートに含まれています。
クロスコンパイラをインストールした後、QEMUでOSを実行するためにmake runことができます。
現在のところ、次のメイクコマンドが利用可能です。
make all :OSの.hddファイルを作成します。それでおしまい。make disk :OSの.hddファイルを作成します。それでおしまい。make run :OSの.hddファイルを作成し、QEMUで実行します。make log :OSの.hddファイルを作成し、実行し、Qemuにログを生成します。make logs :OSの.hddファイルを作成し、実行し、qemuにログを生成します。make debug :OSの.hddファイルを作成し、実行し、デバッグのためにGDBに添付します。make clean :ワーキングディレクトリを清掃し、すべてのビルドアーティファクトを削除します。toolchain.shスクリプトの実行は~/.local/bin/cross_compiler/x86_64/にクロスコンパイラをインストールします。 GCC、GDB、およびBinutilsが含まれます。クロスコンパイラバイナリには、プレフィックスx86-64-elf-があります。たとえば、 gccを実行するには、 ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc実行する必要があります。実行したいバイナリにプレフィックスがどのように準備されているかに注意してください。
注:このプロセスをより速くするには、スレッドの数を変数として設定する必要があります。これは通常、マシンが持っているスレッドの数よりも1個多いです。私のマシンには8つのスレッドがあるため、 toolchain.sh toolchain.shのTHREADS変数を9に設定します。
執筆時点では、最新のGCC、GDB、およびBinutilsバージョンはそれぞれ10.2.0、9.2、および2.35です。別のバージョンが必要な場合は、同じtoolchain.shスクリプトにBINUTILSVERSION 、 GCCVERSION 、およびGDBVERSION変数を交換します。
注:このスクリプトをスーパーユーザーとして実行しないでください。スクリプトを実行するには、しばらく時間がかかるため、安定したインターネット接続と1杯のコーヒーが必要です;)
Limineは、これまでで最も壮大なブートローダーです。
Qword、Rock、およびDriposはとても役に立ちました。このコードは、コードのクラスターファックです。彼らのコードはよく書かれており、理解しやすく、オスデフの学習を始めるのに最適な場所全体です。
Osdev Discord Serverは、学習し、質問するのに最適な場所でもあり、一般的に素晴らしいコミュニティです。
スクリーンショットは、半分の分野のカーネルをテストするためにツールチェーンを手に入れるのに費やす価値がないからです。


すべてのファイルはC ++ 17標準を使用し、LIBGCC以外の標準ライブラリを使用しないでください(OS/カーネル開発には明白)。すべてのオブジェクトファイルとカーネルビルドファイルは、ファイルmake cleanか、手動で削除することを使用してコミットする前にクリーン化する必要があります。 Gitignoreにはいくつかの基本的なフィルターが含まれていますが、ビルドアーティファクトをコミットしていないことを常に再確認してください。
MakeFileを除くすべてのファイルは、2つのスペースのあるインデントでインデントされたスペースです。はい、私は4つのスペースが好きですが、以前の経験があるので、これは構造のような巨大な木を生成することができ、2つのスペースインデントできれいに見えます。 MakeFileには、定義によりタブインデントが必要です。フォーマットすると、壊れます。
Googleフォーマットガイドラインを使用していることを確認してください。これは、VSコードで設定できます。
テストせずにコミットをプッシュし、それらが機能することを確認しないでください。
基本的な機能が使用されることを意図している場合に機能する場合は、コミットを押してください。私はあなたがすべてのセキュリティの欠陥を予見し、それを押す前にそれをパッチとすることを期待していません。
あなたのコードがこれらの標準に従うことを確認するプリプッシュチェックスクリプトを後で追加するかもしれません。