cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PetalinuxツールでのPatchファイルの使用方法、作成方法

katsuki
Xilinx Employee
Xilinx Employee
5 0 700

1.はじめに

本ブログでは、

  • Linuxの git diff コマンドで生成されたPatchファイルを、Petalinuxツールで使用する事例
  • Petalinuxツールを使ったPatchファイルの作成事例

を紹介します。ツールバージョンは2020.2、評価ボードVCK190-ES1を使用します。

 

2.Petalinuxツールを使った、Patchファイルの使用事例

2.1 Patchファイル

Linuxの git diff コマンドで生成されたPatchファイルの例を以下に示します。

このPatchファイルは、PLM Firmwareの2つのファイルに対して、以下の修正を行います。

  • lib/sw_apps/versal_plm/src/xplm_hooks.c に1行追加
  • lib/sw_services/xilplmi/src/xplmi.c の1行を修正

尚、このPatchファイルのフォーマットは、Linuxで一般的に使用されているものです。

 

 

 

$ cat 0001-Signed-off-by-XXXX.patch
From: ...
Date: ...
Subject: [PATCH] Signed-off-by: ...

Added DEBUG print
---
 lib/sw_apps/versal_plm/src/xplm_hooks.c | 2 +-
 lib/sw_services/xilplmi/src/xplmi.c     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/sw_apps/versal_plm/src/xplm_hooks.c b/lib/sw_apps/versal_plm/src/xplm_hooks.c
index bce5bbbed9..71f945cb1e 100644
--- a/lib/sw_apps/versal_plm/src/xplm_hooks.c
+++ b/lib/sw_apps/versal_plm/src/xplm_hooks.c
@@ -89,6 +89,6 @@ int XPlm_HookAfterPlmCdo(void *Arg)
 int XPlm_HookAfterBootPdi(void *Arg)
 {
        (void)Arg;
-
+    XPlmi_Printf(DEBUG_GENERAL, "*********** XPlm_HookAfterBootPdi **********\n\r");
        return XST_SUCCESS;
 }
