HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。
というのは、どうにかしてまともにシミュレータで動かせるLinuxを用意して、自作RISC-VシミュレータでLinuxを立ち上げたい。
せっかくvmlinuxの最初のブートができるようになったので、もう少し先に進めたいのだがこのためにはFreedom-U-SDKを使うしかないということが分かってきた。
(Fedora-25のQEMU環境がもう少し解析出来たらいいのだけれど...)
github.com
ダウンロードだけで非常に時間がかかる。
$ clone https://github.com/sifive/freedom-u-sdk.git
$ cd freedom-u-sdk
$ git submodule update --init --recursive
の後で、いろいろと試行錯誤して気が付いたのだが、Ubuntuの環境では以下のパッチを充てることが推奨されている。
github.com
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でシミュレーションを行った。正常に起動したようだ。
$ 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))
[ 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の起動を行った。正常に起動したようだ。
$ 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: