X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=target%2Flinux%2Fbcm53xx%2Fbase-files%2Flib%2Fupgrade%2Fplatform.sh;h=e9a3dc49501862d0844be9b826cdcf7d30b99111;hp=4920b55cafd5a0d8319dd674bf567cfbb0662259;hb=1dfa8f37db2a4778bf664b32c05e1630bb281699;hpb=5e90144aec50f1a394f62ef4691c7c51f5517cbe diff --git a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh index 4920b55caf..e9a3dc4950 100644 --- a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh @@ -26,6 +26,7 @@ platform_expected_image() { case "$machine" in "netgear,r6250v1") echo "chk U12H245T00_NETGEAR"; return;; "netgear,r6300v2") echo "chk U12H240T00_NETGEAR"; return;; + "netgear,r7000") echo "chk U12H270T00_NETGEAR"; return;; "netgear,r8000") echo "chk U12H315T00_NETGEAR"; return;; esac } @@ -43,6 +44,10 @@ platform_identify() { echo "chk" return ;; + "5ea3a417") + echo "seama" + return + ;; esac magic=$(get_magic_long_at "$1" 14) @@ -94,6 +99,10 @@ platform_check_image() { error=1 fi ;; + "seama") + echo "Seama firmware format is unsupported" + error=1 + ;; "trx") if ! otrx check "$1"; then echo "Invalid (corrupted?) TRX firmware" @@ -109,16 +118,6 @@ platform_check_image() { return $error } -platform_extract_trx_from_chk() { - local header_len=$((0x$(get_magic_long_at "$1" 4))) - - dd if="$1" of="$2" bs=$header_len skip=1 -} - -platform_extract_trx_from_cybertan() { - dd if="$1" of="$2" bs=32 skip=1 -} - platform_pre_upgrade() { local file_type=$(platform_identify "$1") local dir="/tmp/sysupgrade-bcm53xx" @@ -140,6 +139,10 @@ platform_pre_upgrade() { ${offset:+-o $offset} \ -1 $dir/kernel \ -2 $dir/root + [ $? -ne 0 ] && { + echo "Failed to extract TRX partitions." + return + } # Firmwares without UBI image should be flashed "normally" local root_type=$(identify $dir/root) @@ -166,6 +169,10 @@ platform_pre_upgrade() { otrx create /tmp/kernel.trx \ -f $dir/kernel -b $(($linux_length + 28)) \ -f /tmp/null.bin + [ $? -ne 0 ] && { + echo "Failed to create simple TRX with new kernel." + return + } # Prepare UBI image (drop unwanted extra blocks) local ubi_length=0 @@ -173,25 +180,39 @@ platform_pre_upgrade() { ubi_length=$(($ubi_length + 131072)) done dd if=$dir/root of=/tmp/root.ubi bs=131072 count=$((ubi_length / 131072)) 2>/dev/null + [ $? -ne 0 ] && { + echo "Failed to prepare new UBI image." + return + } # Flash mtd write /tmp/kernel.trx firmware nand_do_upgrade /tmp/root.ubi } +platform_trx_from_chk_cmd() { + local header_len=$((0x$(get_magic_long_at "$1" 4))) + + echo -n dd bs=$header_len skip=1 +} + +platform_trx_from_cybertan_cmd() { + echo -n dd bs=32 skip=1 +} + platform_do_upgrade() { local file_type=$(platform_identify "$1") local trx="$1" + local cmd= [ "$(platform_flash_type)" == "nand" ] && { echo "Writing whole image to NAND flash. All erase counters will be lost." } case "$file_type" in - "chk") trx="/tmp/$(basename $1).trx"; platform_extract_trx_from_chk "$1" "$trx";; - "cybertan") trx="/tmp/$(basename $1).trx"; platform_extract_trx_from_cybertan "$1" "$trx";; + "chk") cmd=$(platform_trx_from_chk_cmd "$trx");; + "cybertan") cmd=$(platform_trx_from_cybertan_cmd "$trx");; esac - shift - default_do_upgrade "$trx" "$@" + default_do_upgrade "$trx" "$cmd" }