aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOever González <notengobattery@gmail.com>2019-01-23 21:20:55 -0600
committerChristian Lamparter <chunkeey@gmail.com>2019-01-26 21:43:07 +0100
commit892d741259ae1f8c4b18ba8ae26c7f85f83f6340 (patch)
tree8c5f3493eeab98d186b433435892958f080cff1e
parentc43acdf34201c33a6139eca7d3e9e3913e841b59 (diff)
downloadupstream-892d741259ae1f8c4b18ba8ae26c7f85f83f6340.tar.gz
upstream-892d741259ae1f8c4b18ba8ae26c7f85f83f6340.tar.bz2
upstream-892d741259ae1f8c4b18ba8ae26c7f85f83f6340.zip
build: add a script for generating Linksys factory images
This commit adds the 'Build/linksys-image' rule and the 'linksys-image.sh' script to the build system. This change is needed for generating factory images for the Linksys EA6350v3 device. Without this patch, only valid sysupgrade images can be generated. With this patch, users can flash the device without the need of physical access or disassembly. Signed-off-by: Ryan Pannell <ryan@osukl.com> Signed-off-by: Oever González <notengobattery@gmail.com>
-rw-r--r--include/image-commands.mk7
-rwxr-xr-xscripts/linksys-image.sh67
2 files changed, 74 insertions, 0 deletions
diff --git a/include/image-commands.mk b/include/image-commands.mk
index 70c09ad90c..56bad539b3 100644
--- a/include/image-commands.mk
+++ b/include/image-commands.mk
@@ -274,6 +274,13 @@ define Build/combined-image
@mv $@.new $@
endef
+define Build/linksys-image
+ $(TOPDIR)/scripts/linksys-image.sh \
+ "$(call param_get_default,type,$(1),$(DEVICE_NAME))" \
+ $@ $@.new
+ mv $@.new $@
+endef
+
define Build/openmesh-image
$(TOPDIR)/scripts/om-fwupgradecfg-gen.sh \
"$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \
diff --git a/scripts/linksys-image.sh b/scripts/linksys-image.sh
new file mode 100755
index 0000000000..36a676d964
--- /dev/null
+++ b/scripts/linksys-image.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 Oceanic Systems (UK) Ltd
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# Maintained by: Ryan Pannell <ryan [at] o s u k l .com> <github.com/Escalion>
+#
+# Write Linksys signature for factory image
+# This is appended to the factory image and is tested by the Linksys Upgrader - as observed in civic.
+# The footer is 256 bytes. The format is:
+# .LINKSYS. This is detected by the Linksys upgrader before continuing with upgrade. (9 bytes)
+# <VERSION> The version number of upgrade. Not checked so use arbitary value (8 bytes)
+# <TYPE> Model of target device, padded (0x20) to (15 bytes)
+# <CRC> CRC checksum of the image to flash (8 byte)
+# <padding> Padding (0x20) (7 bytes)
+# <signature> Signature of signer. Not checked so use Arbitary value (16 bytes)
+# <padding> Padding (0x00) (192 bytes)
+# 0x0A (1 byte)
+
+## version history
+# * version 1: initial commit
+
+set -e
+
+ME="${0##*/}"
+
+usage() {
+ echo "Usage: $ME <type> <in filename>"
+ [ "$IMG_OUT" ] && rm -f "$IMG_OUT"
+ exit 1
+}
+
+[ "$#" -lt 3 ] && usage
+
+TYPE=$1
+
+tmpdir="$( mktemp -d 2> /dev/null )"
+if [ -z "$tmpdir" ]; then
+ # try OSX signature
+ tmpdir="$( mktemp -t 'ubitmp' -d )"
+fi
+
+if [ -z "$tmpdir" ]; then
+ exit 1
+fi
+
+trap "rm -rf $tmpdir" EXIT
+
+IMG_TMP_OUT="${tmpdir}/out"
+
+IMG_IN=$2
+IMG_OUT="${IMG_IN}.new"
+
+[ ! -f "$IMG_IN" ] && echo "$ME: Not a valid image: $IMG_IN" && usage
+
+dd if="${IMG_IN}" of="${IMG_TMP_OUT}"
+CRC=$(printf "%08X" $(dd if="${IMG_IN}" bs=$(stat -c%s "${IMG_IN}") count=1|cksum| cut -d ' ' -f1))
+
+printf ".LINKSYS.01000409%-15s%-8s%-7s%-16s" "${TYPE}" "${CRC}" "" "K0000000F0246434" >> "${IMG_TMP_OUT}"
+
+dd if=/dev/zero bs=1 count=192 conv=notrunc >> "${IMG_TMP_OUT}"
+
+printf '\12' >> "${IMG_TMP_OUT}"
+
+cp "${IMG_TMP_OUT}" "${IMG_OUT}"