Commit Graph

15 Commits

Author SHA1 Message Date
David Escalona 94d4bbbe9f meta-digi-dey: swupdate-files: add firmware update support based on files
Implement a new mechanism to allow users to create update packages based on files and folders to modify
the active system.

This is done through the new class 'swupdate-files', which creates a tar.gz update file in the image
distribution output directory containing all the files and directories to create/update. The 'tar.gz'
file is used later by the 'swu-images' recipe to generate the final SWUpdate package. The SWU package
installation process extracts the tar.gz file in the root folder ("/") of the active system.

Users can specify the list of files and directories to include in the update package using the
'SWUPDATE_FILES_LIST' variable. These files will be directly copied from the generated system rootfs and
placed in the tar.gz archive. Additionally, users can provide their custom 'tar.gz' file to use in the update
by specifying its location in the 'SWUPDATE_FILES_TARGZ_FILE' variable. In any case, all the paths to include
in the update package must be relative to "/", as it is the base directory where tar.gz file contents are
extracted.

The update process for dual boot systems sets a new u-boot flag so that active bank is not swapped once
installation is complete and system reboots.

The SWU update mechanism based on files provides a custom update script which takes care of preparing the
system for the installation process. Just like in the SWU updates based on images, users can customize this
script or override it with the 'SWUPDATE_SCRIPT' variable, specifying the location of the new script to use.

If both the 'SWUPDATE_FILES_LIST' and 'SWUPDATE_FILES_TARGZ_FILE' variables are empty, a standard images
SWUpdate package will be generated instead.

Signed-off-by: David Escalona <david.escalona@digi.com>
2023-07-06 11:00:05 +02:00
Francisco Gil 3d3ba69b08 update-firmware: squashsf: modify the logic to include the ro systems
In a squashfs the mount points are different and the current logic
wasn't working.

It's more reliable to check the /proc/cmdline to determine if
the system is a nand or an emmc.

Added also logic to get the active partition in nand devices
when the rootfs is squashfs.

https://onedigi.atlassian.net/browse/DEL-8558

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2023-06-06 13:04:21 +02:00
Tatiana Leon dba8dbdab4 dualboot: change the way to determine if device is using nand or emmc
'environment' partition is not available in the ccmp15.

The solution suggested is read the "/proc/mounts" and check if the 'rootfs' is
'ubifs' mounted.

Related to commits 7c07b15370 and
678eaaf0fc4ce74e67682387e3465eb29659bd47

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon eca521f505 dualboot: update-firmware: get current active system not using U-Boot variable
This commit adds a new function to get the active system in a dualboot device
without using 'active_system' U-Boot variable.
This way the script always knows the real active system even when the variable
'active_system' has the value of the next boot active system, for example, after
performing a 'update-firmware --swap-active-system'.

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon ccc4680924 dualboot: update-firmware: new option to swap active system ('--swap-active-system')
This allows to remove the script 'on-the-fly-swap-partition.sh'.

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon 1b17e8f657 dualboot: update-firmware: new script option ('-s')
This option combined with '-a' ('--active') only prints the active block: a or b

The purpose an output to be consumed by other scripts or programs.

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon 556bda6d57 dualboot: update-firmware: update the check of nand or emmc system
Check the second ('/') and third ('ubifs') field of 'rootfs' entry in
'/proc/mounts' as the first one ('rootfs_a' or 'rootfs_b') may be changed by
custormers:

    root@ccmp15-dvk:~# cat /proc/mounts
    ubi0:rootfs_b / ubifs rw,relatime,assert=read-only,ubi=0,vol=5 0 0
    [...]

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon 006138e134 dualboot: update-firmware: rework the script to use functions and avoid repetitions
Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon e37d52ebd7 dualboot: update-firmware: add '--no-reboot' option to avoid the reboot of the system
This is required for the firmware update using Digi Remote Manager. The reboot
is commanded by the server, it that does not happen the update process is not
ended for DRM.

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Tatiana Leon d7f9cfb718 dualboot: update-firmware: add long options to the tool usage
Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2023-04-03 14:44:35 +02:00
Francisco Gil f308ccfa66 update-firmware: rename the firmware-update from recovery-utils
There is a problem when building the SDK because two binaries
have the same name (update-firmware) and makes the compilation
to fail.

Change the name to update-firmware.recovery and create a wrapper
over the update-firmware to check if the system is not dual boot
to call it.

Rework the code to make it more reliable.

Remove the umount of the alternative linux partition, now it is
not needed because only the active linux partition is mounted now.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2022-11-22 11:42:39 +01:00
Francisco Gil 0328295ea8 dualboot: run the script only in dualboot systems
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2022-11-22 11:42:39 +01:00
Francisco Gil 7c07b15370 update-firmware: change the way to determine nand device
The partition "environment" is not available in the ccmp15.

The solution suggested is read the "/proc/mounts" and check if
the "rootfs" is "ubifs" mounted.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2022-11-15 07:54:26 +01:00
Francisco Gil 378135b9c6 dualboot: rename firmware-update-dual.sh to update-firmware
Use the same name for both firmware update mechanism.

Add a dependency to only add recovery-utils used by the
non dual-boot firmware update system.

Adding this only one binary/script called update-firmware will
be added.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2022-10-26 11:29:23 +02:00
Hector Palacios 1105a8fecd dualboot: move contents of meta-digi-dualboot layer into meta-digi as a class
- create dualboot.bbclass that
  - sets DUALBOOT_ENABLED variable
  - defines partition names and function for changing the sw-description
    for swupdate
- move files from layer into meta-digi

https://onedigi.atlassian.net/browse/DEL-7962

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2022-10-26 11:29:23 +02:00