RISC-Vの開発環境

ソフトウェアツール群の紹介

前回は、RISC-Vのシステムレジスタやスーパバイザ命令について紹介しました。

ハードウェアとしての仕様については、第2回と第3回で紹介した程度の知識があれば十分と思います。では、次にソフトウェア環境について見てみましょう。いくらハードウェアが揃っていても、ソフトウェア環境が不十分ではユーザは開発を行うことができません。RISC-Vのエコシステムを支える、ソフトウェア群について今回は簡単にご紹介します。

ソフトウェア群が豊富なので、RISC-Vは簡単に始めやすい

RISC-Vの特徴はこれまでもご紹介したとおり、アーキテクチャの仕様がシンプルであること、仕様が全てオープンであることですが、さらにもう一つ特徴的なこととして、ソフトウェア群が充実していることが上げられます。

筆者がRISC-Vについて調査をはじめたのはおよそ3年前ですが、RISC-Vは当時知名度がほとんど無かったにも関わらず、本家の RISC-V Foundation | Instruction Set Architecture (ISA) および GitHub 上で、非常に多くのツール群が既に構築されており、誰でもダウンロードして使うことが出来るような環境が整っていました。

RISC-Vの知名度が上がった現在でも、ツールサポートはさらに拡充しています。基本的なところではGCC/LLVMなどのコンパイラ群、開発者向けのRISC-Vの命令セットシミュレータ、QEMUなど、さらにオペレーティングシステムによるRISC-Vのサポートなど、日々多くのツール群がRISC-V向けに移植され、ソフトウェア開発者はすぐにRISC-V向けにソフトウェアをコンパイルし、動作させることが出来ます。

猛烈なスピードで進むソフトウェアサポート

ここでRISC-Vの勢いを示す面白いグラフを見てみましょう。

