On 16:46-20251202, Anshul Dalal via lists.yoctoproject.org wrote:
> U-Boot uses the 'bootpart' env variable to configure the rootfs for the
> kernel at boot. The BACKUP_REG0 MMR is also used to store bootcount as
> per U-Boot requirements[1].
>
> After each reset, U-Boot increments the bootcount and it's reset to 0 by
> the swupdate service indicating a successful boot. If the kernel panics
> however (eg. if the update failed), the bootcount is never reset and
> keeps on getting incremented by U-Boot until it reaches certain
> threshold after which U-Boot switches to the other non-updated partition
> to ensure a successful boot.
>
> This patch adds support for the same to the final .swu image generated
> by the update-image recipe.
>
> [1]: https://docs.u-boot.org/en/latest/api/bootcount.html
>
> Signed-off-by: Anshul Dalal <[email protected]>
> ---
> .../recipes-swupdate/images/files/sw-description | 12 ++++++++++++
> .../recipes-swupdate/libubootenv/files/fw_env.config | 5 +++++
> .../libubootenv/libubootenv_%.bbappend | 10 ++++++++++
> .../recipes-swupdate/swupdate/files/defconfig | 2 ++
> .../recipes-swupdate/swupdate/files/swupdate.sh | 4 ++++
> .../recipes-swupdate/swupdate/swupdate_%.bbappend | 2 ++
> 6 files changed, 35 insertions(+)
> create mode 100644
> meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
> create mode 100644
> meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
>
> diff --git a/meta-arago-distro/recipes-swupdate/images/files/sw-description
> b/meta-arago-distro/recipes-swupdate/images/files/sw-description
> index 8dc4e2b2..241bc95c 100644
> --- a/meta-arago-distro/recipes-swupdate/images/files/sw-description
> +++ b/meta-arago-distro/recipes-swupdate/images/files/sw-description
> @@ -15,6 +15,12 @@ software =
> compressed = "zlib";
> },
> );
> + uboot: (
> + {
> + name = "bootpart";
> + value = "0:1";
> + },
> + );
> };
>
> copy2 : {
> @@ -26,6 +32,12 @@ software =
> compressed = "zlib";
> },
> );
> + uboot: (
> + {
> + name = "bootpart";
> + value = "0:2";
> + },
> + );
> };
> };
> }
> diff --git
> a/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
> b/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
> new file mode 100644
> index 00000000..57eec5fc
> --- /dev/null
> +++ b/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
> @@ -0,0 +1,5 @@
> +# Describes the env location for U-Boot in the hw partition
> +# Second entry indicates redundant env
> +# Boot dev Offset Size
> +/dev/mmcblk0boot0 0x680000 0x20000
> +/dev/mmcblk0boot0 0x6a0000 0x20000
Does this fw_env.config work for all machines?
> diff --git
> a/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
> b/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
> new file mode 100644
> index 00000000..e3d142f2
> --- /dev/null
> +++ b/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
> @@ -0,0 +1,10 @@
> +FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
> +
> +SRC_URI:append = " file://fw_env.config"
If this config is not tested on all boards, it would be best to only append it
to the machines that are tested.
> +
> +do_install:append() {
> + install -d ${D}${sysconfdir}
> + install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}
> +}
> +
> +FILES:${PN}:append = " ${sysconfdir}"
> diff --git a/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
> b/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
> index b1362eaa..4a2d78c0 100644
> --- a/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
> +++ b/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
> @@ -1,8 +1,10 @@
> CONFIG_HW_COMPATIBILITY=y
> # CONFIG_LUA is not set
> # CONFIG_BOOTLOADER_NONE is not set
> +CONFIG_UBOOT=y
> CONFIG_SYSTEMD=y
> CONFIG_WEBSERVER=y
> +CONFIG_BOOTLOADERHANDLER=y
> CONFIG_CFI=y
> CONFIG_EMMC_HANDLER=y
> CONFIG_RAW=y
> diff --git a/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
> b/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
> index bb3a3593..2083062e 100644
> --- a/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
> +++ b/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
> @@ -8,4 +8,8 @@ else
> SELECTION="-e stable,copy2"
> fi
>
> +# BACKUP_REG0 MMR on AM62x
> +UBOOT_BOOTCOUNT_ADDR=0x4301c100
> +
> +devmem2 $UBOOT_BOOTCOUNT_ADDR w 0
Using devmem2 might be a bad idea. Consider using fw_setenv [1] to set
the bootcount to 0.
[1] https://manpages.debian.org/testing/libubootenv-tool/fw_setenv.8.en.html
-- Yogesh
> swupdate -H @MACHINE@:1.0 ${SELECTION} -p 'reboot' -f /etc/swupdate.cfg -w
> "-r /www -p 8080"
> diff --git a/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
> b/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
> index 0ce763f9..20f87435 100644
> --- a/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
> +++ b/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
> @@ -2,6 +2,8 @@ inherit swupdate-lib
>
> FILESEXTRAPATHS:append := "${THISDIR}/files:"
>
> +RDEPENDS:${PN} += "devmem2"
> +
> FILES:${PN} += " \
> ${SWUPDATE_HW_COMPATIBILITY_FILE} \
> "
> --
> 2.52.0
>
>
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#16855):
https://lists.yoctoproject.org/g/meta-arago/message/16855
Mute This Topic: https://lists.yoctoproject.org/mt/116574476/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-arago/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-