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

Linus Walleij linus.walleij at linaro.org
Sun May 5 05:23:27 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.

Signed-off-by: Linus Walleij <linus.walleij at 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




More information about the openwrt-devel mailing list