開発環境

本書では、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を使いたい場合は、次のコマンドを頑張ってインストールしてください。

  • bash: コマンドラインシェル。UNIX系OSには基本的に最初から入っている。
  • tar: tarアーカイブ操作ツール。UNIX系OSには基本的に最初から入っている。GNU版のtarがおすすめ。
  • clang: Cコンパイラ。32ビットRISC-V CPUに対応していること (下記参照)。
  • llvm-objcopy: オブジェクトファイル編集ツール。よくLLVMパッケージに入っている。(GNU binutilsのobjcopyでも代用可)。
  • llvm-objdump: 逆アセンブラ。llvm-objcopyと同様。
  • llvm-readelf: ELFファイル解析ツール。llvm-objcopyと同様。
  • qemu-system-riscv32: 32ビットRISC-V CPUのエミュレータ。QEMUパッケージに入っている。

お使いの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