開発環境
- Ubuntu 16.04 (Linux 4.10.0-28-generic #32~16.04.2-Ubuntu SMP) on VirtualBox
- Memori : 2GB
- Processor core : 2
インストール手順
1, 以下のコマンドから必要なパッケージをインストールする。
$ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev
2, インストールパスを設定
$ echo export RISCV=(riscv-toolsのインストールディレクトリパス) >> $HOME/.bash_profile
$ echo export PATH=$PATH:$RISCV/bin >> $HOME/.bash_profile
3, インストール
Gitよりソースコードをダウンロードしてインストールする。
$ git clone https://github.com/riscv/riscv-tools.git
$ cd ./riscv-tools
$ git submodule update --init --recursive
$ ./build.sh
<インストールされるツール群>
ツール名 | 説明 |
riscv-isa-sim | RISC-Vの簡易シミュレーター |
riscv-fesvr | ホスト側で動作する「Front-end server」。Host-Target InterFace (HTIF)を経由してターゲットプロセッサと通信する。 |
riscv-pk | 最低限のシステムコールを処理するProxy Kernel。ホスト上のシミュレーター上で動かすことを想定している。 |
riscv-opcodes | オペコードの定義。 |
riscv-tests | テストツール。 |
riscv-llvm | LLVMにRISC-Vのサポートを追加したコード。 |
riscv-gnu-toolchain | GCCやglibc,qemuなどのGNUツールチェインやエミュレーター。 |
riscv-openocd | JTAG-ICEにも対応したデバッガ。 |
4, ツールチェインの動作チェック
インストールが完了したら適当なプログラムをコンパイルしてテストしてみる。
・プログラムの作成
$ echo -e '#include <stdio.h>\n int main(void) { printf("Hello world!\\n"); return 0; }' > hello.c
・コンパイル
$ riscv64-unknown-elf-gcc -o hello hello.c
・実行
$ spike pk hello
プログラム実行時のエラーについて
コンパイルしたプログラムを実行した際に以下のようなエラーがでる場合がある。
terminate called after throwing an instance of 'std::runtime_error' what(): couldn't allocate 2147483648 bytes of target memory
どうやら、メモリのスワップ領域が足りず、メモリ領域を割り当てられないみたい。
スワップ領域のサイズを変更すれば解決できそう。開発環境が仮想マシンである場合はメインメモリの容量を上げれば解決する。ちなみに著者は仮装マシンのメインメモリの容量を1GBから2GBに変更し無事解決した。