ath79: move image check for devices with RedBoot
authorTomasz Maciej Nowak <tmn505@gmail.com>
Tue, 7 Jun 2022 13:58:28 +0000 (15:58 +0200)
committerChristian Lamparter <chunkeey@gmail.com>
Fri, 24 Jun 2022 15:10:24 +0000 (17:10 +0200)
Don't comence the switch to RAMFS when the image format is wrong. This
led to rebooting the device, which could lead to false impression that
upgrade succeded.
Being here, factor out the code responsible for upgrading RedBoot
devices to separate file.

Signed-off-by: Tomasz Maciej Nowak <tmn505@gmail.com>
target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
target/linux/ath79/generic/base-files/lib/upgrade/redboot-fis.sh [new file with mode: 0644]

index 642a9891ff2984bcf30e3987d5e5d3a73bd24c66..f161540a68770d1df6468e53afa99193ff6bed47 100644 (file)
@@ -8,35 +8,19 @@ REQUIRE_IMAGE_METADATA=1
 RAMFS_COPY_BIN='fw_printenv fw_setenv'
 RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
 
-redboot_fis_do_upgrade() {
-       local append
-       local sysup_file="$1"
-       local kern_part="$2"
-       local magic=$(get_magic_word "$sysup_file")
-
-       if [ "$magic" = "7379" ]; then
-               local board_dir=$(tar tf $sysup_file | grep -m 1 '^sysupgrade-.*/$')
-
-               [ -f "$UPGRADE_BACKUP" ] && append="-j $UPGRADE_BACKUP"
-
-               if grep -q "mtd1.*loader" /proc/mtd; then
-                       tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
-                               mtd -r $append write - loader:firmware
-
-               else
-                       local kern_length=$(tar xf $sysup_file ${board_dir}kernel -O | wc -c)
-
-                       tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
-                               mtd -r $append -F$kern_part:$kern_length:0x80060000,rootfs write - $kern_part:rootfs
-               fi
-       else
-               echo "Unknown image, aborting!"
-               return 1
-       fi
-}
-
 platform_check_image() {
-       return 0
+       local board=$(board_name)
+
+       case "$board" in
+       jjplus,ja76pf2|\
+       ubnt,routerstation|\
+       ubnt,routerstation-pro)
+               platform_check_image_redboot_fis "$1"
+               ;;
+       *)
+               return 0
+               ;;
+       esac
 }
 
 platform_do_upgrade() {
@@ -45,7 +29,7 @@ platform_do_upgrade() {
        case "$board" in
        adtran,bsap1800-v2|\
        adtran,bsap1840)
-               redboot_fis_do_upgrade "$1" vmlinux_2
+               platform_do_upgrade_redboot_fis "$1" vmlinux_2
                ;;
        allnet,all-wap02860ac|\
        araknis,an-300-ap-i-n|\
@@ -66,7 +50,7 @@ platform_do_upgrade() {
                platform_do_upgrade_failsafe_datachk "$1"
                ;;
        jjplus,ja76pf2)
-               redboot_fis_do_upgrade "$1" linux
+               platform_do_upgrade_redboot_fis "$1" linux
                ;;
        openmesh,a40|\
        openmesh,a60|\
@@ -98,7 +82,7 @@ platform_do_upgrade() {
                ;;
        ubnt,routerstation|\
        ubnt,routerstation-pro)
-               redboot_fis_do_upgrade "$1" kernel
+               platform_do_upgrade_redboot_fis "$1" kernel
                ;;
        *)
                default_do_upgrade "$1"
diff --git a/target/linux/ath79/generic/base-files/lib/upgrade/redboot-fis.sh b/target/linux/ath79/generic/base-files/lib/upgrade/redboot-fis.sh
new file mode 100644 (file)
index 0000000..f45d9a2
--- /dev/null
@@ -0,0 +1,31 @@
+platform_check_image_redboot_fis() {
+       if [ "$(get_magic_word "$1")" != "7379" ]; then
+               v "Unknown image format, aborting!"
+               return 1
+       else
+               return 0
+       fi
+}
+
+platform_do_upgrade_redboot_fis() {
+       local append
+       local sysup_file="$1"
+       local kern_part="$2"
+
+       if [ "$(get_magic_word "$sysup_file")" = "7379" ]; then
+               local board_dir=$(tar tf $sysup_file | grep -m 1 '^sysupgrade-.*/$')
+
+               [ -f "$UPGRADE_BACKUP" ] && append="-j $UPGRADE_BACKUP"
+
+               if grep -q "mtd1.*loader" /proc/mtd; then
+                       tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
+                               mtd -r $append write - loader:firmware
+
+               else
+                       local kern_length=$(tar xf $sysup_file ${board_dir}kernel -O | wc -c)
+
+                       tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
+                               mtd -r $append -F$kern_part:$kern_length:0x80060000,rootfs write - $kern_part:rootfs
+               fi
+       fi
+}