From 2d61c26f02557b0b3734f694efdb81a2694fdd70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sat, 19 Nov 2016 07:58:26 +0100 Subject: [PATCH] bcm53xx: support SafeLoader format in sysupgrade MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki --- target/linux/bcm53xx/Makefile | 3 +- .../base-files/lib/upgrade/platform.sh | 35 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/target/linux/bcm53xx/Makefile b/target/linux/bcm53xx/Makefile index 917e55b5e33c..a98fd3923d17 100644 --- a/target/linux/bcm53xx/Makefile +++ b/target/linux/bcm53xx/Makefile @@ -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 diff --git a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh index f0a48ddeeca7..3e4eae5a82fb 100644 --- a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh @@ -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 -- 2.30.2