Re: [meta-arago][scarthgap][PATCH RFC 3/4] swupdate: add bootloader support
Yogesh Hegde <[email protected]>
| Newsgroups | org.yoctoproject.lists.meta-arago |
|---|---|
| Message-ID | <20251203055830.73womzso5xslwr6l@yogi-work-pc> |
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 (#16850): https://lists.yoctoproject.org/g/meta-arago/message/16850 > Mute This Topic: https://lists.yoctoproject.org/mt/116574476/9980049 > Group Owner: [email protected] > Unsubscribe: https://lists.yoctoproject.org/g/meta-arago/unsub [[email protected]] > -=-=-=-=-=-=-=-=-=-=-=- > >