FPGA開発日記

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

RISC-VツールセットをインストールしたDockerコンテナ作成(2. RISC-Vコンテナの作成)

f:id:msyksphinz:20180418005224p:plain

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。

満足したところで公開したいので、一応リグレッションテストをいつでも実行できるような状態にしておきたい。

とりあえず自分で色々改造できるDockerのコンテナを持っておきたい。 このため、自分のRISC-VツールをインストールしたDockerコンテナを構築した。

これを使って、常にそのコンテナを呼び出すことによってRISC-Vのツールを呼び出すことができ、それに外部ボリュームとして自作エミュレータを接続することでRISC-Vのツールセットを使ったテストができるような環境を構築しておく。

f:id:msyksphinz:20180424020355p:plain

やっていることは非常に単純なはずなのだが、なにぶんDockerはあまり慣れていないので常にトラブルが頻発する。

っていうか自宅のネットが遅すぎてDockerのためにUbuntuをダウンロードしたり、パッケージをダウンロードするのが非常に遅い... 一度Dockefileを間違えて修正すると一からコンテナを作り始めたのには閉口した。もう一回あのRISC-Vの大量のパッケージ群をダウンロードしなおしかよ...

とりあえず以下のようなDockerfileと、リグレッション用のスクリプトを用意している。

  • Dockerfile
# Pull base image (use Wily for now).
FROM ubuntu:17.10

# Set the maintainer
MAINTAINER msyksphinz

# Install some base tools that we will need to get the risc-v
# toolchain working.
RUN apt update && apt install -y \
  autoconf \
  automake \
  autotools-dev \
  bc \
...
# Make a working folder and set the necessary environment variables.
ENV RISCV /riscv
ENV NUMJOBS 4
RUN mkdir -p $RISCV

# Add the GNU utils bin folder to the path.
ENV PATH $RISCV/bin:$PATH

# Obtain the RISCV-tools repo which consists of a number of submodules
# so make sure we get those too.
WORKDIR /opt/riscv
RUN git clone https://github.com/riscv/riscv-tools.git && \
  cd riscv-tools && git submodule update --init --recursive

RUN apt update && apt install -y pkg-config libbfd-dev device-tree-compiler zlib1g-dev libz-dev 

# Now build the toolchain for RISCV. Set -j 1 to avoid issues on VMs.
WORKDIR /opt/riscv/riscv-tools
ENV MAKEFLAGS="-j4"
RUN ./build.sh

ちなみにずーっと以下のエラーで悩まされ続けていたのだが、libexpat-devパッケージをダウンロードすることで解消可能らしい。 riscv-tools の情報は古いな...

RUN apt update && apt install -y pkg-config libbfd-dev device-tree-compiler zlib1g-dev libz-dev libexpat-dev

そして、ボリュームのマウントおよびコンテナの起動を行うためのスクリプトを用意した。

  • run_docker_test.sh
#!/bin/sh

sudo docker run -v ${PWD}/riscv_iss:/root/riscv_iss\
     -v ${PWD}/scripts:/root/scripts \
     -it msyksphinz/riscv-docker \
     /root/scripts/test_run.sh

そしてtest_run.shは実際にテストを行うスクリプトだ。

  • test_run.sh
#!/bin/sh

export RISCV=/opt/riscv/

cd /root/riscv_iss/build_riscv_iss/isa_test/
make ISA_DIR=/root/