ipq40xx: RT-AC58U: "easy install" factory.trx
authorChristian Lamparter <chunkeey@gmail.com>
Sat, 30 Mar 2019 20:07:40 +0000 (21:07 +0100)
committerChristian Lamparter <chunkeey@gmail.com>
Tue, 9 Jun 2020 22:33:32 +0000 (00:33 +0200)
This patch adds a image-builder compatible factory install
image that can be flashed directly through both the WebUI or u-boot.

Installation Instructions for the -factory.trx image:
- For the web-console you just upload the .trx file.
  1. login into your router
  2. Select "Administration" under "Advanced Settings".
  3. Select the "Firmware Upgrade" tab
  4. Click on the "Choose File" button and select the
     firmware file.
     (If the web-interface doesn't accept the file try
      renaming it to: FW_RT-AC58U_3.1.1.1.trx)

  5. Hit "Upload" Button

- Place the -factory.trx file into your TFTP-server's
  root-directory and rename it to RT-AC58U.trx. Connect the serial
  cable and power up the router. In the serial console boot menu prompt
  you have to press the 2-key to choose:
   "2: Load System code then write to Flash via TFTP."
  and then follow the instruction on the serial console.

After the image is written to the NAND, the router will automatically
reboot into a modified u-boot that flashes the packed image before
it reboots one more time into the new OpenWrt installation.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
package/boot/uboot-fritz4040/Makefile
target/linux/ipq40xx/image/Makefile

index 21305817656e4062f8b70f7b984584c6371502fc..e552431402ce21dea4ffef31deb42b9b79ecbfaf 100644 (file)
@@ -46,6 +46,11 @@ define U-Boot/fritz7530
   BUILD_DEVICES:=avm_fritzbox-7530
 endef
 
+define U-Boot/rt_ac58u
+  NAME:=RT-AC58U
+  BUILD_DEVICES:=asus_rt-ac58u
+endef
+
 UBOOT_CONFIGURE_VARS += USE_PRIVATE_LIBGCC=yes
 UBOOT_MAKE_FLAGS = USE_PRIVATE_LIBGCC=yes
 export DTC
@@ -59,7 +64,9 @@ endef
 
 define Build/Compile
        $(Build/Compile/U-Boot)
-       (cd $(PKG_BUILD_DIR); ./fritz/fritzcreator.sh $(UBOOT_BOARD);)
+       $(if $(filter rt-ac58u,$(UBOOT_BOARD)),
+               $(CP) $(PKG_BUILD_DIR)/u-boot.bin $(PKG_BUILD_DIR)/$(UBOOT_IMAGE);,
+               (cd $(PKG_BUILD_DIR); ./fritz/fritzcreator.sh $(UBOOT_BOARD);))
 endef
 
 define Build/InstallDev
@@ -72,6 +79,6 @@ define Package/u-boot/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/upload-to-f4040.sh $(1)/
 endef
 
-UBOOT_TARGETS := fritz1200 fritz3000 fritz4040 fritz7530
+UBOOT_TARGETS := fritz1200 fritz3000 fritz4040 fritz7530 rt-ac58u
 
 $(eval $(call BuildPackage/U-Boot))
index 1d9f20b85f84cf769f6401d6b59616dd3bc38805..7ad2ec33448ca7a5c5be5b14d0061b79d7ec4f49 100644 (file)
@@ -75,6 +75,11 @@ define Build/mkmylofw_32m
                -s 0x2000000 -p0x180000:$$newsize:al:0x80208000:"OpenWrt":$@ \
                $@.new
        @mv $@.new $@
+
+define Build/prepend-factory-uboot
+       mv $@ $@.bak
+       dd if=$(UBOOT_PATH) bs=1M count=1 conv=sync > $@
+       cat $@.bak >> $@
 endef
 
 define Build/qsdk-ipq-factory-nand-askey
@@ -200,9 +205,15 @@ define Device/asus_rt-ac58u
 #      to add a version... or we are very careful not to add '\0' into that
 #      string and call it a day.... Yeah, we do the latter!
        UIMAGE_NAME:=$(shell echo -e '\03\01\01\01RT-AC58U')
-       IMAGES := sysupgrade.bin
+       IMAGES := sysupgrade.bin factory.trx
        DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers \
                kmod-usb-ledtrig-usbport
+#      The factory image uses a legacy uImage to wrap the firmware
+#      That's why we need two uImage headers at the back.
+       UBOOT_PATH := $(STAGING_DIR_IMAGE)/uboot-rt-ac58u.bin
+       IMAGE/factory.trx := sysupgrade-tar | append-metadata | uImage none | \
+            prepend-factory-uboot | uImage none | uImage none | \
+            check-size $$$$(IMAGE_SIZE)
 endef
 TARGET_DEVICES += asus_rt-ac58u