diff --git a/lib/sw_services/xilplmi/src/xplmi.c b/lib/sw_services/xilplmi/src/xplmi.c
index 22da7d0c53..bfff41cfd4 100644
--- a/lib/sw_services/xilplmi/src/xplmi.c
+++ b/lib/sw_services/xilplmi/src/xplmi.c
@@ -163,7 +163,7 @@ void XPlmi_PrintPlmBanner(void)
        if ((u8)FALSE == IsBannerPrinted) {
                /* Print the PLM Banner */
                XPlmi_Printf(DEBUG_PRINT_ALWAYS,
-                       "****************************************\n\r");
+                       "****************** DEBUG ***************\n\r");
                XPlmi_Printf(DEBUG_PRINT_ALWAYS,
                        "Xilinx Versal Platform Loader and Manager \n\r");
                XPlmi_Printf(DEBUG_PRINT_ALWAYS,

 

 

 

2.2 Petalinuxツールでの使用例

VCK190-ES1のBSPを使い、Petalinuxプロジェクトを作成します。

 

 

 

$ petalinux-create -t project -s xilinx-vck190-es1-v2020.2-final.bsp -n <plnx-proj-dir>
$ cd <plnx-proj-dir>
$ petalinux-config --silentconfig

 

 

 

Patchファイルを、下記ディレクトリに置きます。ディレクトリが存在しない場合は、新規に作成します。

 

 

 

$ cp 0001-Signed-off-by-XXXX.patch project-spec/meta-user/recipes-bsp/plm/plm/

 

 

 

下記の、bbappendファイルを作成します。

 

 

 

$ cat project-spec/meta-user/recipes-bsp/plm/plm_%.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

SRC_URI += "file://0001-Signed-off-by-XXXX.patch"

 

 

 

もし、Patchファイルが複数の場合は、下記のように、ファイル名の番号の順に列記します。

 

 

 

SRC_URI += "file://0001-Signed-off-by-XXXX.patch file://0002-Signed-off-by-YYYY.patch"

 

 

 

ビルドを実行すると、上記Patchが適用されたイメージが作成されます。

 

 

 

$ petalinux-build

 

 

 

2.3 VitisインストールディレクトリのファイルにPatchを適用する事例

Patchを適用するファイルは、元のファイルをバックアップしておくことをお勧めします。

Patchファイルに記述されている、修正対象のファイルのPathを確認します。

下記の場合、libディレクトリが直下に存在するディレクトリから、該当ファイルを参照していることがわかります。

 

 

 

--- a/lib/sw_services/xilplmi/src/xplmi.c
+++ b/lib/sw_services/xilplmi/src/xplmi.c

 

 

 

注意:上記の"xilplmi"を、"xilplmi_v1_1"にように、インストールディレクトリのパス名に変更して下さい

libディレクトリが直下に存在するディレクトリに移動します。

 

 

 

$ cd <vitis-install-dir>/2020.2/data/embeddedsw
$ ls
doc lib LICENSES license.txt ThirdParty XilinxProcessorIPLib

 

 

 

Linuxのpatchコマンドを使って、Patchを適用します。Patchファイルが複数の場合は、ファイル名の番号の順で実行します。

 

 

 

$ patch -p1 < 0001-Signed-off-by-XXXX.patch
$ patch -p1 < 0002-Signed-off-by-YYYY.patch

 

 

 

該当ファイルが修正されていることを確認します。

 

3. Petalinuxツールを使った、Patchファイルの作成例

下記ユーザーガイドを参照します

UG1144 PetaLinux Tools Reference Guide

  • Chapter 11. Yocto Features - Creating and Adding Patches For Software Components within a PetaLinux Project
  • Appendix J. PetaLinux Commands - petalinux-devtool

petalinux-devtoolコマンドを使用して、PLM Firmwareのソースコードをローカルに取り込みます。

 

 

 

$ petalinux-create -t project -s xilinx-vck190-es1-v2020.2-final.bsp -n <plnx-proj-dir>
$ cd <plnx-proj-dir>
$ petalinux-config --silentconfig

$ petalinux-devtool modify plm

 

 

 

ローカルに取り込まれたファイルを修正します。ファイルxplm_hook.cの92行目を追加しました。

 

 

 

// <plnx-proj-dir>/components/yocto/workspace/sources/plm/lib/sw_apps/versal_plm/src/xplm_hooks.c
89 int XPlm_HookAfterBootPdi(void *Arg)
90 {
91     (void)Arg;
92     XPlmi_Printf(DEBUG_GENERAL, "*********** XPlm_HookAfterBootPdi **********\n\r"); // Added
93     return XST_SUCCESS;
94 }

 

 

 

ファイルxplmi.cの166行目を修正しました。

 

 

 

// <plnx-proj-dir>/components/yocto/workspace/sources/plm/lib/sw_services/xilplmi/src/xplmi.c
154 void XPlmi_PrintPlmBanner(void)
155 {
156     u32 Version;
157     u32 PsVersion;
158     u32 PmcVersion;
159     static u8 IsBannerPrinted = (u8)FALSE;
160     u32 BootMode;
161     u32 MultiBoot;
162 
163     if ((u8)FALSE == IsBannerPrinted) {
164         /* Print the PLM Banner */
165         XPlmi_Printf(DEBUG_PRINT_ALWAYS,
166             "****************** DEBUG ***************\n\r"); // Modified

 

 

 

ビルド、ブートイメージを作成し、動作確認を行います。

 

 

 

$ petalinux-build
$ petalinux-package --boot --plm --psmfw --dtb --u-boot --atf --force

 

 

 

前記の修正内容が反映されていることを確認します。

 

 

 

[42028.081347]****************** DEBUG ***************
[42033.628349]Xilinx Versal Platform Loader and Manager 
[42038.761613]Release 2020.2   Feb 19 2021  -  05:31:04
[42043.857932]Platform Version: v0.0 PMC: v0.0, PS: v0.0
[42049.667092]BOOTMODE: 5, MULTIBOOT: 0x0
[42053.940421]****************************************
[42059.908267] 150.457696 ms for PrtnNum: 1, Size: 2432 Bytes
[42066.170485]-------Loading Prtn No: 0x2
[42083.918114] 13.587441 ms for PrtnNum: 2, Size: 48 Bytes
[42090.258630]-------Loading Prtn No: 0x3
[42227.128593] 132.501038 ms for PrtnNum: 3, Size: 55952 Bytes
[42233.331576]-------Loading Prtn No: 0x4
[42253.206465] 15.851658 ms for PrtnNum: 4, Size: 6032 Bytes
[42258.318791]-------Loading Prtn No: 0x5
[42262.938284] 0.750200 ms for PrtnNum: 5, Size: 80 Bytes
PSM Firmware version: 2020.2 [Build: Feb 19 2021 05:31:22 ] 
[42361.932085]+++++++Loading Image No: 0x2, Name: pl_cfi, Id: 0x18700000
[42371.357985]-------Loading Prtn No: 0x6
[63592.215001] 21216.358634 ms for PrtnNum: 6, Size: 8699008 Bytes
[63600.028566]-------Loading Prtn No: 0x7
[65910.722557] 2306.043054 ms for PrtnNum: 7, Size: 545168 Bytes
[65917.092556]+++++++Loading Image No: 0x3, Name: aie_subsys, Id: 0x0421C005
[65924.595103]-------Loading Prtn No: 0x8
[65933.932014] 5.076581 ms for PrtnNum: 8, Size: 352 Bytes
[65940.092444]+++++++Loading Image No: 0x4, Name: fpd, Id: 0x0420C003
[65946.846297]-------Loading Prtn No: 0x9
[66326.467989] 374.618191 ms for PrtnNum: 9, Size: 1152 Bytes
[66351.421413]+++++++Loading Image No: 0x5, Name: apu_subsyste, Id: 0x1C000000
[66360.154079]-------Loading Prtn No: 0xA
[66467.769744] 103.532789 ms for PrtnNum: 10, Size: 43296 Bytes
[66475.184155]-------Loading Prtn No: 0xB
[66620.795484] 141.121977 ms for PrtnNum: 11, Size: 59360 Bytes
[66626.619197]-------Loading Prtn No: 0xC
[68779.435043] 2148.792883 ms for PrtnNum: 12, Size: 902528 Bytes
NOTICE:  ATF running on Xilinx Versal Silicon
WARNING: BL31: invalid exception level (3)
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v2.2(debug):xilinx_rebase_v2.2_2020.1-10-ge6eea88b1
NOTICE:  BL31: Built : 05:19:20, Feb 19 2021
INFO:    GICv3 without legacy support detected. ARM GICv3 driver initialized in EL3
INFO:    BL31: Initializing runtime services
WARNING: BL31: cortex_a72: CPU workaround for 859971 was missing!
INFO:    BL31: cortex_a72: CPU workaround for cve_2018_3639 was applied
INFO:    BL31: Preparing for EL3 exit to normal world
[INFO:    Entry point address = 06x8000000
INFO:    SPSR = 0x83c9
854.609613]***********Boot PDI Load: Done*************
[68860.474970]1266841852.821103 ms: ROM Time
[68865.139791]Total PLM Boot Time 
[68869.500663]*********** XPlm_HookAfterBootPdi **********


U-Boot 2020.01 (Feb 19 2021 - 05:30:54 +0000)

Model: Xilinx Versal vck190 Eval board revA (QSPI)
DRAM:  6 GiB
EL Level:       EL2

 

 

 

git addコマンド、git commitコマンドを実行し、修正内容を確定させます。

 

 

 

$ cd <plnx-proj-dir>/components/yocto/workspace/sources/plm
$ git add lib/sw_apps/versal_plm/src/xplm_hooks.c
$ git add lib/sw_services/xilplmi/src/xplmi.c
$ git commit -s

 

 

 

修正内容の履歴コメントの入力を求められますので、コメントを記入し、エディタを終了させます。

 

 

 

 1 
 2 
 3 Signed-off-by: ....
 4 
 5 # Please enter the commit message for your changes. Lines starting
 6 # with '#' will be ignored, and an empty message aborts the commit.
 7 #
 8 # Committer: ....
 9 #
10 # On branch devtool
11 # Changes to be committed:
12 #   modified:   lib/sw_apps/versal_plm/src/xplm_hooks.c
13 #   modified:   lib/sw_services/xilplmi/src/xplmi.c
14 #
15 Added DEBUG print

 

 

 

petalinux-devtoolを終了させます。

 

 

 

$ cd <plnx-proj-dir>
$ petalinux-devtool finish plm <plnx-proj-dir>/project-spec/meta-user

 

 

 

Patchファイル、bbappendファイルが作成されていることを、確認します。

作成されたPatchファイルは、前記2.のPatchファイルと同じです。

 

 

 

$ ls project-spec/meta-user/recipes-bsp/plm/plm/0001-Signed-off-by-XXXX.patch
$ ls project-spec/meta-user/recipes-bsp/plm/plm_%.bbappend

 

 

 

4.その他

petalinux-devtool modifyコマンドで指定するレシピ名は、petalinux-devtool searchコマンドで、探すことができます。

 

 

 

$ petalinux-devtool search kernel
...
core-image-kernel-dev  A small image just capable of allowing a device to boot.
kernel-devsrc         Linux kernel Development Source
kernel-module-hdmi    Xilinx HDMI Linux Kernel module
kernel-selftest       Kernel selftest for Linux
linux-xlnx            Linux kernel
packagegroup-meta-initramfs  Meta-initramfs packagegroups
packagegroup-meta-networking  Meta-networking packagegroups
packagegroup-meta-oe  Meta-oe ptest packagegroups
python3-ipykernel     Jupyter notebook
updatekernel          Install script to complete updating the kernel after doing a dnf install kernel

 

 

 

例えば、以下のレシピ名が指定可能です。

  • linux-xlnx : Kernel、Device Driver
  • device-tree : Device Tree
  • u-boot-xlnx : U-Boot
  • plm : PLM Firmware
  • psm-firmware : PSM Firmware
  • fsbl : fsbl

 

5.参照資料

Tags (2)