組込みLinux Ultra96v2 でVitisやってみる その4 PetaLinux 2023.1 Linuxビルド

その3』のVivado MLで作ったハード情報のdesign_ultra96v2_wrapper.xsa をPetaLinuxに取り込んでultra96v2用のLinuxをビルドして、いよいよmicroSDでUltra96v2でLinuxを起動してみます。 2023.1でも試してみました。 使い勝手は2022.2とほぼ同じですが、2023.1はVitisが固まりやすくなっています。 またKernelは6.1.5_xlnxになっています。

準備

進める前に以下準備が必要です。

  1. PetaLinuxのインストール
  2. XRT(Xilinx Runtime)のインストール
  3. Ultra96V2への配線(電源、UART)
  4. minicomの使い方
  5. 空き容量の確認

以下、このサイトを参考にしています。

How to create Ultra96v2 Linux-based Platform in Xilinx Vitis 2020.2
Creating the Ulra96v2 platform in the Xilinx Vitis 2020.2 has five steps: XSA design – Generating a Vivado project conta...

空き容量の確認

PetaLinuxでビルドするには最低でも100GBは空きが必要と思います。 私の場合、260GBの空きがあったのにいつの間にか193GBになっていました。(2022.2版)

$  df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           794M  2.0M  792M   1% /run
/dev/sda5       457G  241G  193G  56% /
tmpfs           3.9G  140M  3.8G   4% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
     :
     :
     :

PetaLinuxのプロジェクトディレクトリ下に生成される容量をみたら、PetaLinux 2023.1プロジェクトディレクトリは、56GBになっていました。 ここに、PetaLinux KernelソースとルートファイルシステムとSysroot(Vitisで必要)が入っています。 Vivadoはまだ0.1GB程度でした。

$ sudo du -h -d 1 . | sort -h
4.0K	./project_3.sim
8.0K	./Packages
16K	./project_3.hw
60K	./project_3.cache
528K	./gittest
660K	./project_3.srcs
18M	./project_3.runs
33M	./project_3.ip_user_files
37M	./project_3.gen
7.9G	./pfm
56G	./ultra96_peta_proj3
64G	.

PetaLinuxプロジェクト作成

私の場合、『その3』でVivadoから~/ultra96/vivado/project_3/にdesign_ultra96v2_wrapper.xsaファイルを作っているので、~/ultra96/vivado/project_3/にPetaLinuxのプロジェクトディレクトリ『ultra96_peta_proj3』を作ります。 『~/ultra96/vivado/project_3/ultra96_peta_proj3』が以後でてくる、<PETA_PROJ_DIR>です。(PetaLinuxプロジェクトディレクトリ) また、PetaLinuxインストールディレクトリ<PETA_INSTALL_DIR>は、『PetaLinux 2022.2インストール方法』でPetaLinuxをインストールした『/tools/Xilinx/PetaLinux/』(2023.1は、『/tools/Xilinx/PetaLinux/2023.1/』です)

$ cd ~/ultra96/vivado/project_3
$ source <PETA_INSTALL_DIR>/settings.sh    //<---これをしないとpetalinux-configを実行できません。

// 私の場合は以下のsettings.shを実行します。
// $ source /tools/Xilinx/PetaLinux/settings.sh  //<--私の2022.2場合
// $ source /tools/Xilinx/PetaLinux/2023.1/settings.sh  //<--私の2023.1場合

// 次のpetalinux-createの--nameで指定したultra96_peta_proj3のディレクトリが生成されます。
$ petalinux-create --type project --template zynqMP --name ultra96_peta_proj3

INFO: Create project: ultra96_peta_project
INFO: New project successfully created in 

PetaLinux プロジェクト設定

2023.1も2022.2も同じです。

  1. PetaLinuxのProjectディレクトリ(以下、<PETA_PROJ_DIR>)に移動して
  2. ディレクトリが異なるので、再度、source <PETA_INSTALL_DIR>/settings.sh を実行して、
  3. xsaファイルを指定してpetalinux-configコマンドでプロジェクトを設定します。
    • これで<PETA_PROJ_DIR>/project-spec/configディレクトリの下に、configファイルとrootfs_configファイルが出来きます。
    • 注意、『=』と『..』の間はスペース不可です。
  4. PetaLinuxでビルドして、configを色々変更した後でVivadoでハード変更して新しい.xsaを生成した場合は、この『petalinux-config –get-hw-description=』を実行すると、これまで設定したPetaLinuxの内容を失うこと無く再ビルド出来ます。 また最初の1回目ビルドのように色々ダウンロードしないので、短時間でビルドができます。 なのでVivadoでハード変更しても一からPetaLinuxのプロジェクトを作り直す必要はありませんでした。

$ cd ultra96_peta_project3/
$ petalinux-config --get-hw-description=../design_ultra96v2_wrapper.xsa

System Configutation 設定

System Configurationのmenuconfigが立ち上がりましたね。 操作は、『組込みLinux Beaglebone Black でやってみる その5 ツールチェーン、U-Bootビルド』でmenuconfigの操作方法も記載していますのでよかったらご参考ください。 『検索(/)』や『ヘルプ(?)』も知っていたら便利です。

(*Linux KernelをRT化などカスタマイズする際は、次のpetalinux-config -c kernelをする前にgithubのlinux-xlnxをgit cloneで取ってきて、Linux Components selectionでlinux-xlnxのパスを設定して置かないとKernel Version Sanity checkエラーでビルド出来ない。)

  • トップメニューの『DTG settings』に入り、
  • MACHINE_NAME』に『avnet-ultra96-rev1』と入れる。(これはavnet-ultra96-rev1のbspを入れているので、avnet-ultra96-rev1.dtsiをincludeさせるため。 bspがない場合は、初期値の『template』のままにしておく事。)
  • Ultra96v2のUART用の4ピンJ1コネクタにはZynq UltraScale+のUART1がつながっているので、
  • トップメニューに戻り『Subsystem AUTO Hardware Settings』に入り、
  • Serial Settings』に入り、
  • 全て『psu_uart_1』に変更して、
  • ESC』->…->『ESC』->『Y』でsaveする

microSDからLinuxを起動するので、トップメニュから『Image Packaging Configuration』に入り『Root filesystem type』を『EXT4(SD/eMMC/SATA/USB)』にする。

下の表示になるまで『ESC』を押して、『Yes』を選択して保存して抜ける。

Exit』した後にメッセージを見たら、やっぱり4行目にKconfig、5行目にmenuconfigとでていますね。 『組込みLinux Beagleboneでやってみる』シリーズでも出てきたように、PetaLinuxの環境設定もmenuconfigを使っているのですね。 Linaroの個別ビルドもBuildrootでビルドもPetaLinuxやYoctoでビルドも全てmenuconfigを使っていて、menuconfigの操作だけを覚たらいいので記憶力の悪い私は助かります。

