RISC-VをQEMUでエミュレートしてfedoraを動かす

# はじめに

*2020/04/27現在の情報

qemuを使えばRISC-Vの仮想環境が作れるようなので試してみた。
RISC-Vのエコシステムは情報が少ない上に、現在絶賛開発中だからか少し遅れた情報をもとに環境を作ろうとしてもうまく行かないことが多く、サイトによって書いてあることもバラバラなのでなるべく新しく信頼できる情報を届けて役に立てればと思う。(私の情報も信頼はできないかもしれないが...)

# 目標
今回は64bitのRISC-Vをqemuでエミュレートしてfedoraを動かす。

# 自分の環境
Ubuntu 20.04 LTS

# QEMUのインストール

まずはエミュレータのqemuを入れる。最新版のでいいんじゃないかな。

```
git clone https://github.com/qemu/qemu
cd qemu
git submodule init
git submodule update --recursive
./configure --target-list=riscv64-softmmu
make -j $(nproc)
sudo make install
```
#fedoraイメージのインストール

https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/
こちらのサイトから「Fedora-Developer-Rawhide-\*.raw.xz」と「Fedora-Developer-Rawhide-\*-fw_payload-uboot-qemu-virt-smode.elf」をダウンロードしましょう。米印には日付が入っています。
現在の最新版は

```
Fedora-Minimal-Rawhide-20200108.n.0-sda.raw.xz
Fedora-Minimal-Rawhide-20200108.n.0-fw_payload-uboot-qemu-virt-smode.elf  
```
ですのでこれらをダウンロードして、適当なワーキングディレクトリに放り込んでxzファイルは解凍しておきましょう。

# QEMUでfedoraをブート
いよいよQEMUでfedoraをブートします。下のコマンドの意味はわからないのもあるけどとりあえずコピペで実行。さっきのfedoraイメージを放り込んだフォルダで行ってください。

```
qemu-system-riscv64   \
    -nographic \
    -machine virt \
    -smp 8 \
    -m 2G \
    --bios none\
    -kernel Fedora-Developer-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-Developer-Rawhide-20200108.n.0-sda.raw,format=raw,id=hd0 \
    -device virtio-net-device,netdev=usernet \
    -netdev user,id=usernet,hostfwd=tcp::10000-:22
```
そして下の画面が出てきたらだいたい大丈夫。でこの画面のあとに色々続いていって
![スクリーンショット 2020-04-27 01-31-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575388/44e491fe-7db9-9f10-3b71-799fdd8ad21f.png)

数分たつとログインを要求される。ここまでいって一安心。
![スクリーンショット 2020-04-27 01-35-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575388/ac371f10-de14-24b2-8da1-a84691de57dd.png)


##rootでログインする場合：
ユーザ名は「root」、パスワードは「fedora_rocks!」
ssh接続で他ターミナルからの接続は以下のコマンドでできる。

```
ssh -p 10000 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no root@localhost
```

## riscvでログインする場合：
ユーザ名は「riscv」、パスワードは「fedora_rocks!」
ssh接続で他ターミナルからの接続は以下のコマンドでできる。

```
ssh -p 10000 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no riscv@localhost
```
# 遊ぶ
適当になんかインストールしてみましょう。機関車が走る「sl」コマンドをインストールして実行しましょう。rootでログインしておいて下さい。

```
$ dnf install sl 
```
でインストールされたら実行してみましょう。

![スクリーンショット 2020-04-27 01-39-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575388/fd7bb66e-64b8-082c-d18d-aa06ad662bc2.png)
機関車が走ってれば成功！！おめでとうございます。


# おわりに
情報集めとか、もろもろとても大変で苦労した。まったくうまく行かず試行錯誤の結果うまくできた。しかし、これらのことをやるまえに色々ビルドしたり試行錯誤したことのおかげで出来たのかもしれないので、もしかすると今回書いた内容だけで出来ない可能性もある。

もし出来なければコメントかこちらのtwitterで教えていただければ幸いです。
https://twitter.com/a163236


# 参考
これでうまくいかなかったら下のサイトを見て色々やった方がいいかも…
https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html
https://fedoraproject.org/wiki/Architectures/RISC-V/Installing
https://msyksphinz.hatenablog.com/entry/2018/05/07/040000