diff mbox series

[2/2] arm-bsp/uefi_capsule: Use json file to pass capsule config

Message ID 20230215104236.24484-3-gowtham.sureshkumar@arm.com
State New
Headers show
Series Update UEFI capsule generation to use json config file | expand

Commit Message

Gowtham Suresh Kumar Feb. 15, 2023, 10:42 a.m. UTC
From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>

This patch uses the json config file for UEFI capsule generation
as this is efficient and easily scalable to generate multiple
capsules.

Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
---
 .../recipes-bsp/images/corstone1000-image.bb  |  8 +++---
 ...rstone1000-image-capsule-update-image.json | 11 ++++++++
 meta-arm/classes/uefi_capsule.bbclass         | 27 ++++++++++++-------
 3 files changed, 32 insertions(+), 14 deletions(-)
 create mode 100644 meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json

Comments

Jose Quaresma Feb. 15, 2023, 12:23 p.m. UTC | #1
Hi Gowtham,

Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com> escreveu no dia quarta,
15/02/2023 à(s) 10:42:

> From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
>
> This patch uses the json config file for UEFI capsule generation
> as this is efficient and easily scalable to generate multiple
> capsules.
>
> Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
> ---
>  .../recipes-bsp/images/corstone1000-image.bb  |  8 +++---
>  ...rstone1000-image-capsule-update-image.json | 11 ++++++++
>  meta-arm/classes/uefi_capsule.bbclass         | 27 ++++++++++++-------
>  3 files changed, 32 insertions(+), 14 deletions(-)
>  create mode 100644
> meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
>
> diff --git a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> index b0a71bca..ce4df8a6 100644
> --- a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> +++ b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> @@ -13,11 +13,9 @@ PACKAGE_INSTALL = ""
>
>  IMAGE_FSTYPES += "wic wic.nopt uefi_capsule"
>
> -UEFI_FIRMWARE_BINARY = "corstone1000-image-${MACHINE}.wic.nopt"
> -UEFI_FIRMWARE_VERSION = "5"
> -UEFI_FIRMWARE_LSV = "0"
> -UEFI_FIRMWARE_GUID = "e2bb9c06-70e9-4b14-97a3-5a7913176e3f"
> -UEFI_FIRMWARE_UPDATE_INDEX = "0"
> +UEFI_FIRMWARE_BINARY = "${PN}-${MACHINE}.wic.nopt"
> +UEFI_CAPSULE_CONFIG = "${THISDIR}/files/${PN}-capsule-update-image.json"
> +CAPSULE_IMGTYPE = "wic.nopt"
>

Looks like this variable is not used anywhere.

Jose


