uchanさんによって執筆されたゼロからの OS 自作入門の中で製作するMikanOSをRustで挑戦するプロジェクトです。
進捗や実装時のメモはZennに挙げています。
setup.shを実行してください。
makeコマンドでビルドと実行ができます。
make
make debugでGDBを使用したデバッグ実行ができます。
make debug
Clionの場合、実行設定でRemoteDebugを追加し、下記項目の通り設定することでデバッグ実行の設定ができます。
- Debugger
- GBDのbinaryがあるディレクトリのパス(WSL上で実行する場合、WSL内のGDBを指定する必要があります。)
- Target remote args
- tcp::1234
- Symbol file
- kernel.elfへのパス
終了する際はQemuモニタ上で下記コマンドを使用してください。
qemu> q
テストは下記コマンドで実行できます。
make test
テストビルドの際はカーネルのターゲットディレクトリをクリーンする必要があるため、少々時間がかかります。
開発環境構築用に、Dockerコンテナを起動し、コンテナ内で開発する方法を検討していましたが、
Clionでは VscodeのDevContainerのような拡張機能が見つからなかっため、使用していません。
一応Dockerfileとdocker-compose.ymlは残しています。
この項目はMikanOSのビルド方法をメモしただけなので、MikanOS-rsとは関係ありません。
#edk2
source edksetup.sh
build
$HOME/osbook/devenv/qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
Qemu上でHelloWorldをする!
メモリーマップの情報をファイルに出力する!
カーネルファイルをロードして、エントリーポイントを呼び出す!
GraphicOutputProtocolを使い、ブートローダーからピクセルを描画する!
カーネルからピクセルを描画する!
ピクセルライターを作成する!
'A'という文字を描画する!
フォントを列挙したオブジェクトファイルから文字を描画する!
コンソール制御をする機構の作成をする!
println!マクロの実装をする!
マウスドライバを実装する!
マウスを割り込みに対応させる!
メモリ管理を実装する!
重ね合わせ処理を実装する!
簡易的なウィンドウを作成する!
Apicタイマの割り込み処理を実装する!
キーボード入力を実装する!
コンテキストスイッチを手動で出来るようにする!
タイマ割り込み内でコンテキストスイッチを出来るようにする!
タスクを3つ以上生成できるようにする!
タスクに優先順位を設定する!
ターミナルのUIを作成する!
ターミナルにコマンドを実装する!