FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

FreeBSD on RISC-Vのビルド試行(1)

http://riscv.wpengine.com/wp-content/uploads/2015/01/riscv-logo.png https://www.freebsd.org/logo/logo-full-thumb.png

(画像はriscv.org, freebsd.orgより拝借)

FreeBSD on RISC-Vの開発が進んでいるという話を以前紹介した。

msyksphinz.hatenablog.com

これ、ちゃんとシミュレータや実機で動作させることができるらしい。そうと分かれば、自分でビルドして使ってみたい。

riscv - FreeBSD Wiki

FreeBSD on RISC-Vをビルドするための環境構築

FreeBSD on RISC-Vをビルドするための環境を、Vagrantを使って仮想環境として構築しよう。最初はUbuntuを使って構築しようとしたのだが、どうやらビルド環境がFreeBSDを想定しているらしい。 ビルドにも通常のMakeではなくBSDMakeが必要だった。このあたり、違いがよく分からなかったのだが、文法とか全然違うな。

FreeBSD上で構築した方が楽そうなので、VagrantFreeBSD 10.3の環境を構築した。

FreeBSD 10.3の環境をVagrantで構築する

Boxの存在を調べてみると、どうやらFreeBSDのオフィシャルパッケージとしてリリースされているようだった。それなら話が速い。

Vagrant box freebsd/FreeBSD-10.3-RELEASE | Atlas by HashiCorp

VagrantのBox名としては以下のようになる。

  config.vm.box = "freebsd/FreeBSD-10.3-RELEASE"

github.com

これでFreeBSDを立ち上げてログインし、FreeBSD on RISC-Vのクロスコンパイルを実行することにした。

FreeBSD on RISC-Vのビルド

FreeBSDのビルドは、基本的には下記のインストールマニュアルに従うのみである。

riscv - FreeBSD Wiki

setenv PREFIX $HOME/riscv

sudo pkg install bison gmp mpfr mpc git subversion gawk gsed gmake emacs24-24.5_3,3

git clone https://github.com/freebsd-riscv/riscv-gnu-toolchain riscv-gnu-toolchain
cd riscv-gnu-toolchain
git submodule update --init --recursive
./configure --prefix=$PREFIX

gmake freebsd

svn co http://svn.freebsd.org/base/head freebsd-riscv
cd freebsd-riscv

setenv CROSS_BINUTILS_PREFIX $PREFIX/bin/riscv64-unknown-freebsd11.0-
setenv STRIPBIN ${CROSS_BINUTILS_PREFIX}strip
setenv XCC ${CROSS_BINUTILS_PREFIX}gcc
setenv XCXX ${CROSS_BINUTILS_PREFIX}c++
setenv XCPP ${CROSS_BINUTILS_PREFIX}cpp

setenv X_COMPILER_TYPE gcc
setenv WITHOUT_FORMAT_EXTENSIONS yes
setenv WITHOUT_NTP yes

make TARGET_ARCH=riscv64 buildworld
make TARGET_ARCH=riscv64 KERNCONF=SPIKE buildkernel  # for Spike
# make TARGET_ARCH=riscv64 KERNCONF=QEMU buildkernel   # for QEMU

最後の一行は、Spikeシミュレータを使うかQEMUを使うかで選択する。それ以外は問題なく実行でき、ビルドには手持ちのマシン(Core-i7 3.6GHz, 16GB Main Memory)で約1時間程度かかった。

rootfsのビルドもマニュアルに示す通り実行できた。早速動作を確認したいのだが、Spikeのインストールで現在エラーが出て手詰まり状態だ。これは確認しよう。

% ../configure --prefix=$PREFIX --host=riscv64-unknown-freebsd11.0 --with-payload=path_to_freebsd_kernel
checking build system type... x86_64-unknown-freebsd10.3
checking host system type... riscv64-unknown-freebsd11.0
checking for riscv64-unknown-freebsd11.0-gcc... riscv64-unknown-freebsd11.0-gcc
checking whether the C compiler works... no
configure: error: in `/home/vagrant/riscv-pk/build':
configure: error: C compiler cannot create executables
See `config.log' for more details