HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。
というのは、どうにかしてまともにシミュレータで動かせるLinuxを用意して、自作RISC-VシミュレータでLinuxを立ち上げたい。
せっかくvmlinuxの最初のブートができるようになったので、もう少し先に進めたいのだがこのためにはFreedom-U-SDKを使うしかないということが分かってきた。 (Fedora-25のQEMU環境がもう少し解析出来たらいいのだけれど...)
ダウンロードだけで非常に時間がかかる。
$ clone https://github.com/sifive/freedom-u-sdk.git $ cd freedom-u-sdk $ git submodule update --init --recursive
の後で、いろいろと試行錯誤して気が付いたのだが、Ubuntuの環境では以下のパッチを充てることが推奨されている。
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/host/usr/bin/automake line 3936. autoreconf: /home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/host/usr/bin/automake failed with exit status: 255 package/pkg-generic.mk:185: recipe for target '/home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/build/libtirpc-1.0.1/.stamp_configured' failed make[1]: *** [/home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/build/libtirpc-1.0.1/.stamp_configured] Error 1 make[1]: Leaving directory '/home/mclark/src/sifive/freedom-u-sdk/buildroot' Makefile:90: recipe for target '/home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/images/rootfs.tar' failed make: *** [/home/mclark/src/sifive/freedom-u-sdk/work/buildroot_initramfs/images/rootfs.tar] Error 2
同じエラーにぶち当たった。
そこで、上記のGitHub Issuesで議論されているように、buildrootリポジトリのリビジョンを変更し、再度ビルドにトライした。
$ cd ./buildroot
$ git checkout sifive
再度makeを実行すると、とりあえず最後までビルドが完了したようだ。
$ make -j4 ... make[1]: Leaving directory '/home/msyksphinz/work/freedom-u-sdk/work/riscv-pk' riscv64-unknown-linux-gnu-objcopy -S -O binary --change-addresses -0x80000000 /home/msyksphinz/work/freedom-u-sdk/work/riscv-pk/bbl /home/msyksphinz/work/freedom-u-sdk/work/bbl.bin xxd -c1 -p /home/msyksphinz/work/freedom-u-sdk/work/bbl.bin > /home/msyksphinz/work/freedom-u-sdk/work/bbl.hex This image has been generated for an ISA of rv64imafdc and an ABI of lp64d Find the image in work/bbl.bin, which should be written to a boot partition To completely erase, reformat, and program a disk sdX, run: sudo make DISK=/dev/sdX format-boot-loader ... you will need gdisk and e2fsprogs installed
SpikeでLinuxをブートするためには
以下のコミュニティのやり取りを参考にすると、conf/linux_defconfig
に細工をしなければならない。
# CONFIG_HVC_RISCV_SBI is not set CONFIG_HVC_RISCV_SBI=y
これで再度Makeを行った。
QEMUでのLinux起動
次に、QEMUでシミュレーションを行った。正常に起動したようだ。
$ make qemu ... /home/msyksphinz/work/freedom-u-sdk/work/riscv-qemu/prefix/bin/qemu-system-riscv64 -nographic -machine virt -kernel /home/msyksphinz/work/freedom-u-sdk/work/riscv-pk/bbl \ -drive file=/home/msyksphinz/work/freedom-u-sdk/work/rootfs.bin,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \ -netdev user,id=net0 -device virtio-net-device,netdev=net0 bbl loader SIFIVE, INC. 5555555555555555555555555 5555 5555 5555 5555 5555 5555 5555 5555555555555555555555 5555 555555555555555555555555 5555 5555 5555 5555 5555 5555 5555555555555555555555555555 55555 55555 555555555 55555 55555 55555 55555 55555 5 55555 55555 55555 55555 55555 55555 55555 55555 55555 55555 55555 555555555 55555 5 SiFive RISC-V Coreplex [ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000 [ 0.000000] Linux version 4.15.0-00044-g2b0aa1de45f6 (msyksphinz@msyksphinz-VirtualBox) (gcc version 7.2.0 (GCC)) #2 SMP Mon Aug 6 00:21:37 JST 2018 [ 0.000000] bootconsole [early0] enabled [ 0.000000] Initial ramdisk at: 0x (ptrval) (9457664 bytes) [ 0.000000] Zone ranges: ... Sending select for 10.0.2.15... Lease of 10.0.2.15 obtained, lease time 86400 deleting routers adding dns 10.0.2.3 Starting dropbear sshd: OK Welcome to Buildroot buildroot login:
Spike でのLinux起動
次に、SpikeでLinuxの起動を行った。正常に起動したようだ。
$ make sim /home/msyksphinz/work/freedom-u-sdk/work/riscv-isa-sim/prefix/bin/spike --isa=rv64imafdc -p4 /home/msyksphinz/work/freedom-u-sdk/work/riscv-pk/bbl bbl loader SIFIVE, INC. 5555555555555555555555555 5555 5555 5555 5555 5555 5555 5555 5555555555555555555555 5555 555555555555555555555555 ... Starting logging: OK Starting mdev... sort: /sys/devices/platform/Fixed: No such file or directory modprobe: can't change directory to '/lib/modules': No such file or directory Initializing random number generator... done. Starting network... Waiting for interface eth0 to appear............... timeout! run-parts: /etc/network/if-pre-up.d/wait_iface: exit status 1 Starting dropbear sshd: OK Welcome to Buildroot buildroot login: