This makes sysupgrade work on the D-Link DIR-685 after
initial factory install.

We create the platform.sh script to support sysupgrade
on more targets as we move on with sysupgrade support.

Signed-off-by: Linus Walleij <linus.wall...@linaro.org>
---
 .../gemini/base-files/lib/upgrade/platform.sh | 54 +++++++++++++++++++
 target/linux/gemini/image/Makefile            |  3 +-
 2 files changed, 56 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/gemini/base-files/lib/upgrade/platform.sh

diff --git a/target/linux/gemini/base-files/lib/upgrade/platform.sh 
b/target/linux/gemini/base-files/lib/upgrade/platform.sh
new file mode 100644
index 000000000000..0c6fc44ee725
--- /dev/null
+++ b/target/linux/gemini/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,54 @@
+wrgg_get_image_magic() {
+       get_image "$@" | dd bs=4 count=1 skip=8 2>/dev/null | hexdump -v -n 4 
-e '1/1 "%02x"'
+}
+
+platform_find_part_size() {
+       local first dev size erasesize name
+       while read dev size erasesize name; do
+               name=${name#'"'}; name=${name%'"'}
+               [ "$name" = "$1" ] && {
+                       echo "$size"
+                       break
+               }
+       done < /proc/mtd
+}
+
+platform_check_image() {
+       local board=$(board_name)
+       # TODO: check size of sysupgrade image
+
+       case "$board" in
+       dlink,dir-685 )
+               local magic=$(wrgg_get_image_magic "$1")
+               [ "$magic" != "21030820" ] && {
+                       echo "Invalid image. Bad magic for DIR-685."
+                       return 1
+               }
+               echo "Image looks OK"
+               return 0
+               ;;
+       esac
+
+       echo "Sysupgrade is not yet supported on $board."
+       return 1
+}
+
+platform_do_upgrade() {
+       local board=$(board_name)
+
+       v "board=$board"
+       case "$board" in
+       dlink,dir-685 )
+               # This will overwrite "firmware" which means that the
+               # partitions "kernel", "rootfs" and "rootfs_data" get
+               # overwritten in the flash. The "kernel" image has the
+               # necessary boot loader magic attached to it, and after
+               # the "rootfs" there is an empty space marker for "rootfs_data"
+               PART_NAME=firmware
+               default_do_upgrade "$ARGV"
+               ;;
+       *)
+
+               ;;
+       esac
+}
diff --git a/target/linux/gemini/image/Makefile 
b/target/linux/gemini/image/Makefile
index 8fec250f186a..a7001eb0068a 100644
--- a/target/linux/gemini/image/Makefile
+++ b/target/linux/gemini/image/Makefile
@@ -143,9 +143,10 @@ define Device/dlink_dir-685
        DEVICE_PACKAGES := $(GEMINI_NAS_PACKAGES) \
                        kmod-switch-rtl8366rb swconfig \
                        kmod-rt2800-pci
-       IMAGES := factory.bin
+       IMAGES := factory.bin sysupgrade.bin
        # Pad to 128k erase blocks with 160 bytes WRGG header
        IMAGE/factory.bin := append-kernel | pad-offset 128k 160 | 
append-rootfs | dir685-pad-rootfs | dir685-image
+       IMAGE/sysupgrade.bin := append-kernel | pad-offset 128k 160 | 
dir685-image | append-rootfs | dir685-pad-rootfs
 endef
 TARGET_DEVICES += dlink_dir-685
 
-- 
2.20.1


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

Reply via email to