トップ 一覧 Farm 検索 ヘルプ 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でログインできた.

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