Hi,

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-boun...@lists.openwrt.org]
> On Behalf Of Rafal Milecki
> Sent: Dienstag, 23. März 2021 16:04
> To: openwrt-devel@lists.openwrt.org
> Cc: Álvaro Fernández Rojas <nolt...@gmail.com>; Rafał Miłecki
> <ra...@milecki.pl>
> Subject: [PATCH] bcm4908: implement basic sysupgrade support
> 
> From: Rafał Miłecki <ra...@milecki.pl>
> 
> It isn't UBI aware yet - that remains to be implemented.

The usual nitpicks below ...

[...]

> --- /dev/null
> +++ b/target/linux/bcm4908/base-files/lib/upgrade/platform.sh
> @@ -0,0 +1,114 @@
> +#!/bin/sh

Shebang can be dropped here (/lib und not execute bit) ...

> +# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
> +
> +RAMFS_COPY_BIN="bcm63xx-bootfs"
> +
> +PART_NAME=firmware
> +
> +# $(1): file to read magic from
> +# $(2): offset in bytes
> +# $(3): length in bytes
> +get_content() {
> +     dd if="$1" skip=$2 bs=1 count=$3 2>/dev/null }
> +
> +platform_expected_image() {
> +     local machine=$(board_name)
> +
> +     case "$machine" in
> +             "asus,gt-ac5300")               echo "asus GT-AC5300";
> return;;
> +             "netgear,r8000p")               echo "chk
> U12H359T00_NETGEAR"; return;;
> +             "tplink,archer-c2300-v1")       echo ""; return;;
> +     esac
> +}

I don't think we need the "return" statements here?
Apart from that, we don't need the quotes on the case vars (e.g. 
asus,gt-ac5300) either ...

> +
> +platform_identify() {
> +     local magic
> +     local size
> +
> +     size=$(wc -c "$1" | cut -d ' ' -f 1)
> +
> +     magic=$(get_content "$1" $(($size - 20 - 64 + 8)) 12)

"$" can be dropped on "size".

> +     [ "$magic" = "GT-AC5300" ] && {
> +             echo "asus"
> +             return
> +     }
> +
> +     echo "unknown"
> +}

One could modify this towards a case with default "unknown" (and drop the 
return again) ...

> +
> +platform_check_image() {
> +     [ "$#" -gt 1 ] && return 1
> +
> +     local expected_image="$(platform_expected_image)"
> +     local file_type=$(platform_identify "$1")
> +     local error=0
> +
> +     case "$file_type" in
> +             "asus")
> +                     local size=$(wc -c "$1" | cut -d ' ' -f 1)
> +                     local productid=$(get_content "$1" $(($size - 20 - 64 +
> 8)) 12)

"$" can be dropped on size ...

> +
> +                     [ -n "$expected_image" -a "asus $productid" !=
> "$expected_image" ] && {
> +                             echo "Firmware productid mismatch
> ($productid)"
> +                             error=1
> +                     }
> +             ;;
> +             *)
> +                     echo "Invalid image type. Please use firmware specific
> for this device."
> +                     notify_firmware_broken
> +                     error=1
> +             ;;
> +     esac
> +
> +     return $error
> +}
> +
> +platform_calc_new_cferam() {
> +     local mtd=$(find_mtd_part $PART_NAME)
> +     [ -z "$mtd" ] && {
> +             echo "Failed to find $PART_NAME partition" >&2
> +             return
> +     }
> +
> +     local idx=$(bcm63xx-bootfs ls $mtd | sed -n
> 's/cferam\.\(\d\d\d\)/\1/p')
> +     [ -z "$idx" ] && {
> +             echo "Failed to find cferam current index" >&2
> +             return
> +     }
> +
> +     idx=$(($idx + 1))

"$" can be dropped on idx

> +     [ "$idx" = "1000" ] && idx=0
> +
> +     echo $(printf "cferam.%03d" $idx)
> +}
> +
> +platform_img_from_asus_cmd() {
> +     local size=$(wc -c "$1" | cut -d ' ' -f 1)
> +
> +     # Use bs=1 to workaround missing iflag=count_bytes
> +     echo -n dd bs=1 count=$(($size - 20 - 64)) }

$size -> size

Best

Adrian

> +
> +platform_do_upgrade() {
> +     local file_type=$(platform_identify "$1")
> +     local cmd=
> +
> +     # Find target cferam name
> +     local cferam="$(platform_calc_new_cferam)"
> +     [ -z "$cferam" ] && exit 1
> +
> +     bcm63xx-bootfs mv $1 cferam.000 $cferam || {
> +             echo "Failed to rename cferam.000 to $cferam" >&2
> +             exit 1
> +     }
> +
> +     # Flash new firmware
> +     case "$file_type" in
> +             "asus")         cmd=$(platform_img_from_asus_cmd "$1");;
> +     esac
> +     mtd erase firmware
> +     default_do_upgrade "$1" "$cmd"
> +
> +     echo "SUCCESS! Used $cferam"
> +}
> --
> 2.26.2
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Attachment: openpgp-digital-signature.asc
Description: PGP signature

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to