概要
私はPetaLinuxをDocker上で使用しています.ググると同じように環境構築されている方も多いようですね. GitHubで必要なファイル一式を公開していますので,ここにDockerイメージの作成方法をメモしておきます. 私はチュートリアルに毛が生えた程度しかPetaLinuxを触りませんので,もし不具合がありましたらissueでお知らせいただけると助かります. 私は,Dockerホスト環境としてUbuntu 16.04とUbuntu 20.04を使用しています.
準備
SSDまたはHDDの空き容量を15GB程度は準備しておいてください.作成するDockerイメージは10GB程度のサイズになります. 予め,XilinxのWebサイトからPetaLinuxのインストーラをダウンロードしておきます. ここではダウンロードディレクトリを/data1/Software/Xilinxとし,PetaLinux 2020.2をインストールすることにします.
ダウンロードしたファイルは下記のパスとします.
- /data1/Software/Xilinx/petalinux-v2020.2-final-installer.run
GitHubからファイル一式を取得します. ここではgit clone先のディレクトリ名をpetalinux-baseとしていますが,未指定で既定のままでも問題ありません.
1 | $ git clone https://github.com/KeitetsuWorks/PetaLinux-Docker.git petalinux-base |
git cloneしたディレクトリに移動します.
1 | $ cd petalinux-base |
docker build
PetaLinuxをインストールするベースとなるDockerイメージ,keitetsu/petalinux:ubuntu16.04-baseをビルドします.
1 2 3 4 | $ ./build.sh (省略) Successfully tagged keitetsu/petalinux:ubuntu16.04-base $ |
PetaLinuxのインストール
ビルドしたDockerイメージを起動し,手動でPetaLinuxをインストールします. テキストエディタでrun_base.shを開き,--volumeオプションの/data1/Software/Xilinxの部分をpetalinux-v2020.2-final-installer.runを格納したディレクトリに書き換えます. このディレクトリは,Dockerコンテナ上では/dataとしてマウントされます.
PetaLinuxはrootではなく一般ユーザでインストールする必要があります. このため,Dockerホスト上のユーザのUIDとGIDを使ってDockerコンテナ起動時にユーザが作成されます. 任意のUIDとGIDを使用したい場合は,run_base.shで指定してください. これらの処理は,entrypoint.shに記載しています.
run_base.shを実行します.
1 2 3 4 5 6 7 | $ ./run_base.sh non-network local connections being added to access control list Starting with USER: user, UID: 1000, GROUP: user, GID: 1000 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. user@hostname:/$ |
通常通りPetaLinuxのインストールを進めてください.ただし,インストールディレクトリは/opt/Xilinx/PetaLinuxとしてください. このディレクトリはDockerイメージ上に予め用意されています.
インストーラを実行すると,ライセンスに同意するかどうかの入力が求められます. ライセンス文書が表示されたら'q'キーで閉じ,'y'を入力して同意します.3項目に同意が必要です.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | $ cd /data $ chmod a+x petalinux-v2020.2-final-installer.run $ ls -l petalinux-v2020.2-final-installer.run -rwxrwxr-x 1 user user 1983802642 May 10 22:22 petalinux-v2020.2-final-installer.run $ ./petalinux-v2020.2-final-installer.run --dir /opt/Xilinx/PetaLinux INFO: Checking installation environment requirements... WARNING: This is not a supported OS INFO: Checking free disk space INFO: Checking installed tools INFO: Checking installed development libraries INFO: Checking network and other services WARNING: No tftp server found - please refer to "UG1144 PetaLinux Tools Documentation Reference Guide" for its impact and solution 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: Installing PetaLinux... INFO: Checking PetaLinux installer integrity... INFO: Installing PetaLinux SDK to "/opt/Xilinx/PetaLinux/." INFO: Installing buildtools in /opt/Xilinx/PetaLinux/./components/yocto/buildtools INFO: PetaLinux SDK has been installed to /opt/Xilinx/PetaLinux/. $ |
インストールが完了してプロンプトが返ってきたら,Dockerホスト側で,今までDockerコンテナを操作していたものとは別の端末を開きます. docker psコマンドで,keitetsu/petalinux:ubuntu16.04-baseのコンテナIDを確認します.
1 | $ docker ps -a |
DockerコンテナをDockerイメージとして保存します.${CONTAINER_ID}には,先ほど確認したコンテナIDを入れてください.
1 | $ docker commit ${CONTAINER_ID} keitetsu/petalinux:ubuntu16.04-v2020.2-1 |
これでDockerイメージを作成できました. PetaLinuxをインストールするために起動したDockerコンテナはexitで終了してください.
1 | $ exit |
使用方法
作成したDockerイメージを起動するためのシェルスクリプトは,run_base.shを改変して作成します.ここではrun.shとして保存します. /workspaceには,Dockerホスト上のPetaLinuxプロジェクトを格納するディレクトリを指定してください.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | xhost +local:root docker run \ --interactive \ --tty \ --net host \ --rm \ --name petalinux \ --env TZ=Asia/Tokyo \ --env DISPLAY=${DISPLAY} \ --env QT_X11_NO_MITSHM=1 \ --env HOST_USER=${USER} \ --env HOST_UID=$(id -u ${USER}) \ --env HOST_GROUP=${USER} \ --env HOST_GID=$(id -g ${USER}) \ --volume /tmp/.X11-unix:/tmp/.X11-unix:rw \ --volume /workspace:/data \ keitetsu/petalinux:ubuntu16.04-v2020.2-1 |
run.shを起動すると,下記のようにDockerコンテナが起動してPetaLinuxでの開発準備が整います.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ ./run.sh non-network local connections being added to access control list Starting with USER: user, UID: 1000, GROUP: user, GID: 1000 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. PetaLinux environment set to '/opt/Xilinx/PetaLinux' WARNING: This is not a supported OS INFO: Checking free disk space INFO: Checking installed tools INFO: Checking installed development libraries INFO: Checking network and other services WARNING: No tftp server found - please refer to "UG1144 2020.2 PetaLinux Tools Documentation Reference Guide" for its impact and solution user@hostname:/$ |
Vitis, VivadoのDockerイメージ
VitisとVivadoの開発環境も同様にDocker上に作成することができます.私のファイル一式は上記です. こちらはまだ手順を書くことができていないのですが,PetaLinuxと同様に,下記の要領で作成します.また手順を書きたいと思います.
- ベースのDockerイメージをbuild/build.shでビルド
- run_base/run_base.shでDockerコンテナを起動
- install/installを参考にVitisをバッチモードでインストール
- install_xrt_bdf/build.shでXRTとサードパーティのbdfをインストール
- docker commit
- run/run.shでDockerコンテナを起動