ツールチェインを用意する」ではRISC-Vシミュレーターであるspikeを使ってRISC-Vバイナリを実行しました。今回はRISC-V対応QEMUを使って,RISC-Vの仮想マシン上でDebianを起動してみましょう。ツールチェインとDebianのRISC-V対応状況RISC-V対応のLinuxシステムを作るためには,単にコンパイラがRISC-Vに対応しているだけではなく,そのコンパイラを用いてカーネルやユーザーランドの各種ツールのRISC-Vバイナリを作る必要があります。実機がない場合は,QEMUのような仮想マシンエミュレーターも必要です。spikeを使ってカーネルを実行することは可能ではありますが,今回は他のアーキテクチャーと同様にQEMUを使います。2020年1月時点で,Linuxシステムを構築するために最低限必要なツールのほとんどがRISC-Vに対応しています。少なくとも次のバージョンであればRISC-VベースのLinuxシステムを構築することが可能です。binutils:2.28以上GCC:7.0以上glibc:2.27以上Linux:4.19以上QEMU:2.12以上dpkg:1.19.0.5以上U-Boot:2018.11以上そしてこれらはすべて,最新のDebianにも取り込まれています。よってDebianのルートファイルシステムであれば,比較的簡単に構築できるのです。登場したばかりのアーキテクチャーであるため,新しければ新しいほど安定して動く可能性が高くなります。Linuxシステムとして使うためには当然のことながら上記以外にも必要なソフトウェアがたくさんあります。これらも必要に応じて順次RISC-V対応が行われていくことでしょう。Debianでは公式でサポートしているCPUアーキテクチャー(やカーネル)以外にもPorts(移植版)と呼ばれる公式ではないサポートアーキテクチャーが存在します。Ports用のリポジトリで公開されるのです。このため,Portsにあげられているアーキテクチャーであればapt経由でパッケージをインストールできます。RISC-V向けのアーキテクチャーとしては「riscv64」がPortsに登録されています。これはRISC-Vで言うところの「RV64GCU」であり「RV64IMAFDCU」の省略形です。浮動小数点それぞれの命令と,16ビット幅の命令をサポートしていることがわかります。Architecture」に記載があるように,ユーザーモードをサポートしていることを意味します。残念ながらUbuntuはRISC-Vをサポートしていません。今後サポートすることになるとしても,ricsv64がDebianの公式サポートアーキテクチャーになることが前提となるでしょう。riscv64ではまだビルドできないソフトウェアもそれなりにあることから,何か大きな力が働かない限りは,当面はUbuntuでサポートすることはなさそうです。Ubuntu上でRISC-Vのバイナリをビルドしたり,QEMUでRISC-V版のDebianを動かすことは可能です。そこで今回はUbuntu上で,Debianイメージの作成と起動までを説明します。19.10以降が必要です。これはQEMU上でRISC-Vを動かすためのファームウェアとして「OpenSBI」を使用しており(※1⁠)⁠,このOpenSBIのパッケージが19.10からしか提供されていないためです。QEMU自身も18.04のバージョンだと少し古いのでRISC-Vのバイナリをうまく動かせません。OpenSBIやQEMUの最新版を手動でインストールしても良いのですが,それよりはより新しいUbuntuを用意したほうが楽でしょう。Interface(SBI⁠)⁠」と呼ぶようです。LTSの開発版を使うことにします。今回紹介する手順は19.10でも動くことを確認済みです。20.04を実機にインストールしても良いのですが,いかんせん開発版であることから,仮想マシン上にインストールしたほうが安心です(※2⁠)⁠。そこで第590回の「Windows/macOS/Linuxで使える仮想マシン管理ツール『multipass⁠』⁠」を使用しましょう。multipassならUbuntuだけでなくWindowsやmacOSでも使えますし,すぐに20.04の実行環境を用意できます。※2仮想環境と言えば本連載で何回か紹介しているLXDもありますが,今回の用途には不向きです。ルートファイルシステムを作成する際に,qemu-user-staticでバイナリ単位のエミュレーションを行います。これはbinfmtによってどのアーキテクチャーのバイナリかを判断しています。binfmtはLinuxの名前空間に対応していないためルートファイルシステムをうまく作れません。ちなみに同様の理由でLXDでは,ホストと異なるアーキテクチャーのコンテナの起動を非サポートにしたようです。amd64アーキテクチャーでarmhfコンテナを動かしたいなら,LXDではなくLXCを使う必要があるでしょう。QEMU用のイメージファイルを作成する際にループデバイスを使うのですが,これも非特権コンテナだといろいろ設定が必要になります。素直に仮想マシンを使うことをおすすめします。multipassをインストールします。--classicちなみに第590回で紹介したあと,2019年12月に初の正式版である1.0.0がリリースされました。標準で作成されるユーザーが「multipass」から「ubuntu」になるなど,細かいところに変更はありますが,原則として第590回で紹介した使用方法がそのまま使えるはずです。次に20.04のインスタンスを「riscv」の名前で作成します。daily:20.04ルートファイルシステムを作る都合上,ストレージのサイズは40GBと多めにとっています。仮想マシン上でRISC-VのQEMUイメージを起動することから,メモリーも4GBに設定しておきました。時間が必要ですが,無事にインスタンスが起動したらログインしておきましょう。riscvここから先の手順はすべて,riscvインスタンス内で実行したものとします。