(画像はriscv.org, freebsd.orgより拝借)
FreeBSD on RISC-Vの開発が進んでいるという話を以前紹介した。
これ、ちゃんとシミュレータや実機で動作させることができるらしい。そうと分かれば、自分でビルドして使ってみたい。
FreeBSD on RISC-Vをビルドするための環境構築
FreeBSD on RISC-Vをビルドするための環境を、Vagrantを使って仮想環境として構築しよう。最初はUbuntuを使って構築しようとしたのだが、どうやらビルド環境がFreeBSDを想定しているらしい。 ビルドにも通常のMakeではなくBSDMakeが必要だった。このあたり、違いがよく分からなかったのだが、文法とか全然違うな。
FreeBSD上で構築した方が楽そうなので、VagrantでFreeBSD 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"
これでFreeBSDを立ち上げてログインし、FreeBSD on RISC-Vのクロスコンパイルを実行することにした。
FreeBSD on RISC-Vのビルド
FreeBSDのビルドは、基本的には下記のインストールマニュアルに従うのみである。
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