ath79: routerstation: prepare to use sysupgrade-tar format image
[openwrt/staging/wigyori.git] / target / linux / ath79 / base-files / lib / upgrade / platform.sh
index a7cb455b8e9a0c6f983934d74618d4dbb2c698ca..bc19149d5c4de5a32984f34b27d1e9ce15c9593d 100644 (file)
@@ -7,11 +7,28 @@ REQUIRE_IMAGE_METADATA=1
 
 routerstation_do_upgrade() {
        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"
-       dd if="$1" bs=64k skip=1 2>/dev/null | \
-               mtd -r $append -Fkernel:$kern_length:0x80060000,rootfs write - kernel:rootfs
+       if [ "$magic" = "4349" ]; then
+               local kern_length=0x$(dd if="$sysup_file" bs=2 skip=1 count=4 2>/dev/null)
+
+               [ -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() {