FC2カウンター FPGAの部屋 Docker
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

udmabufをPetaLinux 2018.2でビルドする

udmabufをPetaLinuxで使用する(ホストパソコンでudmabufをmake したが致命的エラー)”の続き。

前回は、arm64 用にホストパソコン上で make でudmabuf をビルドしようとしたが、致命的エラーになってビルドできなかった。今回は、素直にPetaLinux 2018.2 を使用して、PetaLinux 上でビルドしてみよう。

今回の環境は”Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にPLのUIOを追加した”の続きとなって、環境は全て引き継いでいる。

なお、”ZYBO (Zynq) 初心者ガイド (17) Linuxで自作IPのデバイスドライバを作る”を参考にさせていただいた。これはとても参考になったというか、真似させていただいた。感謝。

さて、”ZYBO (Zynq) 初心者ガイド (17) Linuxで自作IPのデバイスドライバを作る”のやり方に従ってやっていこう。ただし、今回ビルドするのは、PL のIP のドライバでなく、Linux 上のCMA 領域を使用するためのドライバのudmabuf をビルドするので、”components/plnx_workspace/device-tree/device-tree-generation/pl.dtsi”ファイルにデバイスツリーの記述が無いことに注意しよう。

udmabuf をカーネルモジュールとして作成しよう。
petalinux-create -t modules --name udmabuf --enable
PetaLinux_87_190417.png

すると、cam_dp_183/project-spec/meta-user/recipes-modules ディレクトリの下に udmabuf ディレクトリが作成され、その下の files ディレクトリの下に udmabuf.c が生成された。
PetaLinux_88_190417.png

LANG=en_US.UTF-8 petalinux-build -c rootfs
PetaLinux_89_190417.png

自動生成された cam_dp_183/project-spec/meta-user/recipes-module/udmabuf/files/udmabuf.c を見てみよう。
PetaLinux_90_190417.png

これに、ikwzm さんの udmabuf.c の内容をコピペして入れ替える。
PetaLinux_91_190417.png

LANG=en_US.UTF-8 petalinux-build -c udmabuf
で udmabuf をビルドしたところ成功した。
PetaLinux_92_190417.png

~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/build/tmp/sysroots-components/ultra96_zynqmp/udmabuf/lib/modules/4.14.0-xilinx-v2018.2/extra/ ディレクトリの下に udmabuf.ko が生成されていた。
PetaLinux_93_190417.png

そのディレクトリに行って、udmabuf.ko をUltra96 のMicroSD カードの /home/root の下にコピペする。
cd ~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/build/tmp/sysroots-components/ultra96_zynqmp/udmabuf/lib/modules/4.14.0-xilinx-v2018.2/extra/
sudo cp udmabuf.ko /media/masaaki/ROOT_FS/home/root/

PetaLinux_94_190417.png

Ultra96 ボードの電源をON して、Ultra96 のPetaLinux 上で udmabuf.ko をinsmod したところ成功した。
/dev/udmabuf0/ が生成されている。
insmod udmabuf.ko udmabuf0=0x1000
ls -l /dev/udmabuf0

PetaLinux_95_190417.png

petalinux-build -x package したが cam_dp_183/image/linux/ ディレクトリのファイルに変化はなかった。これは、PL のIP としてのドライバではないからだと思う。
LANG=en_US.UTF-8 petalinux-build -x package
PetaLinux_96_190417.png

PetaLinux のリファレンスマニュアルで、”選択したユーザー モジ ュールをインストールする方法”を試してみよう。”このコマンドを実行すると 、 モジュールがターゲットの rootfs ホストコ ピーにインストールされます。”とのことだ。
LANG=en_US.UTF-8 petalinux-build -c udmabuf -x do_install
PetaLinux_97_190418.png

これも、petalinux-build -x package したが cam_dp_183/image/linux/ ディレクトリのファイルに変化はなかった。

最後に、PetaLinux のリファレンスマニュアルによると、モジュールをクリーンアップする方法は以下のコマンドを使用するようだ。
petalinux-build -c udmabuf -x do_cleansstate

私の環境では、
LANG=en_US.UTF-8 petalinux-build -c udmabuf -x do_cleansstate
  1. 2019年04月18日 04:47 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

