[openwrt/openwrt] realtek: build ZyXEL vendor firmware compatible initramfs

LEDE Commits lede-commits at lists.infradead.org
Sun Jan 24 12:12:51 EST 2021


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/1fb413e6579a34a0040b526e681298909dfaa5ac

commit 1fb413e6579a34a0040b526e681298909dfaa5ac
Author: Bjørn Mork <bjorn at mork.no>
AuthorDate: Sat Jan 23 11:08:12 2021 +0100

    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 at mork.no>
---
 target/linux/realtek/image/Makefile | 11 +++++++++++
 1 file changed, 11 insertions(+)

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
 



More information about the lede-commits mailing list