base-files: upgrade: nand: add JFFS2 cleanmarkers support
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Thu, 15 Jun 2023 08:46:10 +0000 (10:46 +0200)
committerÁlvaro Fernández Rojas <noltari@gmail.com>
Thu, 15 Jun 2023 08:49:41 +0000 (10:49 +0200)
Some Broadcom MIPS devices require JFFS2 cleanmarkers to be present on the
kernel partition or the bootloader will identify the partition as corrupt and
won't boot the kernel.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
package/base-files/files/lib/upgrade/nand.sh

index fa29d575a81dafce4b271586cadf01dc643f5bf2..d910bf17915982ed01376f2d74fbece8125ba420 100644 (file)
@@ -301,6 +301,7 @@ nand_upgrade_fit() {
 nand_upgrade_tar() {
        local tar_file="$1"
        local gz="$2"
+       local jffs2_markers="${CI_JFFS2_CLEAN_MARKERS:-0}"
 
        # WARNING: This fails if tar contains more than one 'sysupgrade-*' directory.
        local board_dir="$(tar t${gz}f "$tar_file" | grep -m 1 '^sysupgrade-.*/$')"
@@ -329,6 +330,7 @@ nand_upgrade_tar() {
                        ubi_kernel_length="$kernel_length"
                fi
        fi
+
        local has_env=0
        nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$ubi_kernel_length" "$has_env" || return 1
 
@@ -340,8 +342,14 @@ nand_upgrade_tar() {
        fi
        if [ "$kernel_length" ]; then
                if [ "$kernel_mtd" ]; then
-                       tar xO${gz}f "$tar_file" "$board_dir/kernel" | \
-                               mtd write - "$CI_KERNPART"
+                       if [ "$jffs2_markers" = 1 ]; then
+                               flash_erase -j "/dev/mtd${kernel_mtd}" 0 0
+                               tar xO${gz}f "$tar_file" "$board_dir/kernel" | \
+                                       nandwrite "/dev/mtd${kernel_mtd}" -
+                       else
+                               tar xO${gz}f "$tar_file" "$board_dir/kernel" | \
+                                       mtd write - "$CI_KERNPART"
+                       fi
                else
                        local ubidev="$( nand_find_ubi "${CI_KERN_UBIPART:-$CI_UBIPART}" )"
                        local kern_ubivol="$( nand_find_volume $ubidev "$CI_KERNPART" )"