!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 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でログインできた. !たてなおし バタバタとしてたのが一段落 & 来週もバタバタするのが分かっているので, 書き散らかしになってたスクリプトやら,やるべきタスクやらを整理して, たてなおし.