aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2021-01-23 11:08:12 +0100
committerPetr Štetiar <ynezz@true.cz>2021-01-24 18:12:34 +0100
commit1fb413e6579a34a0040b526e681298909dfaa5ac (patch)
tree7bace9ef41e3b233814ef35b2bef57855a338bec /target/linux
parentca4832fcac83bc375a48648bd77d3283d0742128 (diff)
downloadupstream-1fb413e6579a34a0040b526e681298909dfaa5ac.tar.gz
upstream-1fb413e6579a34a0040b526e681298909dfaa5ac.tar.bz2
upstream-1fb413e6579a34a0040b526e681298909dfaa5ac.zip
realtek: build ZyXEL vendor firmware compatible initramfs
Append a device specific version trailer used by the stock firmware upgrade application to validate firmwares. The trailer contains a list of ZyXEL firmware version numbers, which includes a four letter hardware identifier. The stock web UI requires that the current hardware matches one of the listed versions, and that the version number is larger than a model specific minimum value. The minimum version varies between V1.00 and V2.60 for the currently known GS1900 models. The number is not used anywhere else to our knowlege, and has no direct relation to the version info in the u-image header. We can therefore use an arbitrary value larger than V2.60. The stock firmware upgrade application will only load and flash the part of the file specified in the u-image header, regardless of file size. It can therefore not be used to flash images with an appended rootfs. There is therefore no need to include the trailer in other images than the initramfs. This prevents accidentally bricking by attempts to flash other images from the stock web UI. Stock images support all models in the series, listing all of them in the version trailer. OpenWrt provide model specific images. We therefore only list the single supported hardware identifier for each image. This eliminates the risk of flashing the wrong OpenWrt image from stock web UI. OpenWrt can be installed from stock firmware in two steps: 1) flash OpenWrt initramfs image from stock web gui 2) boot OpenWrt and sysupgrade to a squasfs image The OpenWrt squashfs image depends on a static partition map in the DTS. It can only be installed to the "firmware" partition. This partition is labeled "RUNTIME1" in u-boot and in stock firmware, and is referred to as "image 0" in the stock flash management tool. The OpenWrt initramfs can be installed and run from either partitions. But if you want to keep stock irmware in the spare system partition, then you must make sure stock firmware is installed to the "RUNTIME2" partition referred to as "image 1" in the stock web UI. And the initial OpenWrt initramfs must be flashed to "RUNTIME1"/"image 0". The stock flash management application supports direct selection of both which partition to flash and which partition to boot next. This allows software controlled "dual-boot" between OpenWrt and stock firmware, without using console access to u-boot. u-boot use the "bootpartition" variable stored in the second u-boot environment to select which of the two system partitions to boot. This variable is set by the stock flash management application, by direct user input. It can also be set in OpenWrt using e.g fw_setsys bootpartition 1 to select "RUNTIME2"/"image 1" as default, assuming a stock firmware version is installed in that partition. Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/realtek/image/Makefile11
1 files changed, 11 insertions, 0 deletions
diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile
index c05c504ec4..8ad7ad1b5d 100644
--- a/target/linux/realtek/image/Makefile
+++ b/target/linux/realtek/image/Makefile
@@ -7,6 +7,14 @@ include $(INCLUDE_DIR)/image.mk
KERNEL_LOADADDR = 0x80000000
KERNEL_ENTRY = 0x80000400
+define Build/zyxel-vers
+ ( echo VERS;\
+ for hw in $(1); do\
+ echo -n "V9.99($$hw.0) | ";\
+ date -d @$(SOURCE_DATE_EPOCH) +%m/%d/%Y;\
+ done ) >> $@
+endef
+
define Device/Default
PROFILES = Default
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip
@@ -70,6 +78,7 @@ define Device/zyxel_gs1900-10hp
DEVICE_VENDOR := ZyXEL
DEVICE_MODEL := GS1900-10HP
UIMAGE_MAGIC := 0x83800000
+ KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | zyxel-vers AAZI | uImage gzip
endef
TARGET_DEVICES += zyxel_gs1900-10hp
@@ -81,6 +90,7 @@ define Device/zyxel_gs1900-8hp-v1
DEVICE_VARIANT := v1
DEVICE_PACKAGES += lua-rs232
UIMAGE_MAGIC := 0x83800000
+ KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | zyxel-vers AAHI | uImage gzip
endef
TARGET_DEVICES += zyxel_gs1900-8hp-v1
@@ -92,6 +102,7 @@ define Device/zyxel_gs1900-8hp-v2
DEVICE_VARIANT := v2
DEVICE_PACKAGES += lua-rs232
UIMAGE_MAGIC := 0x83800000
+ KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | zyxel-vers AAHI | uImage gzip
endef
TARGET_DEVICES += zyxel_gs1900-8hp-v2