nvidia-docker をインストールする

Docker でGPU を使うために nvidia-docker をインストールしよう。

私のマシンはUbuntu 18.04 なので、NVIDIA/nvidia-docker のQuickstart のUbuntu 14.04/16.04/18.04, Debian Jessie/Stretch のインストール方法をやってみた。

インストールする前にDocker Engine をインストールする必要があるが、私は”Ubuntu 18.04 に Docker CE をインストールする”ですでにインストールしてある。
Docker CE のバージョンは、18.09.3, build 77a1f4

最初に、パッケージをリポジトリに追加する。
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list

nvidia-docker_1_190319.png

リポジトリをアップデート。
sudo apt update
nvidia-docker_2_190319.png

nvidia-docker2 のインストールと docker デーモンのコンフィギュレーションの再ロード。
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

nvidia-docker_3_190319.png

CUDA イメージをRUN して、nvidia-smi を起動した。
cd Docker
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

nvidia-docker_4_190319.png

成功したようだ。ログを示す。

masaaki@masaaki-H110M4-M01:~/Docker$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
Unable to find image 'nvidia/cuda:9.0-base' locally
9.0-base: Pulling from nvidia/cuda
7b722c1070cd: Already exists 
5fbf74db61f1: Already exists 
ed41cb72e5c9: Already exists 
7ea47a67709e: Already exists 
52efd3da8bcd: Pull complete 
eea82f174227: Pull complete 
0d7845ca9ae6: Pull complete 
Digest: sha256:6c77adf17b3e0188550afa02f88adc326195d845971a017c2317d0cf88f8b50b
Status: Downloaded newer image for nvidia/cuda:9.0-base
Mon Mar 18 19:04:06 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 390.116                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 106...  Off  | 00000000:01:00.0  On |                  N/A |
| 33%   32C    P8    10W / 120W |    540MiB /  6075MiB |     18%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+


nvidia/cuda イメージができているはずなので、削除しておこう。
docker image ls
nvidia-docker_5_190319.png

nvidia/cuda のDocker イメージがあるので削除する。
docker image rm 411830f910a9
nvidia-docker_6_190319.png

削除できた。
nvidia-docker_7_190319.png
  1. 2019年03月19日 04:54 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

Docker 上でDistiller のJupyter Notebook を立ち上げたらエラーになった

Docker 上でDistiller を試しているが、そこで、Jupyter Notebook のポートを開けてJupyter Notebook を起動したらエラーになった。

まずは、boot.sh に TCP ポートの 9999 番を開ける設定を追加した。

docker run -ti --rm --name distiller -p 6006:6006 -p 8888:8888 -v /home/masaaki/Docker/distiller/workspace/:/workspace/ pytorch0.4cuda9 /bin/bash



./boot.sh を起動して、
jupyter notebook &
でJupyter Notebook を起動した。
jupyter_note_docker_1_190222.png

OSError: [Errno 99] Cannot assign requested address

だった。
エラーを検索したところ、”Docker上のjupyter notebookが起動できなくなったら”がヒットした。この通りにトラブルシュートをやってみよう。

jupyter notebook --generate-config
を実行したところ

Writing default config to: /root/.jupyter/jupyter_notebook_config.py

だそうだ。

このファイルを編集する。
vim /root/.jupyter/jupyter_notebook_config.py

## The IP address the notebook server will listen on.
#c.NotebookApp.ip = 'localhost'

の下に、

c.NotebookApp.ip = '0.0.0.0'

を追加した。
jupyter_note_docker_2_190222.png

jupyter notebook &
で起動したら、

Running as root is not recommended. Use --allow-root to bypass.

と言われたので、
jupyter notebook --allow-root &
で起動した。
jupyter_note_docker_3_190222.png

Chome で localhost:8888 を見ると、Jupyter Notebook のログイン画面が表示されたので、起動画面にあるtoken(token=6920b1c5d584cb42ef2664202937fcaedfef76afb5e42be5 の token=を除いた部分)を入力したところ、Jupyter Notebook が使えるようになった。
jupyter_note_docker_4_190222.png

  1. 2019年02月22日 05:35 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

Docker でPetaLinux 2018.2 をインストールする

