Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor UEFI capsule generation #1527

Merged
merged 6 commits into from
May 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 0 additions & 41 deletions classes-recipe/image_types_tegra.bbclass
Original file line number Diff line number Diff line change
Expand Up @@ -462,44 +462,3 @@ do_image_tegraflash[depends] += "${TEGRAFLASH_PKG_DEPENDS} dtc-native:do_populat
virtual/bootloader:do_deploy virtual/secure-os:do_deploy ${TEGRA_SIGNING_EXTRA_DEPS} ${DTB_EXTRA_DEPS} \
${@'${TEGRAFLASH_INITRD_FLASH_IMAGE}:do_image_complete' if d.getVar('TEGRAFLASH_INITRD_FLASH_IMAGE') != '' else ''}"
IMAGE_TYPEDEP:tegraflash += "${IMAGE_TEGRAFLASH_FS_TYPE}"

oe_make_bup_payload() {
PATH="${STAGING_BINDIR_NATIVE}/${FLASHTOOLS_DIR}:${PATH}"
export tosimgfilename=${TOSIMGFILENAME}
rm -rf ${WORKDIR}/bup-payload
mkdir ${WORKDIR}/bup-payload
oldwd="$PWD"
cd ${WORKDIR}/bup-payload
# BUP generator really wants to use 'boot.img' for the LNX
# partition contents
tegraflash_populate_package "$1" boot.img ${@tegra_bootcontrol_overlay_list(d, bup=True)}
mv generate_bup_payload.sh doflash.sh
tegraflash_create_flash_config flash.xml.in boot.img ${STAGING_DATADIR}/tegraflash/bupgen-internal-flash.xml
. ./flashvars
tegraflash_custom_sign_bup
for bup in ${WORKDIR}/bup-payload/${BUP_PAYLOAD_DIR}/*; do
[ -e $bup ] || continue
BUP_generator.py --contents --check $bup
done
mv ${WORKDIR}/bup-payload/${BUP_PAYLOAD_DIR}/* .
cd "$oldwd"
}

create_bup_payload_image() {
local type="$1"
oe_make_bup_payload ${IMGDEPLOYDIR}/${IMAGE_NAME}.${type}
for f in ${WORKDIR}/bup-payload/*_only_payload; do
[ -e $f ] || continue
sfx=$(basename $f _payload)
install -m 0644 $f ${IMGDEPLOYDIR}/${IMAGE_NAME}.$sfx.bup-payload
ln -sf ${IMAGE_NAME}.$sfx.bup-payload ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$sfx.bup-payload
done
}
create_bup_payload_image[vardepsexclude] += "DATETIME"

CONVERSIONTYPES += "bup-payload"
CONVERSION_DEPENDS_bup-payload = "tegra-flashtools-native python3-pyyaml-native coreutils-native tegra-bootfiles \
tegra-redundant-boot-rollback dtc-native \
virtual/bootloader:do_deploy virtual/kernel:do_deploy virtual/secure-os:do_deploy \
${TEGRA_ESP_IMAGE}:do_image_complete ${TEGRA_SIGNING_EXTRA_DEPS} ${DTB_EXTRA_DEPS}"
CONVERSION_CMD:bup-payload = "create_bup_payload_image ${type}"
8 changes: 4 additions & 4 deletions classes-recipe/tegra-uefi-capsule-signing.bbclass
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ UEFI_CAPSULE_TRUSTED_PUBLIC_CERT ?= "${PYTHON_BASETOOLS}/Pkcs7Sign/TestRoot.pub.
# perform the capsule signing.
sign_uefi_capsules() {
export PYTHONPATH="${PYTHONPATH}:${PYTHON_BASETOOLS}"
if [ -e ${DEPLOY_DIR_IMAGE}/${BUPFILENAME}.bl_only.bup-payload ]; then
if [ -e ${B}/${BUPFILENAME}.bl_only.bup-payload ]; then
python3 ${PYTHON_BASETOOLS}/Capsule/GenerateCapsule.py \
-v --encode --monotonic-count 1 \
--fw-version "${BSP_VERSION32}" \
Expand All @@ -28,9 +28,9 @@ sign_uefi_capsules() {
--other-public-cert "${UEFI_CAPSULE_OTHER_PUBLIC_CERT}" \
--trusted-public-cert "${UEFI_CAPSULE_TRUSTED_PUBLIC_CERT}" \
-o ./tegra-bl.cap \
${DEPLOY_DIR_IMAGE}/${BUPFILENAME}.bl_only.bup-payload
${B}/${BUPFILENAME}.bl_only.bup-payload
fi
if [ -e ${DEPLOY_DIR_IMAGE}/${BUPFILENAME}.kernel_only.bup-payload ]; then
if [ -e ${B}/${BUPFILENAME}.kernel_only.bup-payload ]; then
python3 ${PYTHON_BASETOOLS}/Capsule/GenerateCapsule.py \
-v --encode --monotonic-count 1 \
--fw-version "${BSP_VERSION32}" \
Expand All @@ -40,6 +40,6 @@ sign_uefi_capsules() {
--other-public-cert "${UEFI_CAPSULE_OTHER_PUBLIC_CERT}" \
--trusted-public-cert "${UEFI_CAPSULE_TRUSTED_PUBLIC_CERT}" \
-o ./tegra-kernel.cap \
${DEPLOY_DIR_IMAGE}/${BUPFILENAME}.kernel_only.bup-payload
${B}/${BUPFILENAME}.kernel_only.bup-payload
fi
}
2 changes: 1 addition & 1 deletion conf/machine/include/tegra-common.inc
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ IMAGE_FSTYPES += "tegraflash"

INITRAMFS_IMAGE ?= "tegra-minimal-initramfs"
INITRAMFS_IMAGE_BUNDLE ?= "0"
TEGRA_INITRAMFS_FSTYPES ?= "${@'' if d.getVar('INITRAMFS_IMAGE_BUNDLE') == '1' else ' cpio.gz.cboot cpio.gz.cboot.bup-payload'}"
TEGRA_INITRAMFS_FSTYPES ?= "${@'' if d.getVar('INITRAMFS_IMAGE_BUNDLE') == '1' else ' cpio.gz.cboot'}"
INITRAMFS_FSTYPES:append = "${TEGRA_INITRAMFS_FSTYPES}"
TEGRA_INITRD_FLASH_INITRAMFS_FSTYPES ?= "${@'' if d.getVar('INITRAMFS_IMAGE_BUNDLE') == '1' else ' cpio.gz.cboot'}"
TEGRAFLASH_INITRD_FLASH_IMAGE ?= "tegra-initrd-flash-initramfs"
Expand Down
26 changes: 0 additions & 26 deletions recipes-bsp/tegra-bup-payload/tegra-bup-payload_1.0.bb

This file was deleted.

69 changes: 56 additions & 13 deletions recipes-bsp/uefi/tegra-uefi-capsules_35.5.0.bb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ DESCRIPTION = "Generate UEFI capsules for bup paylods"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit tegra-bup deploy
inherit tegra-bup deploy image_types_tegra kernel-artifact-names

TEGRA_UEFI_CAPSULE_SIGNING_CLASS ??= "tegra-uefi-capsule-signing"
inherit ${TEGRA_UEFI_CAPSULE_SIGNING_CLASS}
Expand All @@ -11,45 +11,88 @@ TEGRA_UEFI_CAPSULE_SIGNING_EXTRA_DEPS ??= ""

COMPATIBLE_MACHINE = "(tegra)"

DEPENDS += "tegra-bup-payload"
TEGRA_SIGNING_EXTRA_DEPS ??= ""

GUID:tegra194 ?= "be3f5d68-7654-4ed2-838c-2a2faf901a78"
GUID:tegra234 ?= "bf0d4599-20d4-414e-b2c5-3595b1cda402"

do_compile() {
# Generate BUP images
PATH="${STAGING_BINDIR_NATIVE}/${FLASHTOOLS_DIR}:${PATH}"
export tosimgfilename=${TOSIMGFILENAME}
rm -rf ${B}/bup-payload
mkdir ${B}/bup-payload
oldwd="$PWD"
cd ${B}/bup-payload
# BUP generator really wants to use 'boot.img' for the LNX
# partition contents
tegraflash_populate_package ${IMAGE_TEGRAFLASH_KERNEL} boot.img ${@tegra_bootcontrol_overlay_list(d, bup=True)}
mv generate_bup_payload.sh doflash.sh
tegraflash_create_flash_config flash.xml.in boot.img ${STAGING_DATADIR}/tegraflash/bupgen-internal-flash.xml
. ./flashvars
tegraflash_custom_sign_bup
for bup in ${B}/bup-payload/${BUP_PAYLOAD_DIR}/*; do
[ -e $bup ] || continue
BUP_generator.py --contents --check $bup
done
mv ${B}/bup-payload/${BUP_PAYLOAD_DIR}/* .
cd "$oldwd"

# Create symlinks BUP payloads with a naming expected by sign_uefi_capsules
for f in ${B}/bup-payload/*_only_payload; do
[ -e $f ] || continue
sfx=$(basename $f _payload)

ln -sf $f ${B}/${BUPFILENAME}.$sfx.bup-payload
done

# Generate UEFI capsules
sign_uefi_capsules

# Check if capsules were generated successfully
if [ ! -e ${B}/tegra-bl.cap ]; then
bberror "${B}/tegra-bl.cap wasn't generated"
fi
if [ -e ${B}/${BUPFILENAME}.kernel.bup_payload -a ! -e ${B}/tegra-kernel.cap ]; then
bberror "${B}/tegra-kernel.cap wasn't generated"
fi
madisongh marked this conversation as resolved.
Show resolved Hide resolved
}

CAPSULE_DIR = "/opt/nvidia/UpdateCapsule"
TEGRA_UEFI_CAPSULE_INSTALL_DIR ??= "/opt/nvidia/UpdateCapsule"

do_install() {
install -d ${D}${CAPSULE_DIR}
install -d ${D}${TEGRA_UEFI_CAPSULE_INSTALL_DIR}
if [ -e ${B}/tegra-bl.cap ]; then
install -m 0644 ${B}/tegra-bl.cap ${D}${CAPSULE_DIR}
install -m 0644 ${B}/tegra-bl.cap ${D}${TEGRA_UEFI_CAPSULE_INSTALL_DIR}
fi
if [ -e ${B}/tegra-kernel.cap ]; then
install -m 0644 ${B}/tegra-kernel.cap ${D}${CAPSULE_DIR}
install -m 0644 ${B}/tegra-kernel.cap ${D}${TEGRA_UEFI_CAPSULE_INSTALL_DIR}
fi
}

FILES:${PN} += "${CAPSULE_DIR}"
FILES:${PN} += "${TEGRA_UEFI_CAPSULE_INSTALL_DIR}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
INSANE_SKIP:${PN} += "buildpaths"

do_deploy() {
install -d ${DEPLOYDIR}
if [ -e ${B}/tegra-bl.cap ]; then
BL_NAME=${TNSPEC_MACHINE}-tegra-bl.cap
install -m 0644 ${B}/tegra-bl.cap ${DEPLOYDIR}/$BL_NAME
ln -s -r ${DEPLOYDIR}/$BL_NAME ${DEPLOYDIR}/tegra-bl.cap
BL_NAME=${TNSPEC_MACHINE}-tegra-bl.cap
install -m 0644 ${B}/tegra-bl.cap ${DEPLOYDIR}/$BL_NAME
ln -s -r ${DEPLOYDIR}/$BL_NAME ${DEPLOYDIR}/tegra-bl.cap
fi
if [ -e ${B}/tegra-kernel.cap ]; then
KERNEL_NAME=${TNSPEC_MACHINE}-tegra-kernel.cap
install -m 0644 ${B}/tegra-kernel.cap ${DEPLOYDIR}/$KERNEL_NAME
ln -s -r ${DEPLOYDIR}/$KERNEL_NAME ${DEPLOYDIR}/tegra-kernel.cap
KERNEL_NAME=${TNSPEC_MACHINE}-tegra-kernel.cap
install -m 0644 ${B}/tegra-kernel.cap ${DEPLOYDIR}/$KERNEL_NAME
ln -s -r ${DEPLOYDIR}/$KERNEL_NAME ${DEPLOYDIR}/tegra-kernel.cap
fi
}

addtask deploy after do_install

do_compile[depends] += "${@bup_dependency(d)} ${TEGRA_UEFI_CAPSULE_SIGNING_EXTRA_DEPS}"
do_compile[depends] += "virtual/kernel:do_deploy tegra-flashtools-native:do_populate_sysroot dtc-native:do_populate_sysroot"
do_compile[depends] += "python3-pyyaml-native:do_populate_sysroot"
do_compile[depends] += "tegra-redundant-boot-rollback:do_populate_sysroot tegra-bootfiles:do_populate_sysroot"
do_compile[depends] += "coreutils-native:do_populate_sysroot ${TEGRA_ESP_IMAGE}:do_image_complete virtual/secure-os:do_deploy"
do_compile[depends] += "${TEGRA_SIGNING_EXTRA_DEPS}"
45 changes: 0 additions & 45 deletions recipes-kernel/kernel-bup-payload/kernel-bup-payload.bb

This file was deleted.