トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2019-7-24

RISC-V関連のツールを整理

わからない状態であれこれやってた環境を一度整理.
https://github.com/riscv を 参照しつつ.

コンパイラツールチェイン

https://github.com/riscv/riscv-gnu-toolchain を 参照して,手順通り,

$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
$ ./cnfigure --prefix=$HOME/tools/riscv
$ make
$ make linux

おわったらパス通しとくといい.

$ export RISCV=$HOME/tools/riscv
$ export PATH=$RISCV/bin:$PATH

シミュレーション環境(Qemu)

https://github.com/riscv/riscv-qemu によると,
upstreamにマージされたよう.
https://wiki.qemu.org/Documentation/Platforms/RISCV を参照して,

$ wget https://download.qemu.org/qemu-3.1.0.tar.xz
$ tar xvf qemu-3.1.0.tar.xz
$ cd qemu-3.1.0
$ ./configure --target-list=riscv64-softmmu
$ make -j8
$ make install

なお,configure時に,

WARNING: Use of SDL 1.2 is deprecated and will be removed in
WARNING: future releases. Please switch to using SDL 2.0

とかいわれたので,

sudo apt install libsdl2-dev

とした.

Linux動かす(Fedoraのイメージもってきて動かす)

https://wiki.qemu.org/Documentation/Platforms/RISCV を 参照しつつ,
[RISC-V版QEMUでLinuxを立ち上げる試行http://msyksphinz.hatenablog.com/entry/2018/05/07/040000] に従って,

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

とリソースを用意して,実行.

$ 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/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

xzdecがなければ,

$ sudo apt install xzdec

としてインストールすればいい.
Fedoraが起動すると,root/riscvでログイン.gccとかも入っている.

[root@stage4 ~]# uname -a
Linux stage4.fedoraproject.org 4.19.0-rc8 #1 SMP Wed Oct 17 15:11:25 UTC 2018 riscv64 riscv64 riscv64 GNU/Linux
[root@stage4 ~]# gcc --version
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@stage4 ~]#

命令レベルシミュレータ(spike)動かす

https://github.com/riscv/riscv-tools を 参照しつつ,

$ git clone https://github.com/riscv/riscv-tools
$ git submodule update --init --recursive
$ export RISCV=$HOME/tools/riscv
$ ./build.sh

インストールできたら,

$ cat > hello.c
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("Hello RISC-V\n");
}
$ riscv64-unknown-elf-gcc -o hello hello.c
$ spike pk test

とか.

$ spike -d pk hello

として

:r

とかすると,実行命令列のダンプが表示される.
詳細は,https://github.com/riscv/riscv-isa-sim/tree/2710fe575e7e6a4e2418224f8d254d5ca31f6c0e を見る

自分でLinuxビルドする(BusyBear使う)

https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html がわかりやすいかな?

$ export WORKDIR=$(pwd)/riscv-linux
$ mkdir $WORKDIR; cd $WORKDIR
$ git clone https://github.com/torvalds/linux
$ git clone https://github.com/riscv/riscv-pk
$ git clone https://github.com/michaeljclark/busybear-linux

まずはLinux

$ cd $WORKDIR/linux
$ git checkout v4.19
$ cp ../busybear-linux/conf/linux.config .config
$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- olddefconfig

カーネルコンフィグレーションが正しいか,

$ cat .config | grep -e ARCH_RV64I -e CMODEL_MEDANY -e CONFIG_SIFIVE_PLIC

とかして,

CONFIG_ARCH_RV64I=y
CONFIG_CMODEL_MEDANY=y
CONFIG_SIFIVE_PLIC=y

となっているのを確認する.なんか違ったら,

$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- nconfig

で設定.最後にカーネルのビルド.

$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- vmlinux -j8

次にBBL作る.

$ cd $WORKDIR/riscv-pk
$ mkdir build && cd build
$ ../configure --enable-logo --host=riscv64-unknown-elf --with-payload=../../linux/vmlinux
$ make -j8

最後にBusybear作る

$ cd cd $WORKDIR/busybear-linux
$ make -j8

途中,BBL作ろうとするところでパスの問題でコケル.
うまくパスあわせてもいいんだろうけど,既に別に作っているので,
scripts/build.shの該当部分をコメントアウトしてしまうことにする.

#test -d build/riscv-pk || mkdir build/riscv-pk
#test -x build/riscv-pk/bbl || (
#    cd build/riscv-pk
#    ../../src/riscv-pk/configure \
#        --host=${CROSS_COMPILE%-} \
#        --with-payload=../linux-${LINUX_KERNEL_VERSION}/vmlinux
#    make -j$(nproc)
#)

最後,ディスクイメージ作る時に sudo で root 権限が要求される.
起動.

$ qemu-system-riscv64 \
    -nographic \
    -machine virt \
    -kernel riscv-pk/build/bbl \
    -append "root=/dev/vda ro console=ttyS0" \
    -drive file=busybear-linux/busybear.bin,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0

root/busybearでログインできた.

たてなおし

バタバタとしてたのが一段落 & 来週もバタバタするのが分かっているので,
書き散らかしになってたスクリプトやら,やるべきタスクやらを整理して,
たてなおし.