aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Štetiar <ynezz@true.cz>2018-11-19 21:44:50 +0100
committerPetr Štetiar <ynezz@true.cz>2019-04-08 18:37:04 +0200
commit6009b3fd586a1fd91400074080afb9545c6cf7e2 (patch)
tree6f45a92511c0a6e295934dc08e520cac07e72b47
parentd23222a96caeca5f83d22ffd55e210da30eaa379 (diff)
downloadupstream-6009b3fd586a1fd91400074080afb9545c6cf7e2.tar.gz
upstream-6009b3fd586a1fd91400074080afb9545c6cf7e2.tar.bz2
upstream-6009b3fd586a1fd91400074080afb9545c6cf7e2.zip
ar71xx: ubnt-m-xw: Fix factory image flashing using TFTP recovery
This is backport of the same functionality in ath79, from commit d42a7c469 ("ath79: ubnt-m-xw: Fix factory image flashing using TFTP recovery method") Ubiquity allows flashing of unsigned factory images via TFTP recovery method[1]. They claim in airOS v6.0.7 release changelog[2] following: All future airOS versions will be signed in this way and not allow unsigned firmware to be loaded except via TFTP. U-boot bootloader on M-XW devices expects factory image revision version in specific format. On airOS v6.1.7 with `U-Boot 1.1.4-s1039 (May 24 2017 - 15:58:18)` bootloader checks if the revision major(?) number is actually a number, but in currently generated images there's OpenWrt text and so the check fails: Hit any key to stop autoboot: 0 Setting default IP 192.168.1.20 Starting TFTP server... Receiving file from 192.168.1.25:38438 Received 4981148 bytes Firmware check failed! (1) By placing arbitrary correct number first in major version, we make the bootloader happy and we can flash factory images over TFTP again: Received 3801500 bytes Firmware Version: XW.ar934x.v6.0.4-42.OpenWrt-r9766+2-be42e44 Setting U-Boot environment variables Un-Protected 1 sectors Erasing Flash.... done Patch provided by AREDN[3] project, tested on Bullet M2 XW. 1. https://help.ubnt.com/hc/en-us/articles/204910124-UniFi-TFTP-Recovery-for-Bricked-Access-Points 2. https://dl.ubnt.com/firmwares/XW-fw/v6.0.7/changelog.txt 3. https://github.com/aredn Signed-off-by: Petr Štetiar <ynezz@true.cz>
-rw-r--r--target/linux/ar71xx/image/generic-ubnt.mk13
1 files changed, 11 insertions, 2 deletions
diff --git a/target/linux/ar71xx/image/generic-ubnt.mk b/target/linux/ar71xx/image/generic-ubnt.mk
index 5db5c878fc..84471a5c50 100644
--- a/target/linux/ar71xx/image/generic-ubnt.mk
+++ b/target/linux/ar71xx/image/generic-ubnt.mk
@@ -1,4 +1,9 @@
-DEVICE_VARS += UBNT_BOARD UBNT_CHIP UBNT_TYPE
+DEVICE_VARS += UBNT_BOARD UBNT_CHIP UBNT_TYPE UBNT_VERSION UBNT_REVISION
+
+# On M (XW) devices the U-Boot as of version 1.1.4-s1039 doesn't like
+# VERSION_DIST being on the place of major(?) version number, so we need to
+# use some number.
+UBNT_REVISION := $(VERSION_DIST)-$(REVISION)
# mkubntimage is using the kernel image direct
# routerboard creates partitions out of the ubnt header
@@ -17,7 +22,7 @@ define Build/mkubntimage-split
dd if=$@ of=$@.old1 bs=1024k count=1; \
dd if=$@ of=$@.old2 bs=1024k skip=1; \
$(STAGING_DIR_HOST)/bin/mkfwimage \
- -B $(UBNT_BOARD) -v $(UBNT_TYPE).$(UBNT_CHIP).v6.0.0-$(VERSION_DIST)-$(REVISION) \
+ -B $(UBNT_BOARD) -v $(UBNT_TYPE).$(UBNT_CHIP).v$(UBNT_VERSION)-$(UBNT_REVISION) \
-k $@.old1 \
-r $@.old2 \
-o $@; \
@@ -36,12 +41,14 @@ endef
# UBNT_BOARD e.g. one of (XS2, XS5, RS, XM)
# UBNT_TYPE e.g. one of (BZ, XM, XW)
# UBNT_CHIP e.g. one of (ar7240, ar933x, ar934x)
+# UBNT_VERSION e.g. one of (6.0.0, 8.5.0)
define Device/ubnt
DEVICE_PACKAGES := kmod-usb-core kmod-usb2
DEVICE_PROFILE := UBNT
IMAGE_SIZE := 7552k
MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,7552k(firmware),256k(cfg)ro,64k(EEPROM)ro
UBNT_BOARD := XM
+ UBNT_VERSION := 6.0.0
IMAGES := sysupgrade.bin factory.bin
IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
IMAGE/factory.bin := $$(IMAGE/sysupgrade.bin) | mkubntimage-split
@@ -60,6 +67,8 @@ define Device/ubnt-xw
DEVICE_PACKAGES += rssileds
UBNT_TYPE := XW
UBNT_CHIP := ar934x
+ UBNT_VERSION := 6.0.4
+ UBNT_REVISION := 42.$(UBNT_REVISION)
endef
define Device/ubnt-bz