[OpenWrt-Devel] [PATCH v2] gemini: Support sysupgrade on DIR-685

Linus Walleij linus.walleij at linaro.org
Sun May 12 12:13:17 PDT 2019


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.

Cc: Petr Štetiar <ynezz at true.cz>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
---
ChangeLog v1->v2:
- Append metadata to sysupgrade image
- Require metadata in platform.sh
- Strip comments
---
 .../gemini/base-files/lib/upgrade/platform.sh | 50 +++++++++++++++++++
 target/linux/gemini/image/Makefile            |  5 +-
 2 files changed, 54 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..5f7a2117cb3b
--- /dev/null
+++ b/target/linux/gemini/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,50 @@
+REQUIRE_IMAGE_METADATA=1
+
+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)
+
+	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 )
+		PART_NAME=firmware
+		default_do_upgrade "$ARGV"
+		;;
+	*)
+
+		;;
+	esac
+}
diff --git a/target/linux/gemini/image/Makefile b/target/linux/gemini/image/Makefile
index 8fec250f186a..3339cd2467a9 100644
--- a/target/linux/gemini/image/Makefile
+++ b/target/linux/gemini/image/Makefile
@@ -115,6 +115,7 @@ define Device/Default
 	KERNEL_NAME := zImage
 	KERNEL := kernel-bin | append-dtb
 	BLOCKSIZE := 128k
+	SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
 endef
 
 # A reasonable set of default packages handling the NAS type
@@ -143,9 +144,11 @@ 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 | append-metadata
+	SUPPORTED_DEVICES += dlink,dir-685
 endef
 TARGET_DEVICES += dlink_dir-685
 
-- 
2.20.1




More information about the openwrt-devel mailing list