<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <pre>cc-ing primary Imgtec / pistachio / Creator Ci40 contributors identified
</pre>
    <div class="moz-cite-prefix">
      <pre>On 5/20/19 3:14 AM, Bjørn Mork wrote:</pre>
    </div>
    <blockquote type="cite"
      cite="mid:20190520101443.9192-1-bjorn@mork.no">
      <pre class="moz-quote-pre" wrap="">nand_do_platform_check assumes that the current board name is
used as-is in the tar file sysupgrade directory.  This fails
for any image supporting multiple device names, and it also
fails if the board_name contains a comma.

Signed-off-by: Bjørn Mork <a class="moz-txt-link-rfc2396E" href="mailto:bjorn@mork.no"><bjorn@mork.no></a>
---
This is a local workaround I'va had lying around for a while.  Please
consider if it makes any sense at all, or if there are better ways
to solve the problem.

I don't have an actual upstreamed usecase, as this is an issue I've
met while trying to prepare for a never-finished ZyXEL WAP6805
support...



Bjørn

 package/base-files/files/lib/upgrade/nand.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh
index 99916a4e96fc..14856357989e 100644
--- a/package/base-files/files/lib/upgrade/nand.sh
+++ b/package/base-files/files/lib/upgrade/nand.sh
@@ -320,7 +320,9 @@ nand_do_upgrade() {
 nand_do_platform_check() {
        local board_name="$1"
        local tar_file="$2"
-       local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null`
+       local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+       board_dir=${board_dir%/}
+       local control_length=`(tar xf $tar_file ${board_dir}/CONTROL -O | wc -c) 2> /dev/null`
        local file_type="$(identify $2)"
 
        [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
</pre>
      <pre>

</pre>
    </blockquote>
    <pre>
</pre>
    <pre>Your timing as good as I've been wrestling with this as well
in context of providing ath79 support for SPI-NAND[1].

At least for me, the use case is the equivalent of

    nand_do_platform_check $(board_name) ${upgrade_file_name}

without jumping through hoops of translating the output of $(board_name)
to the expected tar-dir name for each and every instance of the call.


I don't know that there is a "better" solution, but what I have found:

* nand_do_platform_upgrade() is called by relatively few targets
  * ath79 (see [1])
  * pistachio
  * imx6
  * ar71xx

* I can see a desire to check for a *specific* tar-dir name,
  rather than just "any" tar-dir name (wrestled with this for a while)

* Only one board seems to prevent a first-comma-to-underscore approach,
  the `img,pistachio-marduk` uses `sysupgrade-img,pistachio-marduk`

  otherwise, I've got this on a development branch

+       local tar_dir_name="sysupgrade-$(echo "$board_name" | sed -e s/,/_/)"
+       local control_length=`(tar xf $tar_file ${tar_dir_name}/CONTROL -O | wc -c) 2> /dev/null`


It looks like the pistachio board could have its Makefile modified 
to bring it's tar-dir name into the "standard" underscore form,
however I don't have one of these boards to test with,
nor do I know if the file-name change would impact users.

One set of changes I explored last night comes down to

-  IMAGE/sysupgrade.tar := sysupgrade-tar
+  IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
 endef
 
-define Device/marduk
-  BOARD_NAME := img,pistachio-marduk
+define Device/img_pistachio-marduk
   DEVICE_DTS := img/pistachio_marduk
   BLOCKSIZE := 256KiB
   PAGESIZE := 4KiB
   DEVICE_TITLE := Creator Ci40
   DEVICE_PACKAGES := kmod-tpm-i2c-infineon
 endef
-
-TARGET_DEVICES += marduk
+TARGET_DEVICES += img_pistachio-marduk


commit b14444c010 (HEAD -> jmk-pistachio)
Author: Jeff Kletsky <a class="moz-txt-link-rfc2396E" href="mailto:git-commits@allycomm.com"><git-commits@allycomm.com></a>
Date:   Sun May 19 20:28:12 2019 -0700

    pistachio: Update image/Makefile for tar root and metadata
    
    Prior to this patch, the img,pistachio-marduk was the only board that
    used the comma-delimited board name for the sysupgrade-tar directory
    rather than the underscore-delimited, DTS-compatible form.
    
    To allow for easier use of $(board_name) in upgrade scripting, this
    patch brings the sysupgrade-tar directory into the more canonical
    form. It also adds append-metadata to the sysupgrade-tar image.
    
    The board name at run time should be the same as before.
    
    However, the build results have a different name, changing from
    
        openwrt-pistachio-marduk-squashfs-sysupgrade.tar
    to
        openwrt-pistachio-img_pistachio-marduk-squashfs-sysupgrade.tar




[1] <a class="moz-txt-link-freetext" href="http://patchwork.ozlabs.org/project/openwrt/list/?series=107880">http://patchwork.ozlabs.org/project/openwrt/list/?series=107880</a>
</pre>
  </body>
</html>