From 40b259e8d84cd1d2c0b54d246529572c0e6f3ed0 Mon Sep 17 00:00:00 2001 From: Matt Madison Date: Sun, 11 Dec 2022 10:20:08 -0800 Subject: [PATCH] image_types_tegra: updates for initrd flashing * Support separate internal and external flash layouts * Unify the post-signing function, which is the same across the two Soc types, and populate a '.presigning-vars' file there to be used by the initrd flashing script * Populate a '.env.initrd-flash' file to set environment variables needed by the initrd flashing script Signed-off-by: Matt Madison --- classes/image_types_tegra.bbclass | 110 ++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 20 deletions(-) diff --git a/classes/image_types_tegra.bbclass b/classes/image_types_tegra.bbclass index 4bb24887..e29f34bd 100644 --- a/classes/image_types_tegra.bbclass +++ b/classes/image_types_tegra.bbclass @@ -9,6 +9,18 @@ def tegra_default_rootfs_size(d): extraspace = eval(d.getVar('IMAGE_ROOTFS_EXTRA_SPACE')) return str(partsize - extraspace) +def tegra_rootfs_device(d): + import re + bootdev = d.getVar('TNSPEC_BOOTDEV') + # For Xavier NX booting from SDcard, the RCM booted kernel + # bypasses UEFI and doesn't get any overlays applied, such + # as the one that renames mmcblk1 -> mmcblk0 + if bootdev.startswith("mmc") and d.getVar('TEGRA_SPIFLASH_BOOT') == "1": + return "mmcblk1" + if bootdev.startswith("mmc") or bootdev.startswith("nvme"): + return re.sub(r"p[0-9]+$", "", bootdev) + return re.sub("[0-9]+$", "", bootdev) + IMAGE_ROOTFS_SIZE ?= "${@tegra_default_rootfs_size(d)}" KERNEL_ARGS ??= "" @@ -31,6 +43,9 @@ RECROOTFSSIZE ?= "314572800" IMAGE_TEGRAFLASH_FS_TYPE ??= "ext4" IMAGE_TEGRAFLASH_ROOTFS ?= "${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${IMAGE_TEGRAFLASH_FS_TYPE}" +TEGRAFLASH_ROOTFS_EXTERNAL = "${@'1' if d.getVar('TNSPEC_BOOTDEV') != 'mmcblk0p1' else '0'}" +ROOTFS_DEVICE_FOR_INITRD_FLASH = "${@tegra_rootfs_device(d)}" +TEGRAFLASH_ERASE_MMC ?= "${TEGRAFLASH_ROOTFS_EXTERNAL}" def tegra_initrd_image(d): if d.getVar('IMAGE_UBOOT'): @@ -56,6 +71,8 @@ IMAGE_TEGRAFLASH_ESPIMG ?= "${DEPLOY_DIR_IMAGE}/${TEGRA_ESP_IMAGE}-${MACHINE}.es DATAFILE ??= "" IMAGE_TEGRAFLASH_DATA ??= "" +IMAGE_TEGRAFLASH_INITRD_FLASHER = "${DEPLOY_DIR_IMAGE}/${TEGRAFLASH_INITRD_FLASH_IMAGE}-${MACHINE}.cboot" + TEGRA_SPIFLASH_BOOT ??= "" TEGRA_ROOTFS_AND_KERNEL_ON_SDCARD ??="" @@ -86,27 +103,16 @@ tegraflash_custom_pre() { } tegraflash_post_sign_pkg() { - : -} - -tegraflash_post_sign_pkg:tegra194() { mksparse -b ${TEGRA_BLBLOCKSIZE} --fillpattern=0 "${IMAGE_TEGRAFLASH_ROOTFS}" ${IMAGE_BASENAME}.img - [ "${TEGRA_SPIFLASH_BOOT}" = "1" -o "${TEGRA_ROOTFS_AND_KERNEL_ON_SDCARD}" = "1" ] || rm -f ./${IMAGE_BASENAME}.${IMAGE_TEGRAFLASH_FS_TYPE} - sed -i -e"s,APPFILE_b,${IMAGE_BASENAME}.img," -e"s,APPFILE,${IMAGE_BASENAME}.img," secureflash.xml - if [ -n "${IMAGE_TEGRAFLASH_DATA}" -a -n "${DATAFILE}" -a "${TEGRA_ROOTFS_AND_KERNEL_ON_SDCARD}" != "1" ]; then - mksparse -b ${TEGRA_BLBLOCKSIZE} --fillpattern=0 "${IMAGE_TEGRAFLASH_DATA}" ${DATAFILE}.img - sed -i -e"s,DATAFILE,${DATAFILE}.img," secureflash.xml - fi -} - -tegraflash_post_sign_pkg:tegra234() { - mksparse -b ${TEGRA_BLBLOCKSIZE} --fillpattern=0 "${IMAGE_TEGRAFLASH_ROOTFS}" ${IMAGE_BASENAME}.img - [ "${TEGRA_SPIFLASH_BOOT}" = "1" -o "${TEGRA_ROOTFS_AND_KERNEL_ON_SDCARD}" = "1" ] || rm -f ./${IMAGE_BASENAME}.${IMAGE_TEGRAFLASH_FS_TYPE} + cp secureflash.xml initrd-secureflash.xml sed -i -e"s,APPFILE_b,${IMAGE_BASENAME}.img," -e"s,APPFILE,${IMAGE_BASENAME}.img," secureflash.xml if [ -n "${IMAGE_TEGRAFLASH_DATA}" -a -n "${DATAFILE}" -a "${TEGRA_ROOTFS_AND_KERNEL_ON_SDCARD}" != "1" ]; then mksparse -b ${TEGRA_BLBLOCKSIZE} --fillpattern=0 "${IMAGE_TEGRAFLASH_DATA}" ${DATAFILE}.img sed -i -e"s,DATAFILE,${DATAFILE}.img," secureflash.xml fi + cat > .presigning-vars < $destdir/flash.xml.in } @@ -319,6 +332,7 @@ create_tegraflash_pkg:tegra194() { cp "${STAGING_DATADIR}/tegraflash/${EMMC_BCT_OVERRIDE}" . cp "${IMAGE_TEGRAFLASH_KERNEL}" ./${LNXFILE} cp "${IMAGE_TEGRAFLASH_ESPIMG}" ./esp.img + cp "${IMAGE_TEGRAFLASH_INITRD_FLASHER}" ./initrd-flash.img if [ -n "${DATAFILE}" -a -n "${IMAGE_TEGRAFLASH_DATA}" ]; then cp "${IMAGE_TEGRAFLASH_DATA}" ./${DATAFILE} DATAARGS="--datafile ${DATAFILE}" @@ -353,12 +367,39 @@ create_tegraflash_pkg:tegra194() { tegraflash_custom_pre cp "${IMAGE_TEGRAFLASH_ROOTFS}" ./${IMAGE_BASENAME}.${IMAGE_TEGRAFLASH_FS_TYPE} tegraflash_create_flash_config "${WORKDIR}/tegraflash" ${LNXFILE} + if [ "${TEGRAFLASH_ROOTFS_EXTERNAL}" = "1" ]; then + rm -rf "${WORKDIR}/tegraflash/external" external-flash.xml.in + mkdir "${WORKDIR}/tegraflash/external" + tegraflash_create_flash_config "${WORKDIR}/tegraflash/external" ${LNXFILE} ${STAGING_DATADIR}/tegraflash/${PARTITION_LAYOUT_EXTERNAL} + mv external/flash.xml.in ./external-flash.xml.in + fi rm -f doflash.sh cat > doflash.sh < .env.initrd-flash < burnfuses.sh < doflash.sh < dosdcard.sh < doflash.sh < .env.initrd-flash < burnfuses.sh <