ath79: move image check for devices with RedBoot

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>
(cherry picked from commit 5897c52e78)
This commit is contained in:
Tomasz Maciej Nowak 2022-07-04 14:23:04 +02:00 committed by Christian Lamparter
parent 8e09f9ffc3
commit 94530067ad
2 changed files with 46 additions and 31 deletions

View 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"

View File

@ -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
}