[RISC-V技術ブログ連載第17回]QEMUを使ってRISC-Vを試す①

SiFive技術ブログ・アイキャッチ画像 RISC-V

1.はじめに

 本技術ブログではこれまで、SiFive RISC-Vが実際に動作する実機(開発ボード)を用いて、簡単にRISC-Vをお試しいただける方法についてご紹介してきました。今回、実機を用いることなく、エミュレータ(QEMU)を用いることでより手軽にRISC-Vの動作を試す方法について、数回に渡ってお伝えしていきます。

2.QEMUとは

 QEMUとは、Fabrice Bellard氏によって開発されオープンソースとして提供されているプロセッサエミュレータで、様々なアーキテクチャに対応しています(※1)。日本では“きゅーえみゅ”、または“きゅーえむ”と読まれることが多いようです。実機の台数が潤沢に確保できない状況や、実機が開発される前であっても、ソフトの先行開発やデバッグ、検証に利用できるため、組込みソフトウェア開発に携わっている方々の間では広く重宝されています。また、最近では、DebianやUbuntuのbootstrap(ファイルシステム構築)時に使われたり、kvmでも使われている等、Linuxプラットフォームでもコア部分の重要な役割を担うようになってきています。

 QEMUには、以下の2つの環境が用意されています。

  • フルシステムエミュレーション
    プロセッサや周辺デバイスを含めたシステム全体をエミュレーションします。ホストOS(QEMUを起動するOS)とは異なるOSであっても起動することができます。デバイスドライバーなどのカーネルモードで動作するプログラムの開発にも利用することができます。
  • ユーザーモードエミュレーション
    異なるプロセッサ用にコンパイル、ビルドされたバイナリイメージを、ホストOS上の一つのプロセスとして動作させることができます。フルシステムエミュレーションよりも動作が軽く、使えるメモリ量も多いものの、動作させるバイナリイメージはLinuxまたはBSD上のユーザーモードで動作するプログラムである必要があり、カーネルモードで動作するプログラムの開発に利用することはできません。

※1 https://wiki.qemu.org/Documentation/Platforms

3.RISC-V版QEMUの状況

 RISC-V版のQEMUは、3年前まではRISC-Vインターナショナルによって管理されているhttps://github.com/riscv/riscv-qemu にて開発が進められていましたが、現在は本家リポジトリ(Upstream)であるhttps://gitlab.com/qemu-project/qemu にマージされています。また、現在の最新バージョンは7.0.0ですが、それまでのChangeLog(変更履歴)は、https://wiki.qemu.org/ChangeLog/ で確認することができます。たとえば、https://wiki.qemu.org/ChangeLog/7.0#Extensions を見ると、
  “Add support for ratified 1.0 Vector extension”

といった記述が見つかります。以前のブログ「[RISC-V技術ブログ連載第15回] RISC-V 最新リリース ISA のご紹介 ~2021/11 Ratified RISC-V extension の概要~」でご紹介した、RatifiedされたVector ExtensionがQEMU 7.0.0でサポートされたことがわかります。

また、以下のようなサイトからRISC-V版QEMUの構築方法についての情報を得ることができます。

次章では、QEMUを使ってFedoraを起動する様子をご紹介します。

4.QEMUでFedoraを動かす

4.1.概要

 今回は、手軽にLinuxディストリビューションの起動確認を行うことを目的として、すでにビルド済みイメージが用意されているFedoraの起動を試みます。また、QEMUは実績の多いLinux版を使うこととしますが、QEMUを動作させるためのLinuxはWSL2(※2)上で構築することにもチャレンジします。下図に簡単なアーキテクチャ図を示します。

アーキテクチャ図

 ※2 Windows上でLinux実行環境を構築する仕組みです。Windows Subsystem For Linux2の略で2020年5月に正式リリースされました。旧来のWSLと異なり、ハイバーバイザー(Hyper-V)を利用することで、より完全なLinuxカーネルの構築とシステムコールの完全な互換性を確立することができます。

4.2. ソフトウェア環境

今回使用したソフトウェア環境を以下に示します。

  • Windows(ホストOS)
    エディション:Windows 10 PRO
    バージョン:21H2
    OSビルド:19044.1645
  • 仮想マシン
    WSL2
  • Linux(ゲストOS)
    Ubuntu 20.04
  • エミュレータ
    QEMU 6.2.0
  • RISC-V Linux
    Fedora 31

 なお、すべてCドライブにインストールされるため、Cドライブの空き容量10GBは確保しておきます (※3) 。

※3 今回の手順で作成したWSL2の仮想ディスクサイズは5.7GBでした。また、WSL2を他のドライブへインストールすることも可能です。

