FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages/

HiFive Unleashed向けのオープンソースRISC-V SDK Freedom-U-SDKの環境構築

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。

というのは、どうにかしてまともにシミュレータで動かせるLinuxを用意して、自作RISC-VシミュレータでLinuxを立ち上げたい。

せっかくvmlinuxの最初のブートができるようになったので、もう少し先に進めたいのだがこのためにはFreedom-U-SDKを使うしかないということが分かってきた。 (Fedora-25のQEMU環境がもう少し解析出来たらいいのだけれど...)

github.com

f:id:msyksphinz:20180806001637p:plain

ダウンロードだけで非常に時間がかかる。

$ 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での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: