1000行で作るOS - 開発環境

  1. はじめに
  2. 開発環境
  3. RISC-V入門
  4. OSの全体像
  5. ブート
  6. Hello World!
  7. C標準ライブラリ
  8. カーネルパニック
  9. 例外処理
  10. メモリ割り当て
  11. プロセス
  12. ページテーブル
  13. アプリケーション
  14. ユーザーモード
  15. システムコール
  16. ディスク読み書き
  17. ファイルシステム
  18. おわりに

本書では、macOSとUbuntuといったUNIX系OSを想定しています。Windowsをお使いの場合は、Windows Subsystem for Linux (WSL2) をインストールしたのち、Ubuntuの手順に従ってください。

ソフトウェアのインストール

macOS

Homebrew をインストールしたのち、次のコマンドで必要なパッケージをインストールします。

brew install llvm qemu

Ubuntu

次のコマンドで必要なパッケージをインストールします。他のLinuxディストリビューションをお使いの場合は、適宜読み替えてください。

sudo apt update && sudo apt install -y clang llvm lld qemu-system-riscv32 curl

加えてOpenSBI (PCでいうBIOS/UEFI) を作業用ディレクトリにダウンロードしておきます。

cd <開発用ディレクトリ>
curl -LO https://github.com/qemu/qemu/raw/v8.0.4/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin

QEMUを実行する際に、 opensbi-riscv32-generic-fw_dynamic.bin がカレントディレクトリにある必要があります。別の場所にある場合、次の「ファイルが見当たらない」エラーが出ます。

qemu-system-riscv32: Unable to load the RISC-V firmware "opensbi-riscv32-generic-fw_dynamic.bin"

その他のOS

どうしても他のOSを使いたい場合は、次のコマンドを頑張ってインストールしてください。

お使いのclangが32ビットRISC-Vに対応しているかは、次のコマンドで確認できます。

$ clang -print-targets | grep riscv32
    riscv32     - 32-bit RISC-V

riscv32が表示されればOKです。表示されない代表例としては、macOS標準のclangがあります。上記の手順では、Homebrewの全部入りclang (llvmパッケージ) を代わりにインストールしています。

Gitリポジトリの用意 (任意)

もしGitリポジトリ下で作っていく場合は、次の.gitignoreをあらかじめ用意しておくと便利です。

.gitignore
/disk/* !/disk/.gitkeep *.map *.tar *.o *.elf *.bin *.log *.pcap