ath79: routerstation: prepare to use sysupgrade-tar format image

In PR [1] introducing initial support for Ubiquiti RouterStation boards,
Mathias Kresin suggested to replace the combined sysupgrade image with
tarball generated by sysupgrade-tar.sh. This would simplify deployment
of sysupgrade as the kernel size (needed to update FIS partition) could
be simply calculated on the fly instead of reading value from combined
image header. Unfortunately this would break sysupgrade compatibility
between ar71xx image and ath79 image. Therefore this commit creates
migration path to use new sysuprade image, it adds code to accept both
of them at this moment. The plan is to keep it until new stable version
is released. Then the image recipe should be changed to new format and
compatibility code for old image removed.

1. https://github.com/openwrt/openwrt/pull/1237

Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
This commit is contained in:
Tomasz Maciej Nowak 2019-03-04 15:14:18 +01:00 committed by Christian Lamparter
parent f3da2ebf90
commit 8f6f260302
2 changed files with 23 additions and 5 deletions

View File

@ -7,11 +7,28 @@ REQUIRE_IMAGE_METADATA=1
routerstation_do_upgrade() { routerstation_do_upgrade() {
local append local append
local kern_length=0x$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null) local sysup_file="$1"
local magic=$(get_magic_word "$sysup_file")
[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR" if [ "$magic" = "4349" ]; then
dd if="$1" bs=64k skip=1 2>/dev/null | \ local kern_length=0x$(dd if="$sysup_file" bs=2 skip=1 count=4 2>/dev/null)
mtd -r $append -Fkernel:$kern_length:0x80060000,rootfs write - kernel:rootfs
[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
dd if="$sysup_file" bs=64k skip=1 2>/dev/null | \
mtd -r $append -Fkernel:$kern_length:0x80060000,rootfs write - kernel:rootfs
elif [ "$magic" = "7379" ]; then
local board_dir=$(tar tf $sysup_file | grep -m 1 '^sysupgrade-.*/$')
local kern_length=$(tar xf $sysup_file ${board_dir}kernel -O | wc -c)
[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
mtd -r $append -Fkernel:$kern_length:0x80060000,rootfs write - kernel:rootfs
else
echo "Unknown image, aborting!"
return 1
fi
} }
platform_check_image() { platform_check_image() {

View File

@ -195,7 +195,8 @@ define Device/ubnt_routerstation_common
IMAGE_SIZE := 16128k IMAGE_SIZE := 16128k
IMAGES += factory.bin IMAGES += factory.bin
IMAGE/factory.bin := append-rootfs | pad-rootfs | mkubntimage | check-size $$$$(IMAGE_SIZE) IMAGE/factory.bin := append-rootfs | pad-rootfs | mkubntimage | check-size $$$$(IMAGE_SIZE)
IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | check-size $$$$(IMAGE_SIZE) | append-metadata IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | check-size $$$$(IMAGE_SIZE)
# IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) | sysupgrade-tar rootfs=$$$$@ | append-metadata
KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE) KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE)
KERNEL_INITRAMFS := kernel-bin | append-dtb KERNEL_INITRAMFS := kernel-bin | append-dtb
endef endef