[INFO] Sourcing buildtools
INFO: Getting hardware description...
INFO: Renaming design_ultra96v2_wrapper.xsa to system.xsa
[INFO] Generating Kconfig for project
[INFO] Menuconfig project
configuration written to /home/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_peta_project/project-spec/configs/config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

[INFO] Sourcing build environment
[INFO] Generating kconfig for Rootfs
[INFO] Silentconfig rootfs
[INFO] Generating plnxtool conf
[INFO] Adding user layers
[INFO] Generating workspace directory

各種 Configuration

petalinux-configで.xsaを取り込むと、System Configurationのmenuconfigが立ち上がりましたが、その他にも私が知っているだけで、PetaLinux合計4つのmenuconfigがあります。

  1. System Configuration
    • 次回から<PETA_PROJ_DIR>で、petalinux-configをオプションなしで実行すると、System Configurationのmenuconfigが表示されます。
  2. Kernel Configuration
  3. Rootfs Configuration
    • openssh、python3、dnf、wget、curl、sudo、rpm、opensslのrootfsへの組込みは、petelinux-config -c rootfsでrootfs_config用のmenuconfigで設定します。
  4. BusyBox Configuration
  5. Tips
    • petalinux-configコマンドでエラーと成る場合は、-vで詳細メッセージ出力してデバッグします。
    • <PETA_PROJ_DIR>で、再度xsaを取り込んでも、system menuconfigとkernel meuconfig の変更した設定は残っていた。
    • デバッグ時は、<PETA_PROJ_DIR>/config.logの内容を確認したほうが良い。

次回からSystem Configurationのmenuconfigを表示するには、<PETA_PROJ_DIR>で以下を実行します。source /tools/Xilinx/PetaLinux/settings.sh

$ cd <PETA_PROJ_DIR>
$ source <PETA_INSTALL_DIR>/settings.sh     //<----私の場合は、/tools/Xilinx/PetaLinuxです。
$ petalinux-config

Kernel Configuration 設定

  1. petalinux-config -c kernel』でKernelのmenuconfigを立ち上げ、(30分ほどかかった)
    • linux-xlnx-6.1.5-xlinx-v2023.1+gitAUTOINC+716921b6d7-r0をフェッチするのに3分かかった。Wifi遅いので、将来ha2.5G Lanにしよう。
    • 最大7コアまで使って立ち上げてた。新しいPCで5分かかった。
  2. トップメニューから『Library routines』に入り
  3. Size in Mega bytes』に入り
  4. 以下の様に『1024』に変更する
  1. トップメニューから『CPU Power Mangement』〜『CPU Idle』〜『CPU idle PM support』のチェック[*]を外す。(初期値は外れてました) トップメニューに戻る時も気をつけること。 間違えてmenuconfigから抜けたらまたビルドが始まり、8分くらい時間がかかります。(新しいPCで1分半)
  2. ップメニューから『CPU Power Mangement』〜『CPU Frequency scaling』〜『CPU Frequency scaling』チェックを外す。(以下の様に)
  3. 保存して抜けます。

Vitis Taget Platform に必要なxrt、zocl、opencl等を追加

user-rootfsconfig設定

<PETA_PROJ_DIR>/project-spec/meta-user/conf/user-rootfsconfig に以下を追加する (参考)。 私はviを使いましたが、nanoでも構いません。

$ sudo vi user-rootfsconfig    //<---- user ichirには書込権限なかったのでsudoで実行

CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv

Rootfs Configuration 設定

  1. <PETA_PROJ_DIR>に移動して、
  2. rootfsのmenuconfigを開き、
  3. user packages』に入り、
  4. 以下の様に『*』を入れて、
  5. 保存して終了する。
$ cd <PETA_PROJ_DIR>
$ petalinux-config -c rootfs

デバイスツリー編集

次に、<PROJECT_DIR>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi を以下のようにします。(&amba以下を追加) どうもsystem-user.dtsiはユーザーがデバイスツリーを上書き出来るようになっているみたいです。 きっとオーバーレイみたいに、最後にインクルードされるのでしょうね。

先頭のインデントは全て半角スペースを使用しました。

$ cd <PROJECT_DIR>/project-spec/meta-user/recipes-bsp/device-tree/files
$ sudo vi system-user.dtsi    //<---- user ichirには書込権限なし

/include/ "system-conf.dtsi"
/ {
 }

/*amba = "/axi"; となっているので、これはaxiを指している*/
&amba {
    zyxclmm_drm {
        compatible = "xlnx,zocl";
        status = "okay";
        interrupt-parent = <&axi_intc_0>;
        interrupts = <0  4>, <1  4>, <2  4>, <3  4>,
                     <4  4>, <5  4>, <6  4>, <7  4>,
                     <8  4>, <9  4>, <10 4>, <11 4>,
                     <12 4>, <13 4>, <14 4>, <15 4>,
                     <16 4>, <17 4>, <18 4>, <19 4>,
                     <20 4>, <21 4>, <22 4>, <23 4>,
                     <24 4>, <25 4>, <26 4>, <27 4>,
                     <28 4>, <29 4>, <30 4>, <31 4>;
    };  
};

&axi_intc_0 { 
    xlnx,kind-of-intr = <0x0>;
    xlnx,num-intr-inputs = <0x20>;
    interrupt-parent = <&gic>;
    interrupts = <0 0x59 4>;
};

&amba_pl {
    zyxclmm_drm {
        compatible="ichiri_disabled,jcl";
        status="disabled";
    };
};
  • 最初は『&amba_pl/zyxclmm_drm』の部分はなしでVitisでvaddプロジェクトを作っていましたが、krnl_vadd_1インスタンスに7回に1回しか接続しなかったりして、ほとんどの場合『No krnl_vadd_1』エラーとなり不安定でした。  
  • そこで、Kernelメッセージを追っていくと、どうもamba_plバスを採用した時に失敗して、axiバスを採用した時に成功する事が分かりました。 
  • Vitisが使っているであろうSystem.dtbを逆変換して中身を確認すると、zyclmm_drmノードが2つあり、それぞれaxiバスとamba_plバスの下にありました。 それぞれのcompatible propertyは同じで、『compatible = “xlnx,zocl”;』となっていました。 その為、zoclのKernelドライバが両方とも見つけて、minor1とminor2で2つのドライバインスタンスを作っていました。 
  • なので、amba_plに接続されたzyclmm_drmノードをdisabledにして、念の為マッチもしないように、compatibleの値も上記のように上書きして、必ずaxiのzyclmm_drmノードしか採用しないようにしています。 
  • これでやっと安定して必ず成功するようになりました。(解決に1ヶ月かかった。Xilinxの英語のforumやelement14などにも問い合わせましたが、回答なしでした。 その他、ChatGTPなどありとあらゆる検索をしたのですが、解決策が見つからず、上記が私がたどり着いた解決策です。) 
  • 2023.1でも2022.2でも同じ現象でして。 2020のTutorial等では問題になっていないみたいです。
  • もっと良い解決方法が見つかったら追って掲載します。

