Petalinuxを動かしてみる
Petalinux をビルドする
公開日:2023年1月5日
前記事では Petalinux 開発環境を整えました。Ubuntu 上で以下、各種 Petalinux コマンドが利用可能になっていると思います。
$ petalinux-
petalinux-boot petalinux-config petalinux-devtool petalinux-upgrade
petalinux-build petalinux-create petalinux-package petalinux-util
本記事では、それらを使って Zybo Z7-20 上で動作させる Petalinux をビルドします。
ハードウェアを構築する
まず、Zybo Z7-20 用の簡単なハードウェア構築を Vivado を用いて行います。
以下、簡単に手順を記載します。
※手順の詳細についてはVivado について解説している記事をご覧ください。
- Vivado で新規プロジェクトを作成する
- Vivado でブロックデザインを作成する
- ZYNQ7 Prosessing System を追加し、[Run Block Automation] をクリックする
- FCLK_CLK0 と M_AXI_GP0_ACLK を接続する
以下のようになっていれば作成完了です。
生成される XSA ファイルの名前や出力先を変更出来ますが、本記事ではそのままとします
完了するとプロジェクト作成時に指定したディレクトリに design_1_wrapper.xsa が生成されます。
Petalinux プロジェクト作成
それでは Petalinux コマンドを利用してビルド作業を行っていきます。
まずは Petalinux プロジェクトを作成します。
プロジェクトはどこに作ることも可能ですが、対応するハードウェアがはっきりするように、先ほど作成した Vivado のプロジェクトディレクトリの中に作成します。
// Vivado プロジェクトディレクトリに移動
$ cd /home/username/workspace/petalinux1
// peta_project という名前の Petalinux プロジェクト名で作成(名前は任意)
$ petalinux-create --type project --template zynq --name peta_project
NFO: Create project: peta_project
INFO: New project successfully created in /home/username/workspace/petalinux1/peta_project
Vivado での成果物 design_1_wrapper.xsa を含め、以下のようなディレクトリ構成になっていると思います。
$ ls
design_1_wrapper.xsa petalinux1.cache petalinux1.hw petalinux1.runs petalinux1.srcs
peta_project petalinux1.gen petalinux1.ip_user_files petalinux1.sim petalinux1.xpr
Petalinux システムコンフィグレーション
次に Vivado で作成したハードウェア構成で Petalinux プロジェクトを初期化します。
// 作成した Petalinux プロジェクトディレクトリに移動
$ cd peta_project
// Vivado で作成した XSA ファイルを指定してシステムコンフィグレーション実施
$ petalinux-config --get-hw-description=../design_1_wrapper.xsa
[INFO] Sourcing buildtools
INFO: Getting hardware description...
INFO: Renaming design_1_wrapper.xsa to system.xsa
[INFO] Generating Kconfig for project
[INFO] Menuconfig project
petalinux-config を実行すると以下のようなメニューが表示されます。
[Image Packaging Configuration --->] を選択し、先頭の [ Root filesystem type (xxxx) --->] の部分を確認してください。括弧内が EXT4 (SD/eMMC/SATA/USB) になっていなければ、変更してください。
[Save] -> [Ok] -> [Exit] を選択して設定を保存し、さらに [Exit] を2回選択してメニューを閉じてください。
*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.
[INFO] Extracting yocto SDK to components/yocto. This may take time!
[INFO] Sourcing build environment
[INFO] Generating kconfig for Rootfs
[INFO] Silentconfig rootfs
[INFO] Generating plnxtool conf
[INFO] Adding user layers
[INFO] Generating workspace directory
Petalinux ビルド
最後に Petalinux をビルドします。
ビルド時に複数の ftp, git サーバーなどへのアクセスが行われるため、ネットワークに接続した状態でビルドしてください。
ビルドには数分かかります。ネットワーク回線が細かったり障害が起こると、ビルドにさらに時間がかかったり途中で止まる可能性もありますのでご注意ください。
$ petalinux-build
[INFO] Sourcing buildtools
[INFO] Building project
[INFO] Sourcing build environment
[INFO] Generating workspace directory
INFO: bitbake petalinux-image-minimal
NOTE: Started PRServer with DBfile: /home/username/workspace/petalinux1/peta_project/build/cache/prserv.sqlite3, Address: 127.0.0.1:44629, PID: 18569
Loading cache: 100% | | ETA: --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |#####################################################################################################################################################################| Time: 0:00:55
Parsing of 3592 .bb files complete (0 cached, 3592 parsed). 5394 targets, 554 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
NOTE: Fetching uninative binary shim file:///home/username/workspace/petalinux1/peta_project/components/yocto/downloads/uninative/126f4f7f6f21084ee140dac3eb4c536b963837826b7c38599db0b512c3377ba2/x86_64-nativesdk-libc-3.4.tar.xz;sha256sum=126f4f7f6f21084ee140dac3eb4c536b963837826b7c38599db0b512c3377ba2 (will check PREMIRRORS first)
Initialising tasks: 100% |##################################################################################################################################################################| Time: 0:00:05
Checking sstate mirror object availability: 100% |##########################################################################################################################################| Time: 0:00:18
Sstate summary: Wanted 1577 Local 0 Network 1358 Missed 219 Current 0 (86% match, 0% complete)
NOTE: Executing Tasks
...
途中でエラーが発生してビルドに失敗する場合があります。その場合はもう一度続けてビルドしてみてください。
// ビルド途中でエラーが発生
WARNING: base-files-soc-2022.1-r0 do_package_qa_setscene: Failed to fetch URL file://78/9e/sstate:base-files-soc:zynq-7z-xilinx-linux-gnueabi:2022.1:r0:zynq-7z:7:789e357513ef1fb7126affed8b1bd732a4a0afec0783b03391ac8f89cdd1e509_package_qa.tgz;downloadfilename=78/9e/sstate:base-files-soc:zynq-7z-xilinx-linux-gnueabi:2022.1:r0:zynq-7z:7:789e357513ef1fb7126affed8b1bd732a4a0afec0783b03391ac8f89cdd1e509_package_qa.tgz, attempting MIRRORS if available
ERROR: base-files-soc-2022.1-r0 do_package_qa_setscene: Fetcher failure: Unable to find file file://78/9e/sstate:base-files-soc:zynq-7z-xilinx-linux-gnueabi:2022.1:r0:zynq-7z:7:789e357513ef1fb7126affed8b1bd732a4a0afec0783b03391ac8f89cdd1e509_package_qa.tgz;downloadfilename=78/9e/sstate:base-files-soc:zynq-7z-xilinx-linux-gnueabi:2022.1:r0:zynq-7z:7:789e357513ef1fb7126affed8b1bd732a4a0afec0783b03391ac8f89cdd1e509_package_qa.tgz anywhere. The paths that were searched were:
/home/username/workspace/petalinux1/peta_project/build/sstate-cache
/home/username/workspace/petalinux1/peta_project/build/sstate-cache
WARNING: base-files-soc-2022.1-r0 do_package_qa_setscene: No sstate archive obtainable, will run full task instead.
ERROR: Logfile of failure stored in: /home/username/workspace/petalinux1/peta_project/build/tmp/work/zynq-7z-xilinx-linux-gnueabi/base-files-soc/2022.1-r0/temp/log.do_package_qa_setscene.26824
WARNING: Setscene task (/home/username/workspace/petalinux1/peta_project/components/yocto/layers/meta-petalinux/recipes-core/base-files/base-files-soc.bb:do_package_qa_setscene) failed with exit code '1' - real task will be run instead
NOTE: Tasks Summary: Attempted 4216 tasks of which 3727 didn't need to be rerun and all succeeded.
Summary: There were 2 WARNING messages shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
ERROR: Failed to build project. Check the /home/username/workspace/petalinux1/peta_project/build/build.log file for more details...
// 再度ビルドする
$ petalinux-build
[INFO] Sourcing buildtools
[INFO] Building project
[INFO] Sourcing build environment
[INFO] Generating workspace directory
INFO: bitbake petalinux-image-minimal
NOTE: Started PRServer with DBfile: /home/username/workspace/petalinux1/peta_project/build/cache/prserv.sqlite3, Address: 127.0.0.1:36647, PID: 136488
Loading cache: 100% |#######################################################################################################################################################################| Time: 0:00:00
Loaded 5392 entries from dependency cache.
Parsing recipes: 100% |#####################################################################################################################################################################| Time: 0:00:00
Parsing of 3592 .bb files complete (3590 cached, 2 parsed). 5394 targets, 554 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |##################################################################################################################################################################| Time: 0:00:03
Checking sstate mirror object availability: 100% |##########################################################################################################################################| Time: 0:00:06
Sstate summary: Wanted 466 Local 17 Network 304 Missed 145 Current 1111 (68% match, 90% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 4216 tasks of which 4212 didn't need to be rerun and all succeeded.
INFO: Failed to copy built images to tftp dir: /tftpboot
[INFO] Successfully built project
最後に [INFO] Successfully built project と出力されるとビルド完了です。
※前記事同様、TFTP server は利用しないため、ここでは無視します。
images/linux にビルド結果が生成されます。
$ ls images/linux/
boot.scr rootfs.cpio.gz rootfs.tar.gz u-boot.bin zynq_fsbl.elf
config rootfs.cpio.gz.u-boot system.bit u-boot.elf
image.ub rootfs.ext4 system.dtb uImage
pxelinux.cfg rootfs.jffs2 u-boot-dtb.bin vmlinux
rootfs.cpio rootfs.manifest u-boot-dtb.elf zImage
※文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。