4.3.Ubuntu 20.04のインストール

 まず、WSL2を利用する際、「Windowsの機能の有効化または無効化」設定にて、「Linux用Windowsサブシステム」、「仮想マシンプラットフォーム」を有効にします。次に、https://github.com/microsoft/WSL/issues/4177 を参考に、NoLsp.exeを任意のフォルダー(今回は”c:¥temp”)にダウンロードします。PowerShellを管理者権限で実行し、以下を入力します。

cd ¥temp
.¥NoLsp.exe c:¥windows¥system32¥wsl.exe
wsl –-set-default-version 2
wsl --install -d Ubuntu-20.04

 しばらく待つと、Ubuntu 20.04のインストールが完了し、以下のようなターミナルが起動します。

Ubuntu 20.04の初回起動画面

 エラーメッセージが表示されていないことを確認(※4)後、上記ターミナルは一旦終了 (※5) し、「Ubunutu 20.04 LTS」を起動すると、”root”でログイン済みのUbuntu 20.04ターミナルが表示されます。

※4 NoLsp.exeの実行を忘れると、エラーが表示され、この先進めなくなる場合があります。
※5 本来はユーザーの作成が必要ですが、今回は説明を簡略化するために省きます。

4.4.QEMUビルドのための準備

 Ubuntu 20.04のターミナル上で以下を入力し、QEMUをビルドするための準備を行います。

sudo apt update
sudo apt upgrade
sudo apt install pkg-config libglib2.0-dev libgcrypt20-dev zlib1g-dev \
        autoconf automake libtool bison flex libpixman-1-dev \
        libnfs-dev libiscsi-dev libaio-dev libbluetooth-dev \
        libbrlapi-dev libbz2-dev libcap-dev libcap-ng-dev \
        libcurl4-gnutls-dev libgtk-3-dev make ninja-build -y

4.5.QEMUのビルド

 続いて以下を入力し、QEMU 6.2.0のソースコードの取得とビルド、インストールを行います。

wget https://download.qemu.org/qemu-6.2.0.tar.xz
tar Jxf qemu-6.2.0.tar.xz
cd qemu-6.2.0
mkdir build && cd build
../configure --target-list=riscv64-softmmu --disable-docs
make -j $(nproc)
sudo make install

4.6.Fedoraイメージのダウンロード

 次に、Fedoraのイメージを取得し、圧縮ファイルは展開しておきます。

wget https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/Fedora-Minimal-Rawhide-20200108.n.0-sda.raw.xz
wget https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/Fedora-Minimal-Rawhide-20200108.n.0-fw_payload-uboot-qemu-virt-smode.elf
xz -dv Fedora-Minimal-Rawhide-20200108.n.0-sda.raw.xz

4.7.QEMUの起動

先ほどダウンロードしたFedoraのイメージやコア数(4)、メモリ容量(2GB)等を指定して、QEMUを起動します。

qemu-system-riscv64   \
    -nographic \
    -machine virt \
    -smp 4 \
    -m 2G \
    --bios none \
    -kernel Fedora-Minimal-Rawhide-20200108.n.0-fw_payload-uboot-qemu-virt-smode.elf \
    -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=Fedora-Minimal-Rawhide-20200108.n.0-sda.raw,format=raw,id=hd0 \
   -device virtio-net-device,netdev=usernet \
  -netdev user,id=usernet,hostfwd=tcp::10000-:22

4.8.Fedoraの起動

 しばらく待つと、以下のようにFedoraのログイン入力待ちとなりました。

Fedoraの起動

 ここで、ログイン名”root”、パスワード”fedora_rocks!”を入力し、ログインします。

 以下のようにRISC-V版Fedoraが動作していることを確認できました。

Fedoraの起動結果

5.まとめ

 いかがでしたでしょうか。QEMUを用いることで、実機を用意せずともRISC-V版Linuxの動作を簡単に確認できることがお伝えできたのではないかと思います。今回合わせてご紹介したWSL2を用いることで、より一層手軽に環境を構築することがお分かりいただけたなら幸いです。
 次回も引き続きQEMUについての情報をお伝えします。

 本ブログについてのより詳しい内容へのご質問等ございましたら、ぜひお気軽にお問合せください。
 お問い合わせはこちら
   info-lsi@dts-insight.co.jp

 

著作権および商標
Linux は、Linus Torvalds の米国およびその他の国における登録商標です。
Red Hat、Fedora は、Red Hat, Inc. の米国およびその他の国における商標です。
Ubuntuは、Canonical Ltd.の商標または登録商標です。
その他本ブログに記載する製品名は、一般に各開発メーカーの商標または登録商標です。
なお、本文中には™ および ® マークは表記していません。

■■DTSインサイトの「システムLSI設計ソリューションサービス」■■
 DTSインサイトでは、システムLSI/FPGA設計の受託も行っています。
 当社のノウハウを活かした、ソフトウェアの移行(マイグレーション)
 サービスも提供しておりますので、お気軽にご相談ください。

システムLSI設計ソリューションサービス紹介は こちら