Vitis 2023.1向けのPetaLinuxをビルドする。 また、ビルド環境をDockerコンテナに閉じたいため、 PetaLinux ToolsをDockerコンテナに閉じる で作成したDocker環境を更新して、PetaLinuxをビルドした。
動作環境
- OS : Ubuntu 20.04.3 LTS(64 bit)
- Vivado : 2023.1
事前準備
事前に Kria KV260のハードウェアプラットフォームファイルを作る(2023.1) で作成したKria KV260のハードウェアプラットフォームファイルを用意しておく必要がある。
ファイルのダウンロード
ダウンロードページ から以下のファイルをダウンロードした。
- PetaLinux インストーラー
- Kria KV260 スターター キット BSP
ファイルサイズを確認した。 MD5ハッシュの値が正しいことも確認した。
$ du -sh petalinux-v2023.1-05012318-installer.run
3.2G petalinux-v2023.1-05012318-installer.run
$ md5sum petalinux-v2023.1-05012318-installer.run
78fd08837e2d30541190a7ff20988e0f petalinux-v2023.1-05012318-installer.run
$ du -sh xilinx-kv260-starterkit-v2023.1-05080224.bsp
1.9G xilinx-kv260-starterkit-v2023.1-05080224.bsp
$ md5sum xilinx-kv260-starterkit-v2023.1-05080224.bsp
5710529b689a9ca43c82a3ad36b37590 xilinx-kv260-starterkit-v2023.1-05080224.bsp
ファイルの配置
petalinux-tools-docker リポジトリをcloneする。
cd ${HOME}
git clone https://github.com/npz35/petalinux-tools-docker.git -b 0.3.0
petalinux-tools-docker ディレクトリの中に、先ほどダウンロードした petalinux-v2023.1-05012318-installer.run を配置する。
cp petalinux-v2023.1-05012318-installer.run ${HOME}/petalinux-tools-docker/
Kria Robotic Stack 向けのワークディレクトリを作成する。 ここでは ${HOME}/krs_workdir_2023_1 とした。
mkdir -p ${HOME}/krs_workdir_2023_1
また、BSPファイルとハードウェアプラットフォームファイルを配置する。
cp \
xilinx-kv260-starterkit-v2023.1-05080224.bsp \
${HOME}/vivado_workspace_2023_1/kv260_hardware_platform/kv260_hardware_platform.xsa \
${HOME}/krs_workdir_2023_1/
${HOME}/krs_workdir_2023_1/ は後述するDockerコンテナにマウントされる。
Dockerイメージのビルド
Petalinuxのビルド用のDockerイメージをビルドする。
cd ${HOME}/petalinux-tools-docker/
./scripts/docker_build.sh
Dockerコンテナの起動
古いDockerコンテナが残っている場合には、必要に応じてrenameで退避する。
docker rename build_petalinux build_petalinux.backup
Petalinuxのビルド用のDockerコンテナを起動する。 なお、ホストマシンの ${XILINX_TOOLS_INSTALL_DIR_PREFIX}/Vitis にVitisがインストールされている必要がある。 インストール先がデフォルトである /tools/Xilinx と異なる場合には XILINX_TOOLS_INSTALL_DIR_PREFIX を設定する必要がある。
./scripts/docker_run.sh
依存パッケージのインストール
起動したDockerコンテナの中で、依存パッケージの追加インストールを行う。
sudo /tools/Xilinx/Vitis/2023.1/scripts/installLibs.sh
PetaLinuxのビルド設定
ビルド設定を行う。
cd ${HOME}/
source settings.sh
petalinux-upgrade -u http://petalinux.xilinx.com/sswreleases/rel-v2023/sdkupdate/ -p "aarch64" --wget-args "--wait 1 -nH --cut-dirs=4"
petalinux-create --type project --source krs_workdir_2023_1/xilinx-kv260-starterkit-v2023.1-05080224.bsp
cd xilinx-kv260-starterkit-2023.1
petalinux-config を実行する。
cd ${HOME}/xilinx-kv260-starterkit-2023.1/
petalinux-config --component rootfs
ESCキーを2回押して終了する。
cd ${HOME}/xilinx-kv260-starterkit-2023.1/
petalinux-config
ESCキーを2回押して終了する。
user-rootfsconfig に設定を追記する。
cd ${HOME}/xilinx-kv260-starterkit-2023.1/
echo 'CONFIG_xrt' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_xrt-dev' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_zocl' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_opencl-clhpp-dev' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_opencl-headers-dev' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_packagegroup-petalinux-opencv' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_packagegroup-petalinux-opencv-dev' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_cmake' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_tmux' >> project-spec/meta-user/conf/user-rootfsconfig
echo 'CONFIG_clinfo' >> project-spec/meta-user/conf/user-rootfsconfig
user-rootfsconfig は以下のようになる。
$ cd ${HOME}/xilinx-kv260-starterkit-2023.1/
$ cat project-spec/meta-user/conf/user-rootfsconfig
#Note: Mention Each package in individual line
#These packages will get added into rootfs menu entry
CONFIG_gpio-demo
CONFIG_peekpoke
CONFIG_packagegroup-petalinux-kria
CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev
CONFIG_cmake
CONFIG_tmux
CONFIG_clinfo
追加したいパッケージを有効化する。
petalinux-config --component rootfs
以下も有効化した。
- packagegroup-petalinux-vitis-acceleration-essential
- packagegroup-petalinux-vitis-acceleration-essential-dbg
なお、後述するエラーを回避するために clinfo は有効化しなかった。
petalinux-config を実行する。
petalinux-config --component kernel --silentconfig
エラーが出て途中で止まることがある。 何度か再実行すれば通る。
petalinux-config --component rootfs --silentconfig
Petalinuxのビルド
生成物を確認しながら、順にビルドしていく。
petalinux-build --component kernel
$ ls images/linux/
bl31.bin image.ub ramdisk.cpio.gz.u-boot u-boot-dtb.bin
bl31.elf kr-eeprom.bin ramdisk.manifest u-boot-dtb.elf
boot.scr kv-eeprom.bin ramdisk.tar.gz u-boot.elf
config pmu-conf.bin som-eeprom.bin vmlinux
dtbos pmufw.elf system.bit zynqmp_fsbl.elf
fit-dtb.blob pmu_rom_qemu_sha3.elf system.dtb zynqmp-qemu-arm.dtb
Image pxelinux.cfg system-zynqmp-sck-kv-g-revB.dtb zynqmp-qemu-multiarch-arm.dtb
Image.gz ramdisk.cpio.gz u-boot.bin zynqmp-qemu-multiarch-pmu.dtb
petalinux-build --component u-boot
$ ls images/linux/
bl31.bin image.ub ramdisk.cpio.gz.u-boot u-boot-dtb.bin
bl31.elf kr-eeprom.bin ramdisk.manifest u-boot-dtb.elf
boot.scr kv-eeprom.bin ramdisk.tar.gz u-boot.elf
config pmu-conf.bin som-eeprom.bin vmlinux
dtbos pmufw.elf system.bit zynqmp_fsbl.elf
fit-dtb.blob pmu_rom_qemu_sha3.elf system.dtb zynqmp-qemu-arm.dtb
Image pxelinux.cfg system-zynqmp-sck-kv-g-revB.dtb zynqmp-qemu-multiarch-arm.dtb
Image.gz ramdisk.cpio.gz u-boot.bin zynqmp-qemu-multiarch-pmu.dtb
petalinux-build --component rootfs
なお clinfo は有効化していると以下のエラーが出る。
Error: Transaction test error:
file /usr/lib/libOpenCL.so.1 conflicts between attempted installs of opencl-icd-loader-v2022.01.04+git0+169f05d026-r0.0.cortexa72_cortexa53 and libopencl1-2.3.1-r0.0.cortexa72_cortexa53
$ ls images/linux/
bl31.bin kv-eeprom.bin rootfs.cpio.gz u-boot.bin
bl31.elf pmu-conf.bin rootfs.cpio.gz.u-boot u-boot-dtb.bin
boot.scr pmufw.elf rootfs.ext4 u-boot-dtb.elf
config pmu_rom_qemu_sha3.elf rootfs.jffs2 u-boot.elf
dtbos pxelinux.cfg rootfs.manifest vmlinux
fit-dtb.blob ramdisk.cpio.gz rootfs.tar.gz zynqmp_fsbl.elf
Image ramdisk.cpio.gz.u-boot som-eeprom.bin zynqmp-qemu-arm.dtb
Image.gz ramdisk.manifest system.bit zynqmp-qemu-multiarch-arm.dtb
image.ub ramdisk.tar.gz system.dtb zynqmp-qemu-multiarch-pmu.dtb
kr-eeprom.bin rootfs.cpio system-zynqmp-sck-kv-g-revB.dtb
petalinux-build
$ ls images/linux/
bl31.bin kv-eeprom.bin rootfs.cpio.gz u-boot.bin
bl31.elf pmu-conf.bin rootfs.cpio.gz.u-boot u-boot-dtb.bin
boot.scr pmufw.elf rootfs.ext4 u-boot-dtb.elf
config pmu_rom_qemu_sha3.elf rootfs.jffs2 u-boot.elf
dtbos pxelinux.cfg rootfs.manifest vmlinux
fit-dtb.blob ramdisk.cpio.gz rootfs.tar.gz zynqmp_fsbl.elf
Image ramdisk.cpio.gz.u-boot som-eeprom.bin zynqmp-qemu-arm.dtb
Image.gz ramdisk.manifest system.bit zynqmp-qemu-multiarch-arm.dtb
image.ub ramdisk.tar.gz system.dtb zynqmp-qemu-multiarch-pmu.dtb
kr-eeprom.bin rootfs.cpio system-zynqmp-sck-kv-g-revB.dtb
ブートイメージの生成
microSDに書き込むファイルを生成する。
petalinux-package \
--wic \
--images-dir images/linux/ \
--bootfiles "ramdisk.cpio.gz.u-boot,boot.scr,Image,system.dtb,system-zynqmp-sck-kv-g-revB.dtb" \
--disk-name "mmcblk1"
$ ls images/linux/
bl31.bin kv-eeprom.bin rootfs.cpio system-zynqmp-sck-kv-g-revB.dtb
bl31.elf petalinux-sdimage.wic rootfs.cpio.gz u-boot.bin
boot.scr pmu-conf.bin rootfs.cpio.gz.u-boot u-boot-dtb.bin
config pmufw.elf rootfs.ext4 u-boot-dtb.elf
dtbos pmu_rom_qemu_sha3.elf rootfs.jffs2 u-boot.elf
fit-dtb.blob pxelinux.cfg rootfs.manifest vmlinux
Image ramdisk.cpio.gz rootfs.tar.gz zynqmp_fsbl.elf
Image.gz ramdisk.cpio.gz.u-boot som-eeprom.bin zynqmp-qemu-arm.dtb
image.ub ramdisk.manifest system.bit zynqmp-qemu-multiarch-arm.dtb
kr-eeprom.bin ramdisk.tar.gz system.dtb zynqmp-qemu-multiarch-pmu.dtb
sdk.sh が必要な場合は以下を実行する。
petalinux-build --sdk
$ ls images/linux/
bl31.bin petalinux-sdimage.wic rootfs.cpio.gz.u-boot u-boot-dtb.bin
bl31.elf pmu-conf.bin rootfs.ext4 u-boot-dtb.elf
boot.scr pmufw.elf rootfs.jffs2 u-boot.elf
config pmu_rom_qemu_sha3.elf rootfs.manifest vmlinux
dtbos pxelinux.cfg rootfs.tar.gz zynqmp_fsbl.elf
fit-dtb.blob ramdisk.cpio.gz sdk.sh zynqmp-qemu-arm.dtb
Image ramdisk.cpio.gz.u-boot som-eeprom.bin zynqmp-qemu-multiarch-arm.dtb
Image.gz ramdisk.manifest system.bit zynqmp-qemu-multiarch-pmu.dtb
image.ub ramdisk.tar.gz system.dtb
kr-eeprom.bin rootfs.cpio system-zynqmp-sck-kv-g-revB.dtb
kv-eeprom.bin rootfs.cpio.gz u-boot.bin
生成された images をホスト側にコピーする。
cp -r images ${HOME}/krs_workdir_2023_1/
Linuxイメージファイルが images/linux/petalinux-sdimage.wic に生成された。