図図. Debian GNU/Linux のパッケージ移植の進捗グラフ
(https://content.riscv.org/wp-content/uploads/2018/05/09.25-09.55-tate-of-RISC-V-Software-RISC-V-Workshop-at-Barcelona-May-2018-1.pdf より抜粋)

Debian GNU/LinuxのRISC-V移植プロジェクトの中で、debパッケージがRISC-Vに移植された期間とその数を示したグラフです(この資料はSiFiveによる発表によるもの)。

見て分かるとおり、Debianの50000本近くあるパッケージは、わずか2ヶ月の間で80%近くがRISC-V用にリコンパイルされ移植されました。まさに垂直立ち上がりという言葉が相応しい、凄まじい作業スピードです。まさにRISC-Vの現在の勢いそのものを示していると思います。

これらのパッケージはRISC-V版Debian GNU/Linuxで簡単にapt-getし、動作させることが出来ます。(RISC-V Workshop では SiFive社によって開発されたボードHiFive Unleashed上で、実際にDebian GNU/Linuxを動作させ、ほとんどのパッケージがapt-get出来ることが紹介されています)。

オープンソースなRISC-Vツールはどこで手に入れたらいいの?

RISC-V向けのツール群は、すでにGitHub上で広く公開されており、だれでもダウンロードして使うことができます。代表的なツール群は RISC-V Toolsリポジトリとしてまとめられています。

  • riscv-tools
    このリポジトリには、主に以下のツールがまとめて格納されています。ただし、その分必要なディスク容量も大きくなりますので、ダウンロードするときは注意が必要です。
    • riscv-gnu-toolchain : GCCやライブラリなど、RISC-V向けにプログラムをコンパイルするために必要なGNUツール。
    • riscv-isa-sim : Spike と呼ばれるRISC-V向けの命令セットシミュレータ(ISS)。
    • riscv-openocd : RISC-Vチップを使ってプログラムをデバッグするための、オンチップデバッガ
    • riscv-fesvr : フロントエンドサーバ。RISC-Vチップやシミュレーション環境を制御するためのフロントエンドサーバ
    • riscv-pk : プロキシカーネル。RISC-Vのプログラムの実行やシミュレーションをサポートするためのプロキシカーネル。ISSでRISC-Vのプログラムを実行する場合などに使用する。

RISC-V に対応しているツール群の紹介

RISC-Vに対応しているツール群の一部を簡単に紹介します(以下の図は筆者がRISC-V Day Tokyo 2017で仕様したスライドの一枚)。

図図. RISC-V を取り囲むソフトウェア群について
(筆者のRISC-V Day Tokyo 2017での発表スライドより抜粋)

コンパイラ

RISC-Vに対応したコンパイラとしては、まずはGCCです。GCCはVersion 7.1まではUCBで独自に開発が進められていましたが、Version 7.1になってGCCのMainstreamにRISC-Vのサポートが取り込まれました。GCCはRISC-Vに完全に対応したと言えます。

また、アプリケーションをコンパイルするためのライブラリ群 (glibc, newlib など) もRISC-Vへの移植が完了しています。

一方でもう一つのコンパイルプラットフォームであるLLVMですが、こちらはlowRISCというRISC-Vをベースとしたプラットフォームの開発グループにより、メインストリームに取り込むための対応が進められています。

オペレーティングシステム

次にオペレーティングシステムですが、既にLinuxをはじめとする多くのオープンソースのオペレーティングシステムがRISC-Vに対応しています。

LinuxはKernel Ver.4.15 からRISC-Vサポートが取り込まれました。

各種オペレーティングシステムの対応ですが、NetBSD、FreeRTOS、FreeBSDなどのプラットフォームに対応しています。Linuxのディストリビューションでは、FedoraとDebianがRISC-Vへの移植が活発に進められています。

シミュレータ・エミュレータ

RISC-Vのハードウェアはまだ種類が多くありません。ハードウェアが用意できない環境でソフトウェアを開発するためには、シミュレータは必要不可欠です。

また、RISC-Vのハードウェアを開発するにも、正しく実行できているかどうかを確かめるために、シミュレータやエミュレータでプログラムの動作を確認しておいたほうが良いです。RISC-Vには、さまざまなISSの実装が存在します。

Spike

Spike は、UCBの開発したRISC-V対応の命令セットシミュレータです。

SpikeはC++で記述されており、RISC-Vバイナリを呼んでシミュレーションすることができます。標準出力なども対応しているので、フロントエンドサーバライブラリでプログラムをコンパイルしておけば、printfなども使うことが出来ます。

Spikeは以下のGithubページからダウンロード可能です。
Spike, a RISC-V ISA Simulator

QEMU

また、QEMUもRISC-V版が開発されています。QEMU v2.12から、RISC-Vが正式にサポートされました。Spikeよりも高速で、Linuxも動作します。

RISC-V 対応のQEMUについては、以下でアナウンスがされています。
qemu ChangeLog/2.12

商用RISC-Vシミュレータ

上記のオープンソースのシミュレータ以外にも、商用のシミュレータが発表されています。

さまざまなCPUアーキテクチャのシミュレータを発表しているImperasも、RISC-V向けのシミュレーションモデルを発表しています。

また、RISC-Vの大規模メニーコアを開発しているEsperantoも、RISC-V Workshopで高速なJITタイプのRISC-Vシミュレータを発表しています。

RISC-V 体験編: RISC-V対応QEMUでFedoraを起動してみよう

RISC-Vについてより体験するために、今回は少し手を動かしてみます。先ほど紹介したように、QEMUがRISC-Vをサポートしたため、QEMU上でプログラムを動かしたり、オペレーティングシステム動作させることができるようになってきました。

ここでは、最新のQEMUをビルドしてRISC-V版QEMUを作成し、RISC-V用LinuxをビルドしてFedoraを起動してみましょう。

RISC-V 版 QEMUのビルド

RISC-V向けのQEMUターゲットとしては、以下の2つがあります。

  • riscv64-softmmu
  • riscv32-softmmu

QEMUをビルドするときは、この2つのうちどちらかを指定してください。これを指定しないと、すべてのプラットフォーム向けにビルドが始まってしまい非常に時間がかかります。

今回はriscv64-softmmuを使ってみます。

以下のコマンドにより${RISCV}/binqemu-system-riscv64がインストールされます。(${RISCV}はRISC-Vツール群をインストールする際に必要な環境変数です。)

					$ wget https://download.qemu.org/qemu-2.12.0.tar.xz
					$ tar Jxf qemu-2.12.0.tar.xz
					$ cd qemu-2.12.0/
					$ mkdir build
					$ cd build
					$ ../configure --target-list=riscv64-softmmu --prefix=${RISCV}
					$ make
					$ make install
					

QEMU を使ってFedoraのブートを行う

では、次にQEMUを使ってRISC-V版のFedoraを立ち上げます。Fedoraを起動するためのLinuxカーネル、ブートローダ、そしてFedoraのディスクイメージをダウンロードして起動してみましょう。

また、今回は簡単化のためにこれらのファイルはビルド済みのものをダウンロードしますが、一から自分でビルドすることもできます。詳細は筆者のブログを参照してください。

以下のようにしてLinuxを起動するためのファイル群をダウンロードします。また、Fedoraのディスクイメージについては解凍しておきます。

					$ wget https://fedorapeople.org/groups/risc-v/disk-images/vmlinux
					$ wget https://fedorapeople.org/groups/risc-v/disk-images/bbl
					$ wget https://fedorapeople.org/groups/risc-v/disk-images/stage4-disk.img.xz
					$ xzdec -d stage4-disk.img.xz > stage4-disk.img
					

以下でQEMUを起動します。

					qemu-system-riscv64   \
					    -nographic \
					    -machine virt \
					    -kernel bbl \
					    -object rng-random,filename=/dev/urandom,id=rng0 \
					    -device virtio-rng-device,rng=rng0 \
					    -append "console=ttyS0 ro root=/dev/vda" \
					    -device virtio-blk-device,drive=hd0 \
					    -drive file=stage4-disk.img,format=raw,id=hd0 \
					    -device virtio-net-device,netdev=usernet \
					    -netdev user,id=usernet,hostfwd=tcp::10000-:22
					

Fedoraが起動しました。しばらくするとログイン画面が表示されるので、

- ユーザ名 : root
- パスワード : riscv

でログイン可能です。

図

いかがでしたでしょうか?今回はRISC-Vの開発環境とソフトウェアツール群について、簡単にご紹介しました。

次回は、実際にRISC-Vを使いたい、という方のために、RISC-Vの実装について見ていきます。

前の記事を読む