- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!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でログインできた.
!たてなおし
バタバタとしてたのが一段落 & 来週もバタバタするのが分かっているので,
書き散らかしになってたスクリプトやら,やるべきタスクやらを整理して,
たてなおし.