Docker のUbuntu 16.04 イメージにVivado 2018.2 をインストールする2”のDocker イメージの vivado182ub16 にPetaLinux をインストールすることにした。

Xilinx 社のサポート -> ダウンロード -> エンベデッド開発の 2018.2 のWeb ページからPetaLinux 2018.2 インストーラー
PetaLinux 2018.2 インストーラー (TAR/GZIP - 6.15GB)をダウンロードした。ファイル名は、petalinux-v2018.2-final-installer.run だった。
./boot.sh を起動して、vivado182ub16c コンテナを起動した。
最初に、PetaLinux インストーラーのpetalinux-v2018.2-final-installer.run をvivado182ub16c コンテナにコピーした。
ホストの別の端末で、docker ps を実行して、コンテナのID を確認し、
docker cp petalinux-v2018.2-final-installer.run 6f49669c6591:/home/masaaki
を実行して、コンテナにコピーした。
docker_ce_39_190215.png

Docker のコンテナでは、PetaLinux インストーラーに実行パミッションを付加した。
chmod +x petalinux-v2018.2-final-installer.run
/home/masaaki の下にpkg/petalinux ディレクトリを作成した。
mkdir pkg
cd pkg
mkdir petalinux
cd

PetaLinux インストーラーを起動した。
./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
インストーラーが動かなかった。そういえば必要なパッケージを全くインストールしていない。
PetaLinux Tools Documentation Reference Guide UG1144 (v2018.2) June 6, 2018 の”Setting up your Environment”の”Installation Requirements”のTable 2-1: Packages and Linux Workstation Environments 9 ページから 11 ページの表を見て、足りないパッケージを apt でインストールした。(後で、@osamu_takeuchi さんに教えていただいたのだが、”電気回路/zynq/Petalinux のビルドのインストール”のapt-get をコピペすれば良さそうだ。武内先生ありがとうございました。)

それで、もう一度PetaLinux インストーラーを起動した。
./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
docker_ce_31_190214.png
docker_ce_32_190214.png

今度は libtool が無いと言われているのだが、libtool は apt でインストールしてある。
検索していたら、”PetaLinux doesn't see libtool, so it won't run”がヒット。それには、libtool-bin をインストールしろと書いてある。
sudo apt install libtool-bin

早速インストールして、ついでに”電気回路/zynq/Petalinux のビルドのインストール”のapt-get をすべて実行した)

PetaLinux インストーラーを起動した。
./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
だいぶ進んだのだが、今度はlocale のエラーのようだ。
docker_ce_33_190214.png

次に検索したのが、”Linuxのlocaleがおかしくなっていた”だ。
export LC_ALL=C
export LANG=C
sudo dpkg-reconfigure locales

で locales がインストールしていないと言われた。
docker_ce_34_190214.png

sudo apt locals
sudo dpkg-reconfigure locales

で、en_US.UTF-8 に設定した。これはJP ではPetaLinux がインストールできなかったためだ。
docker_ce_35_190214.png

PetaLinux インストーラーを起動した。
./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
これまた、だいぶ進んだのだが、今度は、 cpio が足りないというエラーだった。
docker_ce_36_190214.png

sudo apt install cpio
で、cpio をインストール後に、PetaLinux インストーラーを起動した。
./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
docker_ce_37_190214.png

docker_ce_38_190214.png

やっとPetaLinux インストール完了。長かった。1日トラブルシュートにかかってしまった。

ホストの端末で、コンテナをイメージにコミットした。
docker commit vivado182ub16c vivado182ub16
docker_ce_40_190215.png

これでDocker イメージにコンテナを書き込めたので、次に起動した時にPetaLinux がインストール済みになる。

最後にPetaLinux のインストールログを貼っておく。

masaaki@6f49669c6591:~$ ./petalinux-v2018.2-final-installer.run /home/masaaki/pkg/petalinux/
INFO: Checking installer checksum...
INFO: Extracting PetaLinux installer...

LICENSE AGREEMENTS

PetaLinux SDK contains software from a number of sources.  Please review
the following licenses and indicate your acceptance of each to continue.

You do not have to accept the licenses, however if you do not then you may 
not use PetaLinux SDK.