>
>  do_sign_images() {
>      # Sign TF-A BL2
> diff --git
> a/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> new file mode 100644
> index 00000000..0f011ff7
> --- /dev/null
> +++
> b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> @@ -0,0 +1,11 @@
> +{
> +    "Payloads": [
> +        {
> +            "FwVersion": "5",
> +            "Guid": "e2bb9c06-70e9-4b14-97a3-5a7913176e3f",
> +            "LowestSupportedVersion": "1",
> +            "Payload": "$UEFI_FIRMWARE_BINARY",
> +            "UpdateImageIndex": "0"
> +        }
> +    ]
> +}
> diff --git a/meta-arm/classes/uefi_capsule.bbclass
> b/meta-arm/classes/uefi_capsule.bbclass
> index 0c3d3845..cf708412 100644
> --- a/meta-arm/classes/uefi_capsule.bbclass
> +++ b/meta-arm/classes/uefi_capsule.bbclass
> @@ -1,6 +1,7 @@
>  # This class generates UEFI capsules
>  # The current class supports generating a capsule with single firmware
> binary
>
> +DEPENDS += "gettext-native"
>  inherit python3native
>
>  IMAGE_TYPES += "uefi_capsule"
> @@ -19,14 +20,11 @@ CAPSULE_EXTENSION ?= "uefi.capsule"
>
>  # The following variables must be set to be able to generate a capsule
> update
>  UEFI_FIRMWARE_BINARY ?= ""
> -UEFI_FIRMWARE_VERSION ?= ""
> -UEFI_FIRMWARE_LSV ?= ""
> -UEFI_FIRMWARE_GUID ?= ""
> -UEFI_FIRMWARE_UPDATE_INDEX ?= ""
> +UEFI_CAPSULE_CONFIG ?= ""
>
>  # Check if the required variables are set
>  python() {
> -    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_FIRMWARE_VERSION",
> "UEFI_FIRMWARE_LSV", "UEFI_FIRMWARE_GUID", "UEFI_FIRMWARE_UPDATE_INDEX"]:
> +    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_CAPSULE_CONFIG"]:
>          if not d.getVar(var):
>              raise bb.parse.SkipRecipe(f"{var} not set")
>  }
> @@ -36,10 +34,21 @@ IMAGE_CMD:uefi_capsule(){
>      # Force the GenerateCapsule script to use python3
>      export PYTHON_COMMAND=${PYTHON}
>
> -
> ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule
> -e -o \
> -    ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION}
> --fw-version ${UEFI_FIRMWARE_VERSION} \
> -    --lsv ${UEFI_FIRMWARE_LSV} --guid ${UEFI_FIRMWARE_GUID} --verbose
> --update-image-index \
> -    ${UEFI_FIRMWARE_UPDATE_INDEX} --verbose
> ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}
> +    # Copy the firmware and the capsule config json to current directory
> +    if [ -e ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} ]; then
> +        cp ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} . ;
> +    fi
> +
> +    export UEFI_FIRMWARE_BINARY=${UEFI_FIRMWARE_BINARY}
> +    envsubst < ${UEFI_CAPSULE_CONFIG} >
> ./${MACHINE}-capsule-update-image.json
> +
> +
> ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule
> \
> +    -e -o ${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION} -j \
> +    ${MACHINE}-capsule-update-image.json
> +
> +    # Remove the firmware to avoid contamination of IMGDEPLOYDIR
> +    rm ${UEFI_FIRMWARE_BINARY}
> +
>  }
>
>  # The firmware binary should be created before generating the capsule
> --
> 2.17.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#4391):
> https://lists.yoctoproject.org/g/meta-arm/message/4391
> Mute This Topic: https://lists.yoctoproject.org/mt/96980035/5052612
> Group Owner: meta-arm+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/meta-arm/unsub [
> quaresma.jose@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Gowtham Suresh Kumar Feb. 15, 2023, 12:44 p.m. UTC | #2
Hello Jose,

The  CAPSULE_IMGTYPE is used in the uefi_capsule.bbclass as shown below.

IMAGE_TYPEDEP:uefi_capsule:append = "${CAPSULE_IMGTYPE}"

Best regards,
Gowtham Suresh Kumar
Jose Quaresma Feb. 15, 2023, 1:14 p.m. UTC | #3
Gowtham Suresh Kumar <Gowtham.SureshKumar@arm.com> escreveu no dia quarta,
15/02/2023 à(s) 12:44:

> Hello Jose,
>
> The  CAPSULE_IMGTYPE is used in the uefi_capsule.bbclass as shown below.
>
> IMAGE_TYPEDEP:uefi_capsule:append = "${CAPSULE_IMGTYPE}"
>

Yup, sorry for the noise.

Since it is needed, it can be reused in:

-UEFI_FIRMWARE_BINARY = "${PN}-${MACHINE}.wic.nopt"
+UEFI_FIRMWARE_BINARY = "${PN}-${MACHINE}.${CAPSULE_IMGTYPE}"

Jose


> Best regards,
> Gowtham Suresh Kumar
> ------------------------------
> *From:* Jose Quaresma <quaresma.jose@gmail.com>
> *Sent:* Wednesday, February 15, 2023 12:23 PM
> *To:* Gowtham Suresh Kumar <Gowtham.SureshKumar@arm.com>
> *Cc:* meta-arm@lists.yoctoproject.org <meta-arm@lists.yoctoproject.org>;
> Ross Burton <Ross.Burton@arm.com>; nd <nd@arm.com>
> *Subject:* Re: [meta-arm] [PATCH 2/2] arm-bsp/uefi_capsule: Use json file
> to pass capsule config
>
> Hi Gowtham,
>
> Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com> escreveu no dia
> quarta, 15/02/2023 à(s) 10:42:
>
> From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
>
> This patch uses the json config file for UEFI capsule generation
> as this is efficient and easily scalable to generate multiple
> capsules.
>
> Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
> ---
>  .../recipes-bsp/images/corstone1000-image.bb  |  8 +++---
>  ...rstone1000-image-capsule-update-image.json | 11 ++++++++
>  meta-arm/classes/uefi_capsule.bbclass         | 27 ++++++++++++-------
>  3 files changed, 32 insertions(+), 14 deletions(-)
>  create mode 100644
> meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
>
> diff --git a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> index b0a71bca..ce4df8a6 100644
> --- a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> +++ b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
> @@ -13,11 +13,9 @@ PACKAGE_INSTALL = ""
>
>  IMAGE_FSTYPES += "wic wic.nopt uefi_capsule"
>
> -UEFI_FIRMWARE_BINARY = "corstone1000-image-${MACHINE}.wic.nopt"
> -UEFI_FIRMWARE_VERSION = "5"
> -UEFI_FIRMWARE_LSV = "0"
> -UEFI_FIRMWARE_GUID = "e2bb9c06-70e9-4b14-97a3-5a7913176e3f"
> -UEFI_FIRMWARE_UPDATE_INDEX = "0"
> +UEFI_FIRMWARE_BINARY = "${PN}-${MACHINE}.wic.nopt"
> +UEFI_CAPSULE_CONFIG = "${THISDIR}/files/${PN}-capsule-update-image.json"
> +CAPSULE_IMGTYPE = "wic.nopt"
>
>
> Looks like this variable is not used anywhere.
>
> Jose
>
>
>
>  do_sign_images() {
>      # Sign TF-A BL2
> diff --git
> a/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> new file mode 100644
> index 00000000..0f011ff7
> --- /dev/null
> +++
> b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
> @@ -0,0 +1,11 @@
> +{
> +    "Payloads": [
> +        {
> +            "FwVersion": "5",
> +            "Guid": "e2bb9c06-70e9-4b14-97a3-5a7913176e3f",
> +            "LowestSupportedVersion": "1",
> +            "Payload": "$UEFI_FIRMWARE_BINARY",
> +            "UpdateImageIndex": "0"
> +        }
> +    ]
> +}
> diff --git a/meta-arm/classes/uefi_capsule.bbclass
> b/meta-arm/classes/uefi_capsule.bbclass
> index 0c3d3845..cf708412 100644
> --- a/meta-arm/classes/uefi_capsule.bbclass
> +++ b/meta-arm/classes/uefi_capsule.bbclass
> @@ -1,6 +1,7 @@
>  # This class generates UEFI capsules
>  # The current class supports generating a capsule with single firmware
> binary
>
> +DEPENDS += "gettext-native"
>  inherit python3native
>
>  IMAGE_TYPES += "uefi_capsule"
> @@ -19,14 +20,11 @@ CAPSULE_EXTENSION ?= "uefi.capsule"
>
>  # The following variables must be set to be able to generate a capsule
> update
>  UEFI_FIRMWARE_BINARY ?= ""
> -UEFI_FIRMWARE_VERSION ?= ""
> -UEFI_FIRMWARE_LSV ?= ""
> -UEFI_FIRMWARE_GUID ?= ""
> -UEFI_FIRMWARE_UPDATE_INDEX ?= ""
> +UEFI_CAPSULE_CONFIG ?= ""
>
>  # Check if the required variables are set
>  python() {
> -    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_FIRMWARE_VERSION",
> "UEFI_FIRMWARE_LSV", "UEFI_FIRMWARE_GUID", "UEFI_FIRMWARE_UPDATE_INDEX"]:
> +    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_CAPSULE_CONFIG"]:
>          if not d.getVar(var):
>              raise bb.parse.SkipRecipe(f"{var} not set")
>  }
> @@ -36,10 +34,21 @@ IMAGE_CMD:uefi_capsule(){
>      # Force the GenerateCapsule script to use python3
>      export PYTHON_COMMAND=${PYTHON}
>
> -
> ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule
> -e -o \
> -    ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION}
> --fw-version ${UEFI_FIRMWARE_VERSION} \
> -    --lsv ${UEFI_FIRMWARE_LSV} --guid ${UEFI_FIRMWARE_GUID} --verbose
> --update-image-index \
> -    ${UEFI_FIRMWARE_UPDATE_INDEX} --verbose
> ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}
> +    # Copy the firmware and the capsule config json to current directory
> +    if [ -e ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} ]; then
> +        cp ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} . ;
> +    fi
> +
> +    export UEFI_FIRMWARE_BINARY=${UEFI_FIRMWARE_BINARY}
> +    envsubst < ${UEFI_CAPSULE_CONFIG} >
> ./${MACHINE}-capsule-update-image.json
> +
> +
> ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule
> \
> +    -e -o ${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION} -j \
> +    ${MACHINE}-capsule-update-image.json
> +
> +    # Remove the firmware to avoid contamination of IMGDEPLOYDIR
> +    rm ${UEFI_FIRMWARE_BINARY}
> +
>  }
>
>  # The firmware binary should be created before generating the capsule
> --
> 2.17.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#4391):
> https://lists.yoctoproject.org/g/meta-arm/message/4391
> Mute This Topic: https://lists.yoctoproject.org/mt/96980035/5052612
> Group Owner: meta-arm+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/meta-arm/unsub [
> quaresma.jose@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
>
> --
> Best regards,
>
> José Quaresma
>
diff mbox series

Patch

diff --git a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
index b0a71bca..ce4df8a6 100644
--- a/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
+++ b/meta-arm-bsp/recipes-bsp/images/corstone1000-image.bb
@@ -13,11 +13,9 @@  PACKAGE_INSTALL = ""
 
 IMAGE_FSTYPES += "wic wic.nopt uefi_capsule"
 
-UEFI_FIRMWARE_BINARY = "corstone1000-image-${MACHINE}.wic.nopt"
-UEFI_FIRMWARE_VERSION = "5"
-UEFI_FIRMWARE_LSV = "0"
-UEFI_FIRMWARE_GUID = "e2bb9c06-70e9-4b14-97a3-5a7913176e3f"
-UEFI_FIRMWARE_UPDATE_INDEX = "0"
+UEFI_FIRMWARE_BINARY = "${PN}-${MACHINE}.wic.nopt"
+UEFI_CAPSULE_CONFIG = "${THISDIR}/files/${PN}-capsule-update-image.json"
+CAPSULE_IMGTYPE = "wic.nopt"
 
 do_sign_images() {
     # Sign TF-A BL2
diff --git a/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
new file mode 100644
index 00000000..0f011ff7
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/images/files/corstone1000-image-capsule-update-image.json
@@ -0,0 +1,11 @@ 
+{
+    "Payloads": [
+        {
+            "FwVersion": "5",
+            "Guid": "e2bb9c06-70e9-4b14-97a3-5a7913176e3f",
+            "LowestSupportedVersion": "1",
+            "Payload": "$UEFI_FIRMWARE_BINARY",
+            "UpdateImageIndex": "0"
+        }
+    ]
+}
diff --git a/meta-arm/classes/uefi_capsule.bbclass b/meta-arm/classes/uefi_capsule.bbclass
index 0c3d3845..cf708412 100644
--- a/meta-arm/classes/uefi_capsule.bbclass
+++ b/meta-arm/classes/uefi_capsule.bbclass
@@ -1,6 +1,7 @@ 
 # This class generates UEFI capsules
 # The current class supports generating a capsule with single firmware binary
 
+DEPENDS += "gettext-native"
 inherit python3native
 
 IMAGE_TYPES += "uefi_capsule"
@@ -19,14 +20,11 @@  CAPSULE_EXTENSION ?= "uefi.capsule"
 
 # The following variables must be set to be able to generate a capsule update
 UEFI_FIRMWARE_BINARY ?= ""
-UEFI_FIRMWARE_VERSION ?= ""
-UEFI_FIRMWARE_LSV ?= ""
-UEFI_FIRMWARE_GUID ?= ""
-UEFI_FIRMWARE_UPDATE_INDEX ?= ""
+UEFI_CAPSULE_CONFIG ?= ""
 
 # Check if the required variables are set
 python() {
-    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_FIRMWARE_VERSION", "UEFI_FIRMWARE_LSV", "UEFI_FIRMWARE_GUID", "UEFI_FIRMWARE_UPDATE_INDEX"]:
+    for var in ["UEFI_FIRMWARE_BINARY", "UEFI_CAPSULE_CONFIG"]:
         if not d.getVar(var):
             raise bb.parse.SkipRecipe(f"{var} not set")
 }
@@ -36,10 +34,21 @@  IMAGE_CMD:uefi_capsule(){
     # Force the GenerateCapsule script to use python3
     export PYTHON_COMMAND=${PYTHON}
 
-    ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o \
-    ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION} --fw-version ${UEFI_FIRMWARE_VERSION} \
-    --lsv ${UEFI_FIRMWARE_LSV} --guid ${UEFI_FIRMWARE_GUID} --verbose --update-image-index \
-    ${UEFI_FIRMWARE_UPDATE_INDEX} --verbose ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY}
+    # Copy the firmware and the capsule config json to current directory
+    if [ -e ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} ]; then
+        cp ${CAPSULE_IMGLOCATION}/${UEFI_FIRMWARE_BINARY} . ;
+    fi
+
+    export UEFI_FIRMWARE_BINARY=${UEFI_FIRMWARE_BINARY}
+    envsubst < ${UEFI_CAPSULE_CONFIG} > ./${MACHINE}-capsule-update-image.json
+
+    ${STAGING_DIR_NATIVE}/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule \
+    -e -o ${UEFI_FIRMWARE_BINARY}.${CAPSULE_EXTENSION} -j \
+    ${MACHINE}-capsule-update-image.json
+
+    # Remove the firmware to avoid contamination of IMGDEPLOYDIR
+    rm ${UEFI_FIRMWARE_BINARY}
+
 }
 
 # The firmware binary should be created before generating the capsule