diff --git a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh index 642a9891ff2984..f161540a68770d 100644 --- a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh @@ -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 index 00000000000000..f45d9a2e790ec4 --- /dev/null +++ b/target/linux/ath79/generic/base-files/lib/upgrade/redboot-fis.sh @@ -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 +}