背景
そろそろRISC-Vを動かしてみようと思い、手軽なqemuを使ってみることにしました。プロセッサの仕様も正しく理解できていないので、まずは一番シンプルそうな本家のfreedom-e-sdkから動かしてみます。
環境
OS: Ubuntu18.04 x86_64 on VMware Fusion 11.5.0 on macOS 10.15.1
セットアップ
gitなどのツールはセットアップ済みと仮定します。
$ git clone --recursive https://github.com/sifive/freedom-e-sdk.git
ツールチェーンは、https://www.sifive.com/boards からダウンロードします。
$ curl https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
ツールチェーンを展開して、パスを通しておきます。
qemuも https://www.sifive.com/boards からダウンロードできますが、自分でビルドしても構いません。(2019/11/11時点のqemuのmasterは問題なく動作しました)
ビルド
$ cd freedom-e-sdk
$ make
...
riscv64-unknown-elf-gcc ... -march=rv32imac -mabi=ilp32 ...
とすると、software/hello/debug/hello.elf が出来上がります。
補足ですが、make helpとすると、オプションがでます。どうやらデフォルトのTARGETはfreedom-e310-arty (DigilentのFPGAボードでfreedom-e310コアを動かすためのターゲット)のようです。また注目すべきは、toolchainは、riscv64-unknown-elf-gccとなっており、64bit CPUまで対応可能なコンパイラーを使っていますが、freedom-e310が32bitなので、-march, -mabiを指定しているようです。
qemuで実行
$ qemu-system-riscv32 -nographic -machine sifive_e -kernel ./software/hello/debug/hello.elf
Hello, World!
とすれば、先ほどビルドした hello.elf が実行できます。