ビルド

  • プロジェクトディレクトリでビルドを実行します。
  • インターネットにアクセスして大量のファイルをダウンロード(10GBくらいかな)するので、インターネットに接続した状態でビルド。
  • 90分くらいかかりました。 私のPCは12年前のi7 2コアPCにuBuntu を入れてHDD(480GB)なので遅いと思います。 スレッドは4つありますが、全スレッドは、ビルド中ずっと100%に入り付いていました。 メモリは8GBで50%強だったので、メモリ量よりプロセッサ性能とコア数を上げるのと、ファイルを大量に書き込むのでSSDにしたら10倍位速くなるのではと思います。(速いPCにしても1回目はダウンロードが多いので、25分かかりました。デバイスツリーを変更してビルドのやり直しは4分くらいでした。)
$ cd <PROJECT_DIR>
$ petalinux-build

*エラーとなったら、『petalinux-build』を実行する前に、以下を実行してみたらいいようです。

// 引用: https://support.xilinx.com/s/question/0D52E00006hptJuSAI/what-does-bsp-contain?language=ja
$ cd <PETA_PROJ_DIR>
$ rm -rf components/plnx_workspace
$ petalinux-build -x mrproper  //<---これをしてもmenuconfigは残っていた。 5分ほどかかる。

以下のように一番下に『Successfully built project』と出ました!

