RISC-V QEMUで色々と動かす

RISC-V用のQEMUが公開されていて使ってみることにする。QEMU/LLVMともに開発速度が猛烈に早いから、このビルド方法は”現時点”でのビルド方法になる。 またビルドにはEC2 t3.2xlarge(8vCPU/32Gmem/30GSSD/Ubuntu 18.04)を使ってみた。1時間使っても40円弱、めちゃくちゃ安い。 自分のPC(VirtualBox: 2vCPU/4Gmem)でビルドをすると、この辺のはいつになっても終わらないから、クラウド上でビルドしてローカルに持ってくればそれでOK。サクサク時間の節約にもなる。以下、手順を踏んでトータルで1時間もあればビルドが終わって確認できるはず(多分)。

# 必要な物をざっくりインストール
sudo apt-get install gcc libc6-dev pkg-config bridge-utils uml-utilities zlib1g-dev libglib2.0-dev autoconf automake libtool libsdl1.2-dev libpixman-1-dev cmake

# qemu build
# 4.1系を使う必要あり、4.0系だとこれにハマる。
# https://github.com/sifive/freedom-e-sdk/issues/260
# 4.1.0-rc0だとパッチがかかっている。
wget https://download.qemu.org/qemu-4.1.0-rc0.tar.xz
tar xvJf qemu-4.1.0-rc0.tar.xz
cd qemu-4.1.0-rc0
./configure --target-list=riscv64-softmmu,riscv32-softmmu,riscv64-linux-user,riscv32-linux-user
make -j$(nproc)
sudo make install


次にPlatformIOを使ってqemu向けベアメタル用のelfを作る。hifive1ボードをターゲットにしてサクッとビルドするだけ。それにしてもpioはこの手の組込み向けだと最強というか、VScodeは何でも出来てしまうヤバさがステキすぎる。ちなみに、みんな大好きSiPEED向けのボードも既にpioに入っていて、kendryte210 SDKでのビルドも作れる。


これで出来たfirmware.elfをEC2側に送ってqemuですぐ動かすことが出来る。
次に折角なのでLLVMのビルドも作っておく。これは以下の手順通りsifive(hifive1)の手順があって、toolchain/llvmの手順通り流すとビルドが終わる。
https://github.com/sifive/riscv-llvm

以上で物が揃って、全部qemu risc-vエミュ上でサクッと動かせる。あとはこんな感じで。
 

qemu-system-riscv32 -nographic -machine sifive_e -kernel firmware.elf 
qemu-riscv32 hello

これで一通り、gnu-toolchain/llvm/qemu上での動作が確認できる。よくあるFedora RISC-Vも普通に動く感じ。次はQEMUのRISC-V命令セット部分をいじっていこう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください