PetaLinuxをビルドする(2023.1)

Vitis 2023.1向けのPetaLinuxをビルドする。 また、ビルド環境をDockerコンテナに閉じたいため、 PetaLinux ToolsをDockerコンテナに閉じる で作成した …

npz35 Sun 26 November 2023

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 に生成された。