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>
Sat, 19 Oct 2019 16:50:48 +0000 (18:50 +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 0744c27..6eb0ae2 100644 (file)
@@ -41,6 +41,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
@@ -54,7 +59,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
@@ -67,6 +74,6 @@ define Package/u-boot/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/upload-to-f4040.sh $(1)/
 endef
 
-UBOOT_TARGETS := fritz3000 fritz4040 fritz7530
+UBOOT_TARGETS := fritz3000 fritz4040 fritz7530 rt-ac58u
 
 $(eval $(call BuildPackage/U-Boot))
index 4572ab4..4fae7ff 100644 (file)
@@ -1,7 +1,13 @@
 include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/image.mk
 
-DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION
+DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION UBOOT_PATH
+
+define Build/prepend-factory-uboot
+       mv $@ $@.bak
+       dd if=$(UBOOT_PATH) bs=1M count=1 conv=sync > $@
+       cat $@.bak >> $@
+endef
 
 define Device/Default
        PROFILES := Default
@@ -113,7 +119,13 @@ 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
+#      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)
        DEVICE_PACKAGES := kmod-usb-ledtrig-usbport
 endef
 TARGET_DEVICES += asus_rt-ac58u