fedora
QEMU
RISCV
RISC-V

RISC-V Fedora を QEMU上で動かす


はじめに

RISC-Vのことを耳にする機会が増え、2017年のRISC-V day tokyoをきっかけに、触ろう触ろうと思いついに一年が経ってしまった。これではいかんと思い、ひとまず動かせる環境を構築したので、その時のメモ。

以下に環境構築手順を示しますが、それすら面倒という人はDocker imageを用意したので、これを使えば

$ docker run -d -p 1234:10000 tsunetsune/docker-riscv-qemu-fedora:0.1

をした後、

$ ssh -p 1234 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost

で、RISC-V上で動いているFedoraにアクセスできます。パスワードはデフォルトで riscv となっています。


環境構築

基本的にこのリンク先のやり方に従って行っています。


今回検証した環境


  • WSL Ubuntu 18.04 LTS


QEMUのビルド

$ export RISCV="${HOME}/risc-v"

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


Fedora Bootに必要なファイルのダウンロード

$ cd ${RISCV}

$ wget http://fedora-riscv.tranquillity.se/kojifiles/work/tasks/5629/155629/Fedora-Developer-Rawhide-20190112.n.0-sda.raw.xz # 20190112 は適当なものを選んでください
$ wget https://fedorapeople.org/groups/risc-v/disk-images/bbl
$ unxz Fedora-Developer-Rawhide-20190112.n.0-sda.raw.xz


FedoraのBoot

$ cd ${RISCV}

$ ./bin/qemu-system-riscv64 -nographic -machine virt -smp 4 -m 2G -kernel bbl -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0 -append "console=ttyS0 ro root=/dev/vda1" -device virtio-blk-device,drive=hd0 -drive file=Fedora-Developer-Rawhide-20190112.n.0-sda.raw,format=raw,id=hd0 -device virtio-net-device,netdev=usernet -netdev user,id=usernet,hostfwd=tcp::10000-:22

起動に成功すると以下のような画面が表示されます。

              vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

vvvvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv
rr vvvvvvvvvvvvvvvvvvvvvv
rr vvvvvvvvvvvvvvvvvvvvvvvv rr
rrrr vvvvvvvvvvvvvvvvvvvvvvvvvv rrrr
rrrrrr vvvvvvvvvvvvvvvvvvvvvv rrrrrr
rrrrrrrr vvvvvvvvvvvvvvvvvv rrrrrrrr
rrrrrrrrrr vvvvvvvvvvvvvv rrrrrrrrrr
rrrrrrrrrrrr vvvvvvvvvv rrrrrrrrrrrr
rrrrrrrrrrrrrr vvvvvv rrrrrrrrrrrrrr
rrrrrrrrrrrrrrrr vv rrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrr

INSTRUCTION SETS WANT TO BE FREE
OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
Linux version 4.19.0-rc8 (rjones@five.home.annexia.org) (gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)) #1 SMP Wed Oct 17 15:11:25 UTC 2018
bootconsole [early0] enabled
initrd not found or empty - disabling initrd
Zone ranges:
DMA32 [mem 0x0000000080200000-0x00000000ffffffff]
Normal [mem 0x0000000100000000-0x00000fffffffffff]
Movable zone start for each node
Early memory node ranges
node 0: [mem 0x0000000080200000-0x00000000ffffffff]
Initmem setup node 0 [mem 0x0000000080200000-0x00000000ffffffff]
software IO TLB: mapped [mem 0xfa3fb000-0xfe3fb000] (64MB)
elf_hwcap is 0x112d
percpu: Embedded 17 pages/cpu @(____ptrval____) s29976 r8192

...


おわりに

試した限り、WSL上でも特にトラブルなく動かすことができました。

QEMUのビルドから行うなどいろいろ面倒なので、時間が惜しい方は手っ取り早くDocker imageを使ってください。