Use PgUp/PgDn to navigate the license viewer, and press 'q' to close

Press Enter to display the license agreements
Do you accept Xilinx End User License Agreement? [y/N] > y
Do you accept Webtalk Terms and Conditions? [y/N] > y
Do you accept Third Party End User License Agreement? [y/N] > y
INFO: Checking installation environment requirements...
INFO: Checking free disk space
INFO: Checking installed tools
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 302: [: ==: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 304: [: ==: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 306: [: ==: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 251: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 251: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 251: [: =: unary operator expected
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 219: [: =: unary operator expected
INFO: Checking installed development libraries
/tmp/tmp.fW4nO5GJRg/./tools/common/petalinux/utils/petalinux-env-check: line 388: [: ==: unary operator expected
INFO: Checking network and other services
WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" for its impact and solution
INFO: Installing PetaLinux...
*********************************************
WARNING: PetaLinux installation directory: /home/masaaki/pkg/petalinux//. is not empty!
*********************************************
Please input "y" to continue to install PetaLinux in that directory?[n]y
INFO: Checking PetaLinux installer integrity...
INFO: Installing PetaLinux SDK to "/home/masaaki/pkg/petalinux//."
................................................................................................................................................................................................................................................................................INFO: Installing aarch64 Yocto SDK to "/home/masaaki/pkg/petalinux//./components/yocto/source/aarch64"...
PetaLinux Extensible SDK installer version 2018.2
=================================================
You are about to install the SDK to "/home/masaaki/pkg/petalinux/components/yocto/source/aarch64". Proceed[Y/n]? Y
Extracting SDK................................done
Setting it up...
Extracting buildtools...
done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/masaaki/pkg/petalinux/components/yocto/source/aarch64/environment-setup-aarch64-xilinx-linux
INFO: Installing arm Yocto SDK to "/home/masaaki/pkg/petalinux//./components/yocto/source/arm"...
PetaLinux Extensible SDK installer version 2018.2
=================================================
You are about to install the SDK to "/home/masaaki/pkg/petalinux/components/yocto/source/arm". Proceed[Y/n]? Y
Extracting SDK..............................done
Setting it up...
Extracting buildtools...
done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/masaaki/pkg/petalinux/components/yocto/source/arm/environment-setup-cortexa9hf-neon-xilinx-linux-gnueabi
INFO: Installing microblaze_full Yocto SDK to "/home/masaaki/pkg/petalinux//./components/yocto/source/microblaze_full"...
PetaLinux Extensible SDK installer version 2018.2
=================================================
You are about to install the SDK to "/home/masaaki/pkg/petalinux/components/yocto/source/microblaze_full". Proceed[Y/n]? Y
Extracting SDK.............................done
Setting it up...
Extracting buildtools...
done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/masaaki/pkg/petalinux/components/yocto/source/microblaze_full/environment-setup-microblazeel-v10.0-bs-cmp-re-mh-div-xilinx-linux
INFO: Installing microblaze_lite Yocto SDK to "/home/masaaki/pkg/petalinux//./components/yocto/source/microblaze_lite"...
PetaLinux Extensible SDK installer version 2018.2
=================================================
You are about to install the SDK to "/home/masaaki/pkg/petalinux/components/yocto/source/microblaze_lite". Proceed[Y/n]? Y
Extracting SDK.............................done
Setting it up...
Extracting buildtools...
done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/masaaki/pkg/petalinux/components/yocto/source/microblaze_lite/environment-setup-microblazeel-v10.0-bs-cmp-re-ml-xilinx-linux
INFO: PetaLinux SDK has been installed to /home/masaaki/pkg/petalinux//.
masaaki@6f49669c6591:~$ 

  1. 2019年02月15日 04:30 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

Docker のUbuntu 16.04 イメージにVivado 2018.2 をインストールする2

Docker のUbuntu 16.04 イメージにVivado 2018.2 をインストールする”の続き。

前回は、”Docker でGUIを立ち上げる+sudoを使う方法”のDocker イメージにVivado 2018.2 をインストールして、インプリメンテーションすることができたが、Docker イメージが 38.8 GB となり、コンテナをイメージに書き戻すのが21分かかってしまった。今回はこれを解消するために -v オプションで共有ファイルシステムを使用して、Docker 上でのホーム・ディレクトリをホストのディレクトリにマップすることにより、イメージの容量を減らしてみよう。
なお、-v オプションはツィッターで@aster_ism さんに教えていただいた。ありがとうございました。

まずは、Docker ファイルはほとんど変更がないが、net-tools, gedit, nautilus を最初から apt-get でインストールするように変更した。

FROM ubuntu:16.04
 
RUN apt-get update && apt-get install -y x11-apps
RUN apt-get install -y sudo
RUN apt-get install -y net-tools gedit nautilus
 
# Replace 1000 with your user / group id
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${uid} masaaki && \
    useradd -u ${gid} -g masaaki -G sudo -r masaaki && \
    mkdir /home/masaaki && \
    chown ${uid}:${gid} -R /home/masaaki

RUN echo 'Defaults visiblepw'             >> /etc/sudoers
RUN echo 'masaaki ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER masaaki
WORKDIR /home/masaaki


次に、build.sh を示す。

docker build -t vivado182ub16 .


boot.sh を示す。

docker run -ti --rm --name vivado182ub16c -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v /home/masaaki/Docker/vivado182ub16/masaaki:/home/masaaki vivado182ub16 /bin/bash


付け加えたのは、-v オプションでホストの/home/masaaki/Docker/vivado182ub16/masaaki をDocker 上の/home/masaaki としてマップしたことだ。

ホストの/home/masaaki/Docker/vivado182ub16 ディレクトリ上で ./build.sh を使ってDocker イメージを生成して、 ./boot.sh で走らせた。
Docker 上で、 mkdir Xilinx すると、ホストの/home/masaaki/Docker/vivado182ub16/masaaki ディレクトリでXilinx ディレクトリが作成された。うまく行っている。
docker_ce_25_190213.png

docker_ce_26_190213.png

ここからは、”Docker のUbuntu 16.04 イメージにVivado 2018.2 をインストールする”と同じやり方でVivado 2018.2 をインストールした。Vivado 2018.2 では同様のexample も走らせて、ビットストリームを生成できた。
docker_ce_27_190214.png

docker_ce_28_190214.png

ホストの/home/masaaki/Docker/vivado182ub16 ディレクトリを見ると、ホーム・ディレクトリの情報が保存されている。安心した。
docker_ce_30_190214.png

Docker を exit してから、ホストで docker image ls をして、イメージの大きさを見た。
docker_ce_29_190214.png

前回(ubuntu16gui)のイメージの容量は 38.8 GB だが、今回(vivado182ub16)のイメージの容量は 693 MB だった。今回のイメージの容量の方が少なく。コンテナからイメージへの変換時間も短いので、実用に使えそうだ。

ブログへのコメントで、sudo ではなく、gosu を使うようにとのメッセージが来ていたので、試してみようと思う。

  1. 2019年02月14日 04:54 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

Docker のUbuntu 16.04 イメージにVivado 2018.2 をインストールする

Docker でGUIを立ち上げる+sudoを使う方法”のDocker イメージにVivado 2018.2 をインストールして、インプリメンテーションしてみよう。

最初に、Xilinx 社のVivado 2018.2 のWebインストーラーの Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin をXilinx 社のサイトからダウンロードした。
Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin をDocker 上のUbuntu 16.04 のコンテナにコピーする必要がある。そこで参考にさせていただいたのが、”Docker のホストとコンテナ間でファイルをやり取りする”だ。
Docker cp でホストからコンテナ、コンテナからホストにファイルをコピーできるととのこと。これは具合が良い。
まずは、コンテナを起動してから docker ps でコンテナIDを取得する。
docker cp Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin <コンテナID>:/home/masaaki
コマンドでコンテナの /home/masaaki ディレクトリにコピーした。
docker_ce_8_190211.png

Ubuntu 16.04 のコンテナ側に Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin がコピーできたので、Vivado をインストールするためのXilinx ディレクトリを作成して、 Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin にWrite パーミッションを与えた。
mkdri Xilinx
chmod +x ./Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin

docker_ce_9_190211.png

Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin を起動した。
./Xilinx_Vivado_SDK_Web_2018.2_0614_1954_Lin64.bin
docker_ce_10_190211.png

Vivado インストーラーが立ち上がった。
docker_ce_11_190211.png

Vivado WebPACK を選択した。
docker_ce_12_190211.png

デバイス選択。デフォルトとした。
docker_ce_13_190211.png

インストールパス。
docker_ce_14_190211.png

Summary.
docker_ce_15_190211.png

インストール開始。
docker_ce_16_190211.png

インストール終了。成功した。
docker_ce_17_190211.png

そういえば .bashrc が無かったので、ホストのUbuntu 18.04 の .bashrc を持ってきた。
source .bashrc
Vivado 2018.2 の settings64.sh を起動した。
source /home/masaaki/Xilinx/Vivado/2018.2/settings64.sh
Vivado 2018.2 を起動した。
./vivado
docker_ce_18_190211.png

Vivado GUI が起動した。
Zynq UltraScale+ MPSoC のサンプルデザインを選択した。
docker_ce_19_190213.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
docker_ce_20_190213.png

ハードウェアをエクスポートして、SDK を起動した。うまく行っている。
docker_ce_21_190213.png

ホスト上で docker image ls でイメージを見ると、イメージが 38.8 GB に膨れ上がっている。
docker_ce_22_190213.png

ホスト上で
docker commit ubuntu16gui ubuntu16gui
でコンテナをイメージに書き込んだ。書き込み時間は 21 分程度で結構長かった。

コンテナを exit で終了した。
docker_ce_23_190213.png

ホスト上で、docker system prune で余計なイメージを削除した。
docker_ce_24_190213.png
  1. 2019年02月13日 07:04 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:1

Docker でGUIを立ち上げる+sudoを使う方法

Docker でGUIを立ち上げる方法は@basaro_k さんのツィートから知ったのだが、”Docker で GUI アプリケーションを実行する方法”を参考にした。Docker でGUI アプリケーションを実行するやり方についてはこの記事を参考にして欲しい。

Docker で sudo を使用するには、”Dockerコンテナ内にsudoユーザを追加する”を参考にして行った。

Ubuntu 18.04 のホーム・ディレクトリの下にDocker ディレクトリを作り、その下に ubuntu16gui ディレクトリを作成した。
ubuntu16gui ディレクトリにDockerfile を作成した。
Docker ファイルを示す。

FROM ubuntu:16.04
 
RUN apt-get update && apt-get install -y x11-apps
RUN apt-get install -y sudo
 
# Replace 1000 with your user / group id
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${uid} masaaki && \
    useradd -u ${gid} -g masaaki -G sudo -r masaaki && \
    mkdir /home/masaaki && \
    chown ${uid}:${gid} -R /home/masaaki

RUN echo 'Defaults visiblepw'             >> /etc/sudoers
RUN echo 'masaaki ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER masaaki
WORKDIR /home/masaaki


build.sh を示す。

docker build -t ubuntu16gui .


ubuntu16gui イメージを作成する。

boot.sh を示す。

docker run -ti --rm --name ubuntu16gui -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix ubuntu16gui /bin/bash


./build.sh を起動して ubuntu16gui イメージを生成した。
./boot.sh を起動した。
nautilus & を起動したが、 command not found だった。
sudo apt install nautilus を実行した。
docker_ce_3_190211.png

もう一度、nautilus & を起動した。
docker_ce_4_190211.png

nautilus が起動した。
docker_ce_5_190211.png

ここで、ubuntu16gui イメージのコンテナから exit すると、インストールしたnautilus が無くなってしまう。

ubuntu16gui イメージに nautilus を追加したのだが、起動する時に --rm オプションが付いているので、ubuntu16gui イメージのコンテナから exit するとコンテナも切られてしまう。よって、 nautilus を追加した状態で exit する前に別の端末でコンテナをubuntu16gui イメージに書き戻す。
docker commit ubuntu16gui ubuntu16gui docker commit <コンテナ名> <イメージ名>
docker_ce_6_190211.png

nautilus を追加した状態で ubuntu16gui イメージに書き戻しておくと、次に ubuntu16gui イメージを起動した時に、そのまま nautilus を起動することができる。
docker_ce_7_190211.png
  1. 2019年02月12日 08:28 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:1
»