このリポジトリは、『自作OSで学ぶマイクロカーネルの設計と実装』(秀和システム、ISBN: 978-4-7980-6871-8) のサポートサイト兼、教育用マイクロカーネルOS「HinaOS」のソースコードの配布場所です。
printf
関数で変数の中身を追ったり、デバッガを使って処理の流れを追ったりしながら、まずはHinaOSを改造して全体を理解していくアプローチです。
HinaOSに手を加えながら本書を読み進めていくことで、OSの仕組みをより深く理解することができます。一通り読んだあとは、こちらのドキュメント にまとめてある実験テーマから興味のあるものを選んで実装してみるとより楽しめるでしょう。
序盤に実装する必要があるくせにデバッグの難易度が非常に高く苦しいCPU初期化処理・割り込み周りの実装を、HinaOSをベースにすればスキップできるのでおすすめです。
本書はOSを体系的に学べるように各機能ごとにまとめて実装例を紹介しています。ただこのアプローチでは、ゼロから作って漸進的に学ぶことが難しく、一体どこから手をつければいいのか分かりにくいものです。
「HinaOSベースではなく、ゼロからステップバイステップで自作OSを作りたい」という方のために 1,000行で小さなRISC-V用OSを作る資料 を用意しました。最初の一歩さえ乗り越えられれば、あとは本書の興味のある部分をHinaOSを参考にしながら自作するための知識・自信がつくはずです。
Note
「ゼロからの実装の雰囲気を手っ取り早く動画で感じてみたい」という方は 筆者の45分OS自作ライブコーディング (オープンソースカンファレンス) がおすすめです。
HinaOS (ひなおーえす) はマイクロカーネルベースの教育用オペレーティングシステムです。次の特徴・機能を持っています。
- 32ビット RISC-V (QEMU virtマシン) に対応
- マルチプロセッサ対応マイクロカーネル
- 独自ファイルシステム (HinaFS)
- TCP/IP プロトコルスタック
- virtio-blk デバイスドライバ (仮想ストレージデバイス)
- virtio-net デバイスドライバ (仮想ネットワークデバイス)
- コマンドラインシェル
HinaOSの開発には次のパッケージが必要です。筆者が利用しているバージョンも記載していますが、同じバージョンでなくとも新しめのものであれば問題ありません。もしビルド時にエラーが出る場合には、バージョンが古すぎないか確認してください。
- Git バージョン 2.38.0
- Python バージョン 3.11.2
- GNU Make バージョン 3.81
- QEMU バージョン 7.1.0
- LLVMツールチェーン バージョン 15.0.2
Ubuntu 22.04 (Jammy) の場合は次のコマンドで必要なパッケージをインストールできます。
$ sudo apt update
$ sudo apt install llvm clang lld python3-pip qemu-system gdb-multiarch git
$ cd <HinaOSのディレクトリ>
$ pip3 install --user -r tools/requirements.txt
macOS 13 (Ventura) の場合は次のコマンドで必要なパッケージをインストールできます。
$ brew install llvm python3 qemu riscv-software-src/riscv/riscv-tools
$ cd <HinaOSのディレクトリ>
$ pip3 install --user -r tools/requirements.txt
Note
Windowsでもwingetを利用して上記のパッケージをインストールすることでネイティブな開発環境を構築できます(詳細なステップは本書の付録で解説しています)。ただし環境構築がかえって面倒であるため、WSL2上でUbuntuを利用するのがお勧めです。
git
コマンドでソースコードをダウンロードできます。
$ git clone https://github.com/nuta/microkernel-book
次のコマンドでビルドできます。-j8
は8並列ビルドを意味します。CPUコア数程度を指定すると良いでしょう。V=1
やRELEASE=1
はビルドオプションで、組み合わせて使うことができます。
$ make -j8 # OSをビルドする
$ make -j8 V=1 # OSをビルドする (詳細なビルドログを出力)
$ make -j8 RELEASE=1 # OSをビルドする (コンパイラのより高度な最適化を有効化)
$ make -j8 run # OSをビルドしてQEMUで実行する (シングルコア)
$ make -j8 run CPUS=4 # OSをビルドしてQEMUで実行する (4コア)
HinaOSのデバッグ を参照してください。
HinaOSは MITライセンス で公開されています。
HinaOSはシンプルさと分かりやすさを保つため、新機能を追加するプルリクエストは受け付けていません。誤字の修正やバグフィックスのような変更のみ受け付けています。ただし、各ドキュメント (ARCHITECTURE.md
など) の改善は大歓迎です :D