bcm53xx: support SafeLoader format in sysupgrade
authorRafał Miłecki <rafal@milecki.pl>
Sat, 19 Nov 2016 06:58:26 +0000 (07:58 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Sat, 19 Nov 2016 06:58:26 +0000 (07:58 +0100)
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
target/linux/bcm53xx/Makefile
target/linux/bcm53xx/base-files/lib/upgrade/platform.sh

index 917e55b5e33c0478e4bc0e981770e2435c96cec3..a98fd3923d1795f4d47a80a2138219ec939dc44e 100644 (file)
@@ -23,7 +23,8 @@ include $(INCLUDE_DIR)/target.mk
 
 KERNELNAME:=zImage dtbs
 
-DEFAULT_PACKAGES += swconfig wpad-mini nvram oseama otrx \
+DEFAULT_PACKAGES += swconfig wpad-mini nvram \
+       osafeloader oseama otrx \
        kmod-gpio-button-hotplug \
        kmod-leds-gpio kmod-ledtrig-default-on kmod-ledtrig-timer
 
index f0a48ddeeca76b92f0cee66a94e40a42adf83925..3e4eae5a82fba979e4f50b51646cb93ce610b1f1 100644 (file)
@@ -59,6 +59,11 @@ platform_identify() {
                return
        }
 
+       if osafeloader info "$1" > /dev/null; then
+               echo "safeloader"
+               return
+       fi
+
        echo "unknown"
 }
 
@@ -102,6 +107,8 @@ platform_check_image() {
                                error=1
                        fi
                ;;
+               "safeloader")
+               ;;
                "seama")
                        local img_signature=$(oseama info "$1" | grep "Meta entry:.*signature=" | sed "s/.*=//")
                        local dev_signature=$(platform_expected_image)
@@ -118,6 +125,13 @@ platform_check_image() {
                        }
                ;;
                "trx")
+                       local expected=$(platform_expected_image)
+
+                       [ "$expected" == "safeloader" ] && {
+                               echo "This device expects SafeLoader format and may not work with TRX"
+                               error=1
+                       }
+
                        if ! otrx check "$1"; then
                                echo "Invalid (corrupted?) TRX firmware"
                                error=1
@@ -245,7 +259,7 @@ platform_pre_upgrade_seama() {
 }
 
 platform_pre_upgrade() {
-       export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/bin/oseama /bin/sed"
+       export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/bin/osafeloader /usr/bin/oseama /bin/sed"
 
        local file_type=$(platform_identify "$1")
 
@@ -270,6 +284,24 @@ platform_trx_from_cybertan_cmd() {
        echo -n dd bs=32 skip=1
 }
 
+platform_img_from_safeloader() {
+       local dir="/tmp/sysupgrade-bcm53xx"
+
+       # Extract partitions from SafeLoader
+       rm -fR $dir
+       mkdir -p $dir
+       osafeloader extract "$1" \
+               -p "os-image" \
+               -o $dir/os-image
+       osafeloader extract "$1" \
+               -p "file-system" \
+               -o $dir/file-system
+
+       mtd write $dir/file-system rootfs
+
+       echo -n $dir/os-image
+}
+
 platform_img_from_seama() {
        local dir="/tmp/sysupgrade-bcm53xx"
        local offset=$(oseama info "$1" -e 0 | grep "Entity offset:" | sed "s/.*:\s*//")
@@ -298,6 +330,7 @@ platform_do_upgrade() {
        case "$file_type" in
                "chk")          cmd=$(platform_trx_from_chk_cmd "$trx");;
                "cybertan")     cmd=$(platform_trx_from_cybertan_cmd "$trx");;
+               "safeloader")   trx=$(platform_img_from_safeloader "$trx");;
                "seama")        trx=$(platform_img_from_seama "$trx");;
        esac