Author: rmilecki Date: 2016-01-28 23:38:37 +0100 (Thu, 28 Jan 2016) New Revision: 48535
Modified: trunk/target/linux/bcm53xx/Makefile trunk/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh Log: bcm53xx: basic support for Seama format in sysupgrade Signed-off-by: Rafa?\197?\130 Mi?\197?\130ecki <[email protected]> Modified: trunk/target/linux/bcm53xx/Makefile =================================================================== --- trunk/target/linux/bcm53xx/Makefile 2016-01-28 22:38:30 UTC (rev 48534) +++ trunk/target/linux/bcm53xx/Makefile 2016-01-28 22:38:37 UTC (rev 48535) @@ -23,7 +23,7 @@ KERNELNAME:=zImage dtbs -DEFAULT_PACKAGES += swconfig wpad-mini nvram otrx \ +DEFAULT_PACKAGES += swconfig wpad-mini nvram oseama otrx \ kmod-gpio-button-hotplug \ kmod-leds-gpio kmod-ledtrig-default-on kmod-ledtrig-timer Modified: trunk/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh =================================================================== --- trunk/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh 2016-01-28 22:38:30 UTC (rev 48534) +++ trunk/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh 2016-01-28 22:38:37 UTC (rev 48535) @@ -100,8 +100,19 @@ fi ;; "seama") - echo "Seama firmware format is unsupported" - error=1 + local img_signature=$(oseama info "$1" | grep "Meta entry:.*signature=" | sed "s/.*=//") + local dev_signature=$(platform_expected_image) + echo "Found Seama image with device signature: $img_signature" + + [ -n "$dev_signature" -a "seama $img_signature" != "$dev_signature" ] && { + echo "Firmware signature doesn't match device signature ($dev_signature)" + error=1 + } + + $(oseama info "$1" -e 0 | grep -q "Meta entry:.*type=firmware") || { + echo "Seama container doesn't have firmware entity" + error=1 + } ;; "trx") if ! otrx check "$1"; then @@ -119,6 +130,8 @@ } platform_pre_upgrade() { + export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/bin/oseama /bin/sed" + local file_type=$(platform_identify "$1") local dir="/tmp/sysupgrade-bcm53xx" local trx="$1" @@ -130,6 +143,7 @@ case "$file_type" in "chk") offset=$((0x$(get_magic_long_at "$1" 4)));; "cybertan") offset=32;; + "seama") return;; esac # Extract partitions from trx @@ -200,6 +214,22 @@ echo -n dd bs=32 skip=1 } +platform_img_from_seama() { + local dir="/tmp/sysupgrade-bcm53xx" + local offset=$(oseama info "$1" -e 0 | grep "Entity offset:" | sed "s/.*:\s*//") + local size=$(oseama info "$1" -e 0 | grep "Entity size:" | sed "s/.*:\s*//") + + # Busybox doesn't support required iflag-s + # echo -n dd iflag=skip_bytes,count_bytes skip=$offset count=$size + + rm -fR $dir + mkdir -p $dir + dd if="$1" of=$dir/image-noheader.bin bs=$offset skip=1 + dd if=$dir/image-noheader.bin of=$dir/image-entity.bin bs=$size count=1 + + echo -n $dir/image-entity.bin +} + platform_do_upgrade() { local file_type=$(platform_identify "$1") local trx="$1" @@ -212,6 +242,7 @@ case "$file_type" in "chk") cmd=$(platform_trx_from_chk_cmd "$trx");; "cybertan") cmd=$(platform_trx_from_cybertan_cmd "$trx");; + "seama") trx=$(platform_img_from_seama "$trx");; esac default_do_upgrade "$trx" "$cmd" _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
