Raspberry Pi 4でhw_serverを動かす

公開:2020/11/06
更新:2020/11/08
4 min読了の目安(約3900字TECH技術記事

Raspberry Pi 4でhw_serverを動かす

Vivadoのhw_serverをRaspberry Pi 4で動かしてみたので、手順を記録しておく。

必要なもの

  • x86_64なLinux環境

    • WSLでもよい
  • Raspberry Pi 3または4

    • aarch64でしか確認していない
    • ARM32でも動くとは思うが性能的に行けるかは不明

Raspberry PiにはUbuntu 20.04を入れていることを前提とするが、RaspbianやUbuntu 18.04でも行けると思われる。 (未確認)
ただし、aptで入るQEMUに問題があるので、QEMUのビルドが必要。

動かしたいhw_serverの準備

Raspberry Pi単体でインストールまでできればよかったが、Xilinxのインストーラー(xsetup)がJava+ネイティブライブラリで構成されていて、QEMUのUser Emulationだといつまでたっても終わらなかった。

仕方がないのでx86_64なUbuntu上にまずはインストールする。(というかコンテナのビルドまでやった方が速いかも)

Xilinxのダウンロードページから、使いたいhwserverを含むインストーラをダウンロードしておく。
以下の説明では執筆時点での最新版 (2020.1) の Unified Installer (Xilinx_Unified_2020.1_0602_1208_Lin64.bin) を使うこととする。

./Xilinx_Unified_2020.1_0602_1208_Lin64.bin --noexec --keep --target Xilinx_Unified_2020.1
cd Xilinx_Unified_2020.1
./xsetup -b AuthTokenGen # 認証トークンの生成。XilinxアカウントのUser IDとパスワードを聞かれたら入力する。
./xsetup -a 3rdPartyEULA,WebTalkTerms,XilinxEULA -b Install -p "Hardware Server" -e "Hardware Server (Standalone)" -l $HOME/hwserver

これで $HOME/hwserver に hw_serverがインストールされるので、Raspberry Piにコピーしておく。

docker周りの準備

dockerのインストール

Raspberry Piにdockerを入れていないのであれば

sudo apt install -y docker.io

dockerイメージの作成

以下のDockerfileを HWSRVR があるディレクトリにおいて、 docker build を実行する。

FROM amd64/ubuntu:18.04
ARG HWSERVER_VERSION=2020.1
ENV HWSERVER_VERSION_ENV=${HWSERVER_VERSION}
RUN mkdir -p /tools/Xilinx
COPY HWSRVR /tools/Xilinx/HWSRVR
EXPOSE 3121
ENTRYPOINT /tools/Xilinx/HWSRVR/$HWSERVER_VERSION_ENV/bin/hw_server
docker build -t hwserver .

コンテナの作成と実行

以下のコマンドでhwserverが実行できるので、あとは外部のVivadoやxsdbから接続を確認する。

docker run -d --rm -v /dev:/dev --privileged -p 3121:3121  hwserver

Raspberry Pi 4のIPが 192.168.2.54 の場合、Vivadoが入っているマシンでxsdbを実行した結果を示す。

kenta@Prometheus:~/Xilinx_Unified_2020.1$ xsdb
rlwrap: warning: your $TERM is 'screen-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems.
                                                                                                                                                                                                                                                   ****** Xilinx System Debugger (XSDB) v2020.1
  **** Build date : May 27 2020-20:33:44
    ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.


xsdb% connect -url TCP:192.168.2.54:3121
tcfchan#0
xsdb% targets
  1  xc7a100t
     2  MicroBlaze Debug Module at USER2
        3  MicroBlaze #0 (Running)
xsdb% exit
exit

コンテナの停止

docker ps でコンテナの名前を調べて docker kill でコンテナを停止する。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
1118e17bcc93        hwserver            "/bin/sh -c /tools/X…"   7 minutes ago       Up 7 minutes        0.0.0.0:3121->3121/tcp   keen_jennings
$ docker kill keen_jennings 
keen_jennings

Ubuntu 18.04以下の場合

Raspberry Piで使うUbuntuがUbuntu 18.04以下の場合、

  • dockerが古いからか、自分でQEMUをコンテナに入れる必要がある
  • aptで入るQEMUに問題がある

ので、QEMUのビルドとdockerコンテナへのQEMUの追加が必要。

QEMUのビルド

sudo apt install build-essential ninja-build libglib2.0-dev pkg-config
git clone --recursive https://github.com/qemu/qemu
mkdir -p qemu/build
cd qemu/build
../configure --static --disable-system --enable-linux-user --target-list=x86_64-linux-user
ninja

dockerイメージの作成

  • qemu-x86_64-static を入れたコンテナを作る

  • エラーがでて起動できないはず

docker run -it --network host amd64/ubuntu:18.04
  • コンテナはできてるので、名前かIDを調べる。
$ docker ps -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS                     PORTS               NAMES
9af0a467972d        amd64/ubuntu:18.04   "/bin/bash"         22 minutes ago      Exited (0) 4 seconds ago                       reverent_kare
  • コンテナにQEMUをコピーする
    • qemu-x86_64 を、コンテナ内の /usr/bin/qemu-x86_64-static にコピー
cd qemu/build
docker cp qemu-x86_64 reverent_kare:/usr/bin/qemu-x86_64-static