From f97aa66abf9a5d781478d367ce275ca61137ed2d Mon Sep 17 00:00:00 2001 From: Anton Gerasimov Date: Thu, 21 Feb 2019 15:54:39 +0100 Subject: Add universal uEnv recipe Signed-off-by: Anton Gerasimov --- classes/sota.bbclass | 11 +++++ .../ota-u-boot-script/files/uEnv-fileenv.txt | 1 + recipes-sota/ota-u-boot-script/files/uEnv-fit.txt | 1 + .../ota-u-boot-script/files/uEnv-rollback.txt | 8 ++++ recipes-sota/ota-u-boot-script/files/uEnv.txt | 33 ++++++++++++++ .../ota-u-boot-script/ota-u-boot-script.bb | 50 ++++++++++++++++++++++ 6 files changed, 104 insertions(+) create mode 100644 recipes-sota/ota-u-boot-script/files/uEnv-fileenv.txt create mode 100644 recipes-sota/ota-u-boot-script/files/uEnv-fit.txt create mode 100644 recipes-sota/ota-u-boot-script/files/uEnv-rollback.txt create mode 100644 recipes-sota/ota-u-boot-script/files/uEnv.txt create mode 100644 recipes-sota/ota-u-boot-script/ota-u-boot-script.bb diff --git a/classes/sota.bbclass b/classes/sota.bbclass index 92b4c43..12f8148 100644 --- a/classes/sota.bbclass +++ b/classes/sota.bbclass @@ -38,6 +38,15 @@ GARAGE_TARGET_NAME ?= "${OSTREE_BRANCHNAME}" GARAGE_TARGET_VERSION ?= "" GARAGE_TARGET_URL ?= "https://example.com/" +SOTA_BOOTLOADER_EXTRA_PARAMS ??= "" +SOTA_BOOTLOADER_BOOTCOMMAND ??= "bootm" +SOTA_BOOTLOADER_KERNEL_ADDR ??= "\$\{ramdisk_addr_r\}" +SOTA_BOOTLOADER_RAMDISK_ADDR ??= "-" +SOTA_BOOTLOADER_FDT_ADDR ??= "-" +SOTA_BOOTLOADER_BOOT_PART ??= "mmc 0:1" +SOTA_BOOTLOADER_MAIN_PART ??= "mmc 0:2" +SOTA_BOOTLOADER_ROOT_DEVICE ??= "/dev/mmcblk0p2" + SOTA_MACHINE ??="none" SOTA_MACHINE_rpi ?= "raspberrypi" SOTA_MACHINE_porter ?= "porter" @@ -49,4 +58,6 @@ SOTA_MACHINE_am335x-evm ?= "am335x-evm-wifi" SOTA_OVERRIDES_BLACKLIST = "ostree ota" SOTA_REQUIRED_VARIABLES = "OSTREE_REPO OSTREE_BRANCHNAME OSTREE_OSNAME OSTREE_BOOTLOADER OSTREE_BOOT_PARTITION GARAGE_SIGN_REPO GARAGE_TARGET_NAME" +do_image_wic[depends] += " ota-u-boot-script:do_deploy " + inherit sota_sanity sota_${SOTA_MACHINE} image_repo_manifest diff --git a/recipes-sota/ota-u-boot-script/files/uEnv-fileenv.txt b/recipes-sota/ota-u-boot-script/files/uEnv-fileenv.txt new file mode 100644 index 0000000..3646416 --- /dev/null +++ b/recipes-sota/ota-u-boot-script/files/uEnv-fileenv.txt @@ -0,0 +1 @@ +bootcmd_create_envfile=if test ! -e ${updater_boot_part} uboot.env; then saveenv; fi; diff --git a/recipes-sota/ota-u-boot-script/files/uEnv-fit.txt b/recipes-sota/ota-u-boot-script/files/uEnv-fit.txt new file mode 100644 index 0000000..64e34b0 --- /dev/null +++ b/recipes-sota/ota-u-boot-script/files/uEnv-fit.txt @@ -0,0 +1 @@ +bootcmd_fitconf=run bootcmd_getroot; if test -e ${sota_main_part} "${ostree_root}/usr/lib/fit_conf"; then load ${sota_main_part} $loadaddr "${ostree_root}/usr/lib/fit_conf"; env import -t $loadaddr $filesize; fi; setenv sota_kernel_addr ${sota_kernel_addr}${fit_conf} diff --git a/recipes-sota/ota-u-boot-script/files/uEnv-rollback.txt b/recipes-sota/ota-u-boot-script/files/uEnv-rollback.txt new file mode 100644 index 0000000..07b6b22 --- /dev/null +++ b/recipes-sota/ota-u-boot-script/files/uEnv-rollback.txt @@ -0,0 +1,8 @@ +bootcmd_rollbackenv=setenv kernel_image ${kernel_image2}; setenv ramdisk_image ${ramdisk_image2}; setenv fdt_file ${fdt_file2}; setenv bootargs ${bootargs2} + +bootlimit=3 + +bootcmd_set_rollback=if test ! "${rollback}" = "1"; then setenv rollback 1; setenv upgrade_available 0; saveenv; fi +altbootcmd=run bootcmd_create_envfile; run bootcmd_otenv; run bootcmd_set_rollback; if test -n "${kernel_image2}"; then run bootcmd_rollbackenv; fi; run bootcmd_args; run bootcmd_fitconf; run bootcmd_load; run bootcmd_run; reset + + diff --git a/recipes-sota/ota-u-boot-script/files/uEnv.txt b/recipes-sota/ota-u-boot-script/files/uEnv.txt new file mode 100644 index 0000000..0cd97b7 --- /dev/null +++ b/recipes-sota/ota-u-boot-script/files/uEnv.txt @@ -0,0 +1,33 @@ +bootcmd_fitconf= +bootcmd_create_envfile= + +sota_bootcommand=bootm +sota_kernel_addr=${ramdisk_addr_r} +sota_ramdisk_addr=- +sota_fdt_addr=- +sota_boot_part=mmc 0:1 +sota_main_part=mmc 0:2 +sota_root_device=/dev/mmcblk0p2 + +%%INITFINISHED%% + +bootcmd_resetvars=setenv kernel_image; setenv bootargs; setenv kernel_image2; setenv bootargs2 +bootcmd_otenv=run bootcmd_resetvars; load ${updater_main_part} $loadaddr /boot/loader/uEnv.txt; env import -t $loadaddr $filesize + +bootcmd_args=setenv bootargs "$bootargs $bootargs_fdt ostree_root=${updater_root_device} root=/dev/ram0 rw rootwait rootdelay=2 ramdisk_size=8192 panic=1 %%SOTA_EXTRA_BOOTCMD%%" + +bootcmd_getroot=setexpr ostree_root gsub "^.*ostree=([^ ]*).*$" "\\\\1" "${bootargs}"; + +bootcmd_load_kernel=load ${updater_main_part} ${sota_kernel_addr} "/boot"$kernel_image + +bootcmd_load_ramdisk=if ! "${sota_ramdisk_addr}" = "-"; then load ${updater_main_part} ${sota_ramdisk_addr} "/boot"$ramdisk_image; fi + +bootcmd_load_fdt=if ! "${sota_fdt_addr}" = "-"; then load ${updater_main_part} ${sota_fdt_addr} "/boot"$fdt_file; fi + +bootcmd_load=run bootcmd_load_kernel; run bootcmd_load_ramdisk; run bootcmd_load_fdt; + +bootcmd_run=${sota_bootcommand} ${sota_kernel_addr} ${sota_ramdisk_addr} ${sota_fdt_addr} + +bootcmd=if test "${rollback}" = "1"; then run altbootcmd; else run bootcmd_create_envfile; run bootcmd_otenv; run bootcmd_args; run bootcmd_fitconf; run bootcmd_load; run bootcmd_run; if ! "${upgrade_available}" = "1"; then setenv upgrade_available 1; saveenv; fi; reset; fi + + diff --git a/recipes-sota/ota-u-boot-script/ota-u-boot-script.bb b/recipes-sota/ota-u-boot-script/ota-u-boot-script.bb new file mode 100644 index 0000000..5c7ed57 --- /dev/null +++ b/recipes-sota/ota-u-boot-script/ota-u-boot-script.bb @@ -0,0 +1,50 @@ +DESCRIPTION = "Boot script template for OTA-enabled image" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + +inherit deploy + +SRC_URI = "file://uEnv-fileenv.txt \ + file://uEnv-fit.txt \ + file://uEnv-rollback.txt \ + file://uEnv.txt" + +do_deploy() { + + UENV_TEMPLATE=$(mktemp) + # Initialization portion + sed -n '0,/%%INITFINISHED%%/p' < ${WORKDIR}/uEnv.txt | head -n -1 > $UENV_TEMPLATE + + # Support for FIT images + if [ "${KERNEL_IMAGETYPE_SOTA}" = "fitImage"]; then + cat ${WORKDIR}/uEnv-fit.txt >> $UENV_TEMPLATE + fi + + # Rollback support + if [ -n "${SOTA_ROLLBACK_MECHANISM}" ]; then + cat ${WORKDIR}/uEnv-rollback.txt >> $UENV_TEMPLATE + + if [ "${SOTA_ROLLBACK_MECHANISM}" = "file-env" ]; + cat ${WORKDIR}/uEnv-fileenv.txt >> $UENV_TEMPLATE + fi + fi + + # The rest of the base template + sed -n '/%%INITFINISHED%%/,$p' < ${WORKDIR}/uEnv.txt | sed -n '2,$p' >> $UENV_TEMPLATE + + # Substitute the variables + sed -e 's/@@SOTA_BOOTLOADER_EXTRA_PARAMS@@/${SOTA_BOOTLOADER_EXTRA_PARAMS}' \ + -e 's/@@SOTA_BOOTLOADER_BOOTCOMMAND@@/${SOTA_BOOTLOADER_BOOTCOMMAND}' \ + -e 's/@@SOTA_BOOTLOADER_KERNEL_ADDR@@/${SOTA_BOOTLOADER_KERNEL_ADDR}' \ + -e 's/@@SOTA_BOOTLOADER_RAMDISK_ADDR@@/${SOTA_BOOTLOADER_RAMDISK_ADDR}' \ + -e 's/@@SOTA_BOOTLOADER_FDT_ADDR@@/${SOTA_BOOTLOADER_FDT_ADDR}' \ + -e 's/@@SOTA_BOOTLOADER_BOOT_PART@@/${SOTA_BOOTLOADER_BOOT_PART}' \ + -e 's/@@SOTA_BOOTLOADER_MAIN_PART@@/${SOTA_BOOTLOADER_KERNEL_MAIN_PART}' \ + -e 's/@@SOTA_BOOTLOADER_ROOT_DEVICE@@/${SOTA_BOOTLOADER_ROOT_DEVICE}' \ + "$UENV_TEMPLATE" > ${DEPLOY_DIR_IMAGE}/uEnv.txt + + + if [ -n ""] +} + +addtask deploy before do_package -- cgit v1.2.3-54-g00ecf