$ 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/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_peta_project/build/cache/prserv.sqlite3, Address: 127.0.0.1:46413, PID: 77668
Loading cache: 100% |                                                   | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |##################################################| Time: 0:15:18
Parsing of 4461 .bb files complete (0 cached, 4461 parsed). 6497 targets, 579 skipped, 1 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
NOTE: Fetching uninative binary shim file:///home/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_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:16
Checking sstate mirror object availability: 100% |#######################| Time: 0:01:31
Sstate summary: Wanted 1631 Local 0 Network 1409 Missed 222 Current 0 (86% match, 0% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 4361 tasks of which 3855 didn't need to be rerun and all succeeded.
INFO: Failed to copy built images to tftp dir: /tftpboot
[INFO] Successfully built project

ビルド後ファイル確認

<PETA_PROJ_DIR>/images/linux下に各種必要ファイルが出来ていますね。

$ cd <PETA_PROJ_DIR>/images/linux
$ ls
bl31.bin  image.ub               rootfs.cpio.gz.u-boot  u-boot.bin       zynqmp-qemu-arm.dtb
bl31.elf  pmufw.elf              rootfs.ext4            u-boot-dtb.bin   zynqmp-qemu-multiarch-arm.dtb
boot.scr  pmu_rom_qemu_sha3.elf  rootfs.jffs2           u-boot-dtb.elf   zynqmp-qemu-multiarch-pmu.dtb
config    pxelinux.cfg           rootfs.manifest        u-boot.elf
Image     rootfs.cpio            rootfs.tar.gz          vmlinux
Image.gz  rootfs.cpio.gz         system.dtb             zynqmp_fsbl.elf

system.dtbを逆変換してデバイスツリーがどうなっているか覗けます。 先程編集した、/system-user.dtsiの内容も反映されているはずです。

$ cd <PETA_PROJ_DIR>/images/linux
$ dtc -I dtb -O dts system.dtb -o a.dts
$ vi a.dts

QEMU

Zynq UltraScale+のCoretex-A53用にビルドしたKernelやU-BOOTが正常に動作するか、x86系のuBuntu PC上でPetaLinuxに組み込まれているQEMUを使って実行してデバッグすることが出来るようです (<PETA_PROJ_DIR>で実行します。) QEMUはスキップしても構いません。

  • System Configurationで『EXT4(SD/eMMC/SATA/USB)』を選択すると、『petalinux-boot –qemu –kernel』は『EXT4でない』となり、QEMU出来ませんでした。 初期値のままだとQEMUできました。 以下は、『EXT4(SD/eMMC/SATA/USB)』を選択せずにビルドしたファイルで実行した結果です。
  • 『petalinux-boot –qemu –u-boot』は『EXT4(SD/eMMC/SATA/USB)』でも動作しました。
  • 初期のユーザー名は『petalinux』です。
  • パスワードは、最初にログインした時に設定するようメッセージがでます。 私は、パスワードも『petalinux』にしました。
  • 因みに、petalinux-config -c rootfsで『root:root』となっていますが、2021からPetaLinuxでは『root』ログインは禁止されたようです。
  • 『root』ログインするには、PAMプロファイルに『auth sufficient pam_rootok.so』と『account sufficient pam_rootok.so』が必要のようですが、やりかががわかりません。(/etc/pam.d/other(debian), /etc/pam.d/rstudio(RedHat/CentOS))
$ petalinux-boot --qemu --kernel

ultra96petaproject login: petalinux
You are required to change your password immediately (administrator enforced).
New password: 
Retype new password: 
[  317.438866] audit: type=1006 audit(1679294753.287:2): pid=504 uid=0 old-auid=4294967295 auid=1000 tty=(none) old-ses=4294967295 ses=1 res=1
[  317.440310] audit: type=1300 audit(1679294753.287:2): arch=c00000b7 syscall=64 success=yes exit=4 a0=8 a1=ffffc115b9f0 a2=4 a3=ffffbc7026b0 items=0 ppid=1 pid=504 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=1 comm="(systemd)" exe="/lib/systemd/systemd" key=(null)
[  317.444096] audit: type=1327 audit(1679294753.287:2): proctitle="(systemd)"
ultra96petaproject:~$
  • MicroBlaze
    • <PETA_PROJ_DIR>/images/linux/image.elfをブート(Kernelイメージ)
  • Zynq-7000
    • <PETA_PROJ_DIR>/images/linux/zImageをブート(Kernelイメージ)
  • Zynq UltraScale+
    • <PETA_PROJ_DIR>/images/linux/Imageをロードして(Kernelイメージ)
    • <PETA_PROJ_DIR>/images/linux/bl31.elfをブートして(TF-Aイメージ)
    • <PETA_PROJ_DIR>/images/linux/Imageをブートして
    • PMU Firmwareをバックグラウンドで走らせる
  • Versal ACAP
    • <PETA_PROJ_DIR>/images/linux/Imageをロードして(Kernelイメージ)
    • <PETA_PROJ_DIR>/images/linux/bl31.elfをブートして(TF-Aイメージ)
    • <PETA_PROJ_DIR>/images/linux/Imageをブートして
    • PLMとPMU Firmwareをバックグラウンドで走らせる

カスタムU-BOOTやカスタムKernelやdtb設定

U-BOOT

$ petalinux-boot --qemu --u-boot

QEMU終了方法

$ Ctrl+A, X   // <---終了方法

SDK(Sysroot)ビルド

  • 上記がビルドできたら、Target(この場合Ultra96V2)用のLinuxアプリやKernelモジュールを開発するためにはsysrootが必要なのでビルドします。
  • Vitisは、vaddに接続するため、Kernelモジュールやアプリも作るので、SDKのビルドは必ず必要です。
  • 上記同様、プロジェクトディレクトリ(<PETA_PROJ_DIR>)で実行します。
  • 数時間必要です。  私の場合、友人と飲みに行く前に実行して返ってきたらビルド出来ていました。
  • 再度ビルドしたら130分かかっていました。
  • 以下コマンドでビルド開始。
$ petalinux-build --sdk

これもCPU稼働はべったり100%に貼り付いています。 しかhし8GBしか無いメモリでもまだ余裕があったので、Chromeも開きっぱなしでも大丈夫でした。(Vitisはメモリ食うので、他のアプリを終了して実行しました。)

新しいPCです。 見事に100%に張り付いていますね。 これはネットアクセスが落ち着いていろいろコンパイルしている時です。クロックはPコア6個は4.5GHz(最高は4.77GHz)で、Eコア8個は3.5GHzになってました。 温度は一番高いところで62℃でクロックは落ちませんでした。 19分でした。 タスク1つでコンパイルする時間が6分くらいあったので、LANにしても後1~2分くらいしか短縮できない感じがします。 2回目以降はダウンロードがないのと、既にある生成されたファイルを使うようで8分くらいでした。

sdk.sh実行

  • <PETA_PROJ_DIR>/imges/linuxに移動して
  • 生成された、『./sdk.sh』でsdk.shを実行します
  • 何処にインストールするのか聞いてくるので、『../../』とすると<PETA_PROJ_DIR>/sysrootsにインストールされました。(『../../』で2つ上のディレクトリに移動してます。)
  • 5分くらいかかりました(新しいPCでは1分弱)
  • 作り直す時は、『If you continue, existing files will be overwritten! Proceed [y/N]? 』と出てくるので『y
$ cd ~/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/
$ ./sdk.sh
PetaLinux SDK installer version 2023.1
======================================
Enter target directory for SDK (default: /opt/petalinux/20232.1): ../../
You are about to install the SDK to "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/". Proceed [Y/n]? y
Extracting SDK.................................................................................................................................................................................done
Setting it up...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/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/environment-setup-cortexa72-cortexa53-xilinx-linux

その他

SDKを使う時は、シェルに入ったら毎回以下を実行する必要があるようです。 今回は以下の実行は必要ありません。 SDKはVitisのプラットフォーム作成時に必要なので、./sdk.shの実行までは必要です。

$ source /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/environment-setup-cortexa72-cortexa53-xilinx-linux

//または、『source』代わりに『.』
$ . /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/environment-setup-cortexa72-cortexa53-xilinx-linux

LinuxだけをUltra96V2で走らせてみる

まずここまでできたら、ビルドしたKernelやブートローダーやルートファイルシステムが動作するか、microSDカードを使ってUltra96V2でLinuxを起動させてみましょう。

microSD書込

GParted(GNOME Partition Editor)で書き込みます。(一番簡単なので) uBuntuには入っていないので、GPartedがまだインストールされていなければ、uBuntuのソフトウェアセンタでインストールして下さい。

  1. microSDをuBuntu PCのSDスロットに差し込みます(SDアダプタ必要)。 microSDは8GB以上がいいと思います。
  2. そして、GPartedを起動します
  1. (重要)起動したら、まず赤線枠の部分のデバイスリスト選択でmicroSDカードが選ばれているか、容量やデバイス名を必ず確認します。 $ cdPCにもよりますが、大体SDカードは/dev/mmcblkとなってることが多いです。 これを間違えると、PCの中身をすべて消してします。 もしデバイスの選択にmicroSDが見当たらない場合は、メニューから『GParted』〜『デバイスを更新』を実行してみて下さい。

これから、パーティションを2個作ります

  • 第一パーティション — fat32ファイルシステムフォーマット、BOOTbootフラグ付き
  • 第二パーティション — ext4ファイルシステムフォーマット、ROOTFS
  1. 作成する前に既存のパーティションを削除します。  /dev/mmcblk1p1fat32のオレンジの部分で右クリックして削除します。
  1. 削除』したら『未割り当て』となるので『未割り当て』上で右クリックして『新規』を選択。
  2. 新規パーティションの作成』画面が開くので、以下のように設定して『追加』を押す。
    • 新しいサイズ:『2048
    • 作成:『基本パーティション』(Primary Partition)
    • ファイルシステム:『fat32
    • ラベル:『BOOT

  1. 新規パーティション#1』が予約されました。(画面下に『2件の操作を保留中』と表示されています。 最後に全ての保留を実行します。)
  2. オレンジ色の『未割り当て』上で右クリックして『新規』を選択して、2つめのパーティションを作成します。
  1. 新規パーティションの作成』画面が開くので、以下のように設定して『追加』を押す。
    • 新しいサイズ:何も変更しない
    • 作成:『基本パーティション』(Primary Partition)
    • ファイルシステム:『etx4
    • ラベル:『ROOTFS
  1. 以下の用に『BOOT』と『ROOTFS』の新規パーティションが2つ表示されます。 しかし、これらは実際にはまだ『保留中』で出来ていないので、メニューの『編集』〜『保留中の全ての操作を適用する』を選ぶ。 そして『適用』をクリックする。
  1. BOOT』パーティションの上で右クリックして『フラグを編集』を選び『boot』にチェックをいれて閉じる。

0件の操作を保留中』となっていて、以下のようになっていれば成功です。 GPartedを終了します。

  • 後でファイルをコピーするので、私はmicorSDカードをスロットから抜いて、再度スロットに挿すとuBuntuが自動的にマウントしてくれました。 マウントされたら、uBuntuの左のメニューに『BOOT』と『ROOTFS』の2つのSDカードのアイコンが表示されGUIでファイルコピーができるので、私はFile Explorerでコピーしました。 (後で説明します。)
  • 自動でマウントされなかったら、マウントしなければなりません。 microSDの『BOOT』は、すぐ上の図の『パーティション』と記載された部分、私の場合は『/dev/mmcblk1p1』と表示されています。『/mnt』ディレクトリに新しいディレクトリを作ってからマウントします。 私の場合は、『/media/ichiri/』の下に予め『BOOT』と『ROOTFS』ディレクトリをつくっています。『sudo mkdir -p /media/ichiri/BOOT 』として、『sudo mount /dev/mmcblk1p1 /media/ichiri/BOOT』とすると、/media/ichiri/BOOTにアクセス出来るようになります。 microSDを壊さない様に、抜く前にアンマウントすることを忘れないようにして下さい。 『ROOTFS』もマウントする必要があります。 
  • 『BOOT』の所有者はichiriですが、『ROOTFS』は何故かrootになっているので、後にファイルをコピーしやすいように『sudo chown ichiri:ichiri /medhia/ichiri/ROOTFS/』を実行して所有者をichiriにしておきます。

BOOT.BINを生成

Vitisは独自にBOOT.BINを生成して、そのBOOT.BINを使用しなくてはなりませんが、ここではPetaLinuxが正常に動作するかどうかを確認するため、BOOT.BINを生成します。

  • <PETA_PROJ_DIR>/images/linuxに移動して、
  • 以下の様に『petalinux-package …』を実行
  • design_ultra96v2_wrapper.bit』以外は、カレントディレクトリにあるので、ファイル名だけ設定
  • <PETA_PROJ_DIR>/images/linuxに『BOOT.BIN』が生成されます。
  • 普通のARMなどは、u-boot-spl.bin、u-boot.img, dtb を起動時に個別にロードしますが、Zynq SoCは、BOOT.BINにそれら以外にもビットストリーム(FPGAコンフィギュレーション)等も含まれています。
コピー用
petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga ../../../project_3.runs/impl_1/design_ultra96v2_wrapper.bit --force
実行例
$ cd <PETA_PROJ_DIR>/images/linux
$ source /tools/Xilinx/PetaLinux/settings.sh
$ petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga ../../../project_3.runs/impl_1/design_ultra96v2_wrapper.bit --force

[INFO] Sourcing buildtools
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/zynqmp_fsbl.elf"
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/pmufw.elf"
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/project_3.runs/impl_1/design_ultra96v2_wrapper.bit"
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/bl31.elf"
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/system.dtb"
INFO: File in BOOT BIN: "/home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/images/linux/u-boot.elf"
INFO: Generating zynqmp binary package BOOT.BIN...


****** Bootgen v2023.1
  **** Build date : Apr  7 2023-10:18:04
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
    ** Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.


[INFO]   : Bootimage generated successfully

INFO: Binary is ready.
WARNING: Unable to access the TFTPBOOT folder /tftpboot!!!
WARNING: Skip file copy to TFTPBOOT folder!!!

『Unable to access the TFTPBOOT folder /tftpboot!!!』の警告は無視して進みます。 多分、ルートにtftpbootディレクトリをichiri:ichiriで作ったらこの警告は表示されなくなると思います。でも今TFTPでのブートは使わないので今度にしておきます。

  1. microSDの『/BOOT/』にファイルをコピーします。
  2. sudo tar -zxvf rootfs.tar.gz -C /media/ichiri/ROOTFS』でルートFSを解凍して、microSDの第二パーティションの『ROOTFS』に入れる。
$ sudo mkdir -p /media/ichiri/BOOT
$ sudo mkdir -p /media/ichiri/ROOTFS
$ sudo chown ichiri:ichiri /media/ichiri/BOOT
$ sudo mount /dev/mmcblk1p1 /media/ichiri/BOOT
$ sudo mount /dev/mmcblk1p1 /media/ichiri/ROOTFS
$ cd <PETA_PROJ_DIR>/images/linux
$ cp BOOT.BIN boot.scr image.ub /media/ichiri/BOOT
$ sudo tar -zxvf rootfs.tar.gz -C /media/ichiri/ROOTFS
$ sync
$ umount /media/ichiri/BOOT
$ umount /media/ichiri/ROOTFS
  • microSDの『BOOT』と『ROOTFS』をアンマウントする。 コマンドラインの場合は両方アンマウントする必要があります。 私は、uBuntuの左のメニューの『BOOT』を右クリックして『Eject』とすると、『BOOT』と『ROOTFS』の両方をアンマウントしてくれます。

Ultra96V2起動

  • microSDをuBuntu PCから抜き、Ultra96V2に装着する。
  • minicomを立ち上げておく。
  • Ultra96V2に電源を入れて『SW4』を押す
  • minicomにbl31メッセ-ジが表示され、u-bootメッセージが表示され、Kernelメッセージが表示され、ログインを聞いてきます。 *Bluetoothが接続されリトライしているので、login表示の後にもKernelメッセージがでていますが、文字が切れても気にせず半角で『petalinux』と打てば問題なくログインできます。 パスワードも同じです。
  • ログイン名は『petalinux』です。
  • パスワードを聞いてくるので、私は『petalinux』にしましたが、短いほうが良かったです。
  • *2021より、rootログインは強制禁止されました。

次は、いよいよVitisです。

おしまい

その他

メモ用です。 知識が付いてきたら追々整理していきます。

参考

PetaLinux ツール資料リファレンス ガイド UG1144 (v2021.1)

PetaLinux Tools Documentation: Reference Guide (UG1144) 2023.5-16

Ultra96用Vitisプラットフォームの作り方(BASE編)

PetaLinux コマンド 抜粋

PetaLinux commands UG1144 2022-10-19

$ petalinux-                // <---一覧表示
petalinux-create
petalinux-config
petalinux-config -c kernel   //<--10分以上かかった
petalinux-config -c rootfs   //<--1分かからない
petalinux-config -c u-boot
petalinux-config -c busybox  //<--表示に3分ほどかかった。 終了にも1分かかった。
petalinux-build
petalinux-build  --sdk         //<---sysroot生成
petalinux-build -x mrproper    //<--ビルドしたプロジェクト全体をクリーンアップ
petalinux-boot
petalinux-boot --jtag
petalinux-boot --qemu --u-boot //<--QEMUで実行出来る
petalinux-boot --qemu --kernel //<--QEMUで実行出来る
petalinux-package
petalinux-package --sysroot -s 
petalinux-package --wic  // BOOT.BINが必要。 images/linux ディレクトリで実行。
petalinux-util
petalinux-upgrade
petalinux-devtool

$ petalinux-build -c rootfs -x distclean  // <--もしかしたらこれでmenuconfigの初期化ができるのかな。
$ petalinux-config -c rootfs   // <--- これでrootfsの設定が出来る。
// <PETA_PROG_DIR>/build/misc/rootfs_config/Kconfig
$ petalinux-config -c kernel  // <--- これでKernelの設定が出来る。 5分くらいかかった。
                     // menuconfigが終わった後も処理がある。
  • 別ディレクトリから実行する際は、-p <PETA_PROJ_DIR> を指定して実行。
  • -h ヘルプ
  • -v 詳細表示
petalinux-build
使い方
  petalinux-build [options]

オプション:
  -h, --help                         ヘルプ
  -p, --project <PROJECT>            path to PetaLinux SDK project.
                                     Default is working project.
  -c, --component <COMPONENT>        Specify the component
                                     指定したコンポーネントと依存関係をビルドする
                                     E.g. -c rootfs
                                     E.g. -c myapp
  -x, --execute <tasks of bitbake>   Specify a bitbake task of the component
				     To know the list tasks for a component:
				     E.g. -x do_listtasks
  -f, --force			     Force run a specific task ignoring the stamps
				     Force run has to be for a component or its tasks
				     E.g. -c myapp -f
				     E.g. -c myapp -x compile -f
  -v, --verbose                      詳細のコンパイルメッセージ表示
  -s, --sdk                          Build SDK ==> do_populate_sdk
  -e, --esdk                         Build Minimal eSDK ==> do_populate_sdk_ext
  -a|--archiver                      This will create archiver.tar.gz in the images/linux folder
				     which contains sources and licenses.

EXAMPLES:

Build the project:
  $ petalinux-build
  the bootable images are in <PROJECT>/images/linux/.

Build project with archiver:
  $ petalinux-build -a | --archiver

Build SDK :
  $ petalinux-build --sdk | -s
  the equivalent bitbake task is do_populate_sdk,
  built sdk is deployed at <PROJECT>/images/linux/sdk.sh

Build Minimal eSDK :
  $ petalinux-build --esdk | -e
  the equivalent bitbake task is do_populate_sdk_ext
  built esdk is deployed at <PROJECT>/images/linux/esdk.sh
  This can be imported to petalinux tool with user source changes

Build SDK with archiver:
  $ petalinux-build --sdk --archiver

Build kernel only:
  $ petalinux-build -c kernel

Compile kernel forcefully:
  $ petalinux-build -c kernel -x compile -f

Deploy kernel forcefully:
  $ petalinux-build -c kernel -x deploy -f

Build kernel and update the bootable images:
  $ petalinux-build -c kernel
  $ petalinux-build -x package

Build rootfs only:
  $ petalinux-build -c rootfs

Build myapp of rootfs only:
  $ petalinux-build -c myapp

List all rootfs sub-components:
  $ petalinux-build -c rootfs -h

Clean up u-boot and build again:
  $ petalinux-build -c u-boot -x distclean
  ## above command will remove tmp files and sstate cache of u-boot.
  $ petalinux-build -c u-boot

Clean up the project build and build again:
  $ petalinux-build -x distclean    //<---これをしたらmenuconfigの設定はは消える。
  ## above command will remove tmp files and sstate cache files.
  $ petalinux-build

Clean up the project build and the generated bootable images:
  $ petalinux-build -x mrproper    //<---これをしてもmenuconfigは残っていた。 5分ほどかかる。
  ## above command will remove tmp files, <PROJECT>/images/,  <PROJECT>/build/ 		and <PROJECT>/components/plnx_workspace directories

boot.scr場所

Zynqはu-boot.imgでなくBOOT.binを使う?

Petalinux2019かPetalinux2020くらいからFAT32の領域にboot.bin, image.ub(Kernelイメージ?)に加えてboot.scr

dts場所

プロジェクトのデバイスツリー?

ダウンロードしなくても、avnet-ultra96-rev1.dtsiも入っている。 PetaLinuxを再ビルドした時に自動生成されたみたい。

./components/plnx_workspace/device-tree/device-tree/

-rw-r--r-- 1 ichiri ichiri   10929  3月 23 16:21 avnet-ultra96-rev1.dtsi
-rw-r--r-- 1 ichiri ichiri    9495  3月 23 16:22 device-tree.mss
-rw-r--r-- 1 ichiri ichiri 4788756  3月 23 16:21 hardware_description.xsa
drwxr-xr-x 3 ichiri ichiri    4096  3月 23 16:22 include
-rw-r--r-- 1 ichiri ichiri    2646  3月 23 16:22 pcw.dtsi
-rw-r--r-- 1 ichiri ichiri  950358  3月 23 16:21 psu_init.c
-rw-r--r-- 1 ichiri ichiri  950716  3月 23 16:21 psu_init_gpl.c
-rw-r--r-- 1 ichiri ichiri 1630154  3月 23 16:21 psu_init_gpl.h
-rw-r--r-- 1 ichiri ichiri 1629550  3月 23 16:21 psu_init.h
-rw-r--r-- 1 ichiri ichiri   50587  3月 23 16:21 psu_init.html
-rw-r--r-- 1 ichiri ichiri  859449  3月 23 16:21 psu_init.tcl
-rw-r--r-- 1 ichiri ichiri     245  3月 23 16:23 system-conf.dtsi
-rw-r--r-- 1 ichiri ichiri     531  3月 23 16:23 system-top.dts
-rw-r--r-- 1 ichiri ichiri    6303  3月 23 16:21 zynqmp-clk-ccf.dtsi
-rw-r--r-- 1 ichiri ichiri   31233  3月 23 16:21 zynqmp.dtsi

ユーザーが変更を加えられるデバイスツリー

./project-spec/meta-user/recipes-bsp/device-tree/files

-rw-r--r-- 1 ichiri ichiri  168  3月 15 16:43 pl-custom.dtsi
-rw-r--r-- 1 ichiri ichiri  146  3月 23 16:52 system-user.dtsi

一般的なデフォルトデバイスツリーライブラリ

Beagle Boneblackなどいろんな機種のdtsやdtsiがある。

./build/tmp/work/zynqmp_generic-xilinx-linux/u-boot-xlnx/v2021.01-xilinx-v2022.2+gitAUTOINC+b31476685d-r0/git/arch/arm/dts/

最終的に生成され使用されるデバイスツリー system.dtb

./images/linux

No currently running tasks エラー

このエラーにも3週間ほどめっちゃ苦しみました。 最終r的には、PetaLinuxを上書きインストールしたら解決しました。 

XRTをインストールする前に、最初一回目にKernelやU-Bootをビルドした時は、問題無くビルドされました。その後、Vitis用のプラットフォームを作るためにXRTをインストールしてpetalinux-buildやpetalinux-config -c kernelをしたら、このエラーメッセージが表示され止まってしまう現象があり、3週間ほど色々調べたのですが、なかなか解決しませんでした。 以下実施も解決せず。

  1. XRTをアンインストールしたけど解決せず。 
  2. mrpoperも解決しませんでした。
  3. distcleanも解決しませんでした。 distcleanやcleanすら、No currently running tasksで止まりました。
  4. apt upgrade で全てのパッケージをupgradeしましたが解決せず。

PetaLinuxはアンインストール出来ないので、ディレクトリ全て削除するらしいですがやっていません。   しかし、PetaLinuxを上書きで同じディレクトリに再インストールしたら解決したようです。 uBuntuのアップデートかXRTのインストールでPetaLinuxで使う何かが上書きされたのかもしれません。

NOTE: Started PRServer with DBfile: /home/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_peta_project/build/cache/prserv.sqlite3, Address: 127.0.0.1:33527, PID: 17085
Loading cache: 100% |                                                                        | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |#######################################################################| Time: 0:13:30
Parsing of 4461 .bb files complete (0 cached, 4461 parsed). 6497 targets, 579 skipped, 1 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
NOTE: Fetching uninative binary shim file:///home/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_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:29
Checking sstate mirror object availability: 100% |############################################| Time: 0:02:13
Sstate summary: Wanted 2418 Local 0 Network 2078 Missed 340 Current 0 (85% match, 0% complete)
NOTE: Executing Tasks
No currently running tasks (3 of 2418/0 of 6271)   0% |           

Upgrade glibcで解決すると書いてありましたが、解決しませんでした。 私の場合は2.31だったけどこのエラーが出た。

$ ldd --version
ldd (Ubuntu GLIBC 2.31-0ubuntu9.9) 2.31
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

$ sudo vi ./home/ichiri/ultra96/vivado/project_2_ultra96_xsa_tutorial/ultra96_peta_project2/components/yocto/layers/core/meta/conf/distro/include/yocto-uninative.inc

UNINATIVE_MAXGLIBCVERSION = "2.34"

このエラーの解決方法は他には、以下の3種類の原因の可能性があるらしいのですが、どう修正したらいいかわからなかった。 3.は実施しましたが解決しませんでした。

Making some search on google seems 3 possible reasons:

1. Config is broken – make sure you properly configured DISTRO and MACHINE names

2. conf/local.conf is broken – double check what you posted there

3. Try to remove the build folder and re-make all the config steps again and try to issue again the bitbake command.

デバイスツリー

Ultra96V2を立ち上げただけではWifiは動作しないので、以下のデバイスツリーに追加しないといけならしい。

<PROJECT_DIR>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

//ここの部分はWifi
&sdhci1 {
   bus-width= <0x4>;
   /* non-removeable; */
   /* mmc-pwrseq = <&sdio_pwrseq>; */
   max-frequency = <50000000>;
   /delete-property/cap-power-off-card; // This is not compatible with the WILC3000 and means the WILC will always be powered on
   status = "okay";
   #address-cells = <1>;
   #size-cells = <0>;
   wilc_sdio@1 {
      compatible = "microchip,wilc3000";
      reg = <0>;
      // interrupt-parent = <&gpio>; // Microchip driver DOES NOT use gpio irq any more!
      // interrupts = <76 2>; /* MIO76 WILC IRQ 1V8 */ // Microchip driver DOES NOT use gpio irq any more!
      // irq-gpios = <&gpio 76 0>; // Microchip driver DOES NOT use gpio irq any more!
      bus-width= <0x4>;
      status = "okay";
   };
   // Remove TI child node from U96 V1 DT
   /delete-node/wifi@2;
};

//microSDは起動時書込不可であれば、これで可能になる。
//書込不可だとルートファイルシステムにファイルを作れないが、system.dtbはすでにdisable-wpになっていたので以下は不要。
&sdhci0 {
    disable-wp;
};

This is not supported OS

  • 意図したわけではないのですが、uBuntu20.04.6だからか、このWarningがでます。
  • しかしuBuntu20.04.6で今のところ問題なくビルド出来ています。
  • サポートされているのは、20.04では.4までと記載されています。
ichiri@ichiri-VPCF128FJ:~/ultra96/vivado/project_3/ultra96_peta_proj3$ source /tools/Xilinx/PetaLinux/settings.sh
PetaLinux environment set to '/tools/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

wicimage作成

将来の参考

$ petalinux-package --wic --bootfiles "ramdisk.cpio.gz.u-boot boot.scr Image system.dtb" --outdir wicimage/

qspiboot.bif

qspiを使う時のbifファイルとsystem-user.dtsiの将来の参考

the_ROM_image:
{
    [bootloader, destination_cpu=a53-0] ./images/linux/zynqmp_fsbl.elf
    [destination_cpu=pmu] ./images/linux/pmufw.elf
    [destination_device=pl] ./images/linux/system.bit
    [destination_cpu=a53-0, exception_level=el-3, trustzone] ./images/linux/bl31.elf
    [destination_cpu=a53-0] ./images/linux/system.dtb
    [destination_cpu=a53-0, exception_level=el-2] ./images/linux/u-boot.elf
    [offset=0x01500000, destination_cpu=a53-0] ./images/linux/image.ub
    [offset=0x03E80000, destination_cpu=a53-0] ./images/linux/boot.scr
}

<PROJECT_DIR>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi に以下を追加。

/* QSPI */
&qspi {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";
    flash0: flash@0 {
        compatible = "jedec,spi-nor";
        spi-max-frequency = <40000000>;
        reg = <0x0>;
        #address-cells = <1>;
        #size-cells = <1>;
    };

2023.1 Fetcher failure ビルドエラー

PetaLinux2023.1でビルドすると<PETA_PROJ_DIR>/build/sstate-cacheディレクトリーで.zstが見つからない12個くらいのERRORが表示されて、トドメに『ERROR: Failed to build project.』となりました。 しかし、sstate-cacheを見ていくとこれらのファイルは全て存在していました。 sstate-cacheはビルド時間短縮する為にネット上のファイルをcacheとして取り込むので、もしかしたら取り込むタイミングと読み込むタイミングのズレ(バグ)でエラーになったのかなと思い、再度petalinux-buildしたら『[INFO] Successfully built project』となりました。 使うPCのスピードやスレッド数によってタイミングが違うので、こんな事が起こったのかな。

WARNING: python3-attrs-22.1.0-r0 do_populate_lic_setscene: Failed to fetch URL file://71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst;downloadfilename=71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst, attempting MIRRORS if available
ERROR: python3-attrs-22.1.0-r0 do_populate_lic_setscene: Fetcher failure: Unable to find file file://71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5WARNING: python3-attrs-22.1.0-r0 do_populate_lic_setscene: Failed to fetch URL file://71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst;downloadfilename=71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst, attempting MIRRORS if available
ERROR: python3-attrs-22.1.0-r0 do_populate_lic_setscene: Fetcher failure: Unable to find file file://71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst;downloadfilename=71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
WARNING: python3-attrs-22.1.0-r0 do_package_write_rpm_setscene: Failed to fetch URL file://23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst;downloadfilename=23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst, attempting MIRRORS if available
WARNING: m4-1.4.19-r0 do_packagedata_setscene: Failed to fetch URL file://86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo;downloadfilename=86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo, attempting MIRRORS if available
WARNING: liberror-perl-0.17029-r1 do_packagedata_setscene: Failed to fetch URL file://f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst;downloadfilename=f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst, attempting MIRRORS if available
ERROR: python3-attrs-22.1.0-r0 do_package_write_rpm_setscene: Fetcher failure: Unable to find file file://23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst;downloadfilename=23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
WARNING: python3-attrs-22.1.0-r0 do_populate_sysroot_setscene: Failed to fetch URL file://e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst;downloadfilename=e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst, attempting MIRRORS if available
ERROR: m4-1.4.19-r0 do_packagedata_setscene: Fetcher failure: Unable to find file file://86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo;downloadfilename=86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
ERROR: python3-attrs-22.1.0-r0 do_populate_sysroot_setscene: Fetcher failure: Unable to find file file://e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst;downloadfilename=e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
ERROR: liberror-perl-0.17029-r1 do_packagedata_setscene: Fetcher failure: Unable to find file file://f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst;downloadfilename=f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst;downloadfilename=71/d6/sstate:python3-attrs::22.1.0:r0::10:71d668b5a67a3f7e43fc23c9440ff4cc5a874f5a2e3c10e8205b06eccfd75fb1_populate_lic.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
WARNING: python3-attrs-22.1.0-r0 do_package_write_rpm_setscene: Failed to fetch URL file://23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst;downloadfilename=23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst, attempting MIRRORS if available
WARNING: m4-1.4.19-r0 do_packagedata_setscene: Failed to fetch URL file://86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo;downloadfilename=86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo, attempting MIRRORS if available
WARNING: liberror-perl-0.17029-r1 do_packagedata_setscene: Failed to fetch URL file://f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst;downloadfilename=f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst, attempting MIRRORS if available
ERROR: python3-attrs-22.1.0-r0 do_package_write_rpm_setscene: Fetcher failure: Unable to find file file://23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst;downloadfilename=23/07/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:2307a1799edcebdee3ae35cf6f95fb9cccffc13eaff5bdc06e028f25d2f6abae_package_write_rpm.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
WARNING: python3-attrs-22.1.0-r0 do_populate_sysroot_setscene: Failed to fetch URL file://e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst;downloadfilename=e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst, attempting MIRRORS if available
ERROR: m4-1.4.19-r0 do_packagedata_setscene: Fetcher failure: Unable to find file file://86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo;downloadfilename=86/05/sstate:m4:cortexa72-cortexa53-xilinx-linux:1.4.19:r0:cortexa72-cortexa53:10:8605e3861a68ec19dec49e09c1329e54e621e9d582773bd3f40a19fec616d8d2_packagedata.tar.zst.siginfo anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
ERROR: python3-attrs-22.1.0-r0 do_populate_sysroot_setscene: Fetcher failure: Unable to find file file://e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst;downloadfilename=e7/5a/sstate:python3-attrs:cortexa72-cortexa53-xilinx-linux:22.1.0:r0:cortexa72-cortexa53:10:e75a4b0468e89eeccf9a4caa558d0dc5e2bbc2b6f5cff716b08552e8444bdea6_populate_sysroot.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
ERROR: liberror-perl-0.17029-r1 do_packagedata_setscene: Fetcher failure: Unable to find file file://f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst;downloadfilename=f3/2f/sstate:liberror-perl:cortexa72-cortexa53-xilinx-linux:0.17029:r1:cortexa72-cortexa53:10:f32f4fcbe241220a4f82f3dcc964731216abbbd3914316014424d84e3fe29857_packagedata.tar.zst anywhere. The paths that were searched were:
    /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/sstate-cache
                   :
                   :
                   :
                   :
Summary: There were 31 WARNING messages.
Summary: There were 16 ERROR messages, returning a non-zero exit code.
ERROR: Failed to build project. Check the /home/ichiri/ultra96/vivado/project_3/ultra96_peta_proj3/build/build.log file for more details...

新しいPC

14コアで20スレッドがあるので、petalinux-build時は20スレッドを使って実行しています。 一回目のビルドは25分、2回目は2分ほどでした。(古いPCでは1回目が90分、2回目でも20~30分かかってました) 1回目はファイルをダウンロードするのに時間がかかっているようです。 今はWifiのアンテナの位置が悪く40Mbpsしか出ていないので、2.5Gbps LANにすると25分は10分以下に短縮できるのではと思っています。

  • i5 13500 14 core, 20 thread — ゲーム用でないので、ビルドには13600Kや13700Kはマザーボードや水冷含め高すぎるので、これでちょうどいいと思います。 今の所めっちゃ静かです。
  • H670
  • DDR4-3600 64GB
  • NVMe Gen4x4 7400MB/s, 6500MB/s 2TB
  • 650W 電源ユニット
  • AK400 CPU用クーラー

microSDに入れる準備 (.bifファイル)不要

  • ここは不要なので飛ばしてください。 Vitisでは『Generate bif』でbifを生成します。 特に2023.1では生成されたbifの記述が変更されています。
  • 参考にしていたサイトではbifの作成が必要となっていましたが、2023.1では以下の作成したbifではビルドできませんでした。 しかし記述例として残しておきます。
  • <PETA_PROJ_DIR>/images/linux下に、Vitisでプロジェクトビルド時用に、linux.bifファイルを作ります。 Vitisは、この.bifファイルを元にBOOT.BINを生成します。
  • linx.bifには、以下を記述します。<PETA_PROJ_DIR>は、置き換えて下さい。
  • 私もよく分っていませんが、.bifファイルでブートに呼び出す順番を記載しておくそうです。
  • .bit(VivadoでGenerate Streamで生成下ファイル)を探して記述する。 相対パスでも絶対パスでもOKです。 私は、Vivadoプロジェクトディレクトリで『sudo find -name *.bit』を実行して見つけました。 Vivadoの『Export Project』で生成した『design_ultra96v2_wrapper.xsa』と同じファイル名が付いています。
  • 見つけた『~/ultra96/vivado/project_3/project_3.runs/impl_1/design_ultra96v2_wrapper.bit』を、相対指定で『../../../project_3.runs/impl_1/design_ultra96v2wrapper.bit』で記述しました。
./images/linuxlinux.bif
the_ROM_image:
{
    [bootloader, destination_cpu=a53-0] ./zynqmp_fsbl.elf
    [destination_cpu=pmu] ./pmufw.elf
    [destination_device=pl] ../../../project_3.runs/impl_1/design_ultra96v2_wrapper.bit
    [destination_cpu=a53-0, exception_level=el-3, trustzone] ./bl31.elf
    [destination_cpu=a53-0] ./system.dtb
    [destination_cpu=a53-0, exception_level=el-2] ./u-boot.elf
}

2023.1 Generated bif

<>は相対アドレスを示すみたい。 最初の行が追加されているのと、記述が異なる。

/* linux */
the_ROM_image:
{
  [fsbl_config] a53_x64
  [bootloader] <fsbl.elf>
  [pmufw_image] <pmufw.elf>
  [destination_device=pl] <bitstream>
  [destination_cpu=a53-0, exception_level=el-3, trustzone] <atf,bl31.elf>
  [load=0x00100000] <dtb,system.dtb>
  [destination_cpu=a53-0, exception_level=el-2] <uboot,u-boot.elf>
}

コメント