aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/image
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2015-12-12 07:38:06 +0000
committerJohn Crispin <blogic@openwrt.org>2015-12-12 07:38:06 +0000
commit3493985b2b277ebdb762fc8a5bfb1b94c1994e73 (patch)
tree00b6f08cab505f825a8b7c4f52872ae14eb6d2a5 /target/linux/ramips/image
parentc4c9a719f166242e9e2bc7c20655f68051258c0f (diff)
downloadmaster-187ad058-3493985b2b277ebdb762fc8a5bfb1b94c1994e73.tar.gz
master-187ad058-3493985b2b277ebdb762fc8a5bfb1b94c1994e73.tar.bz2
master-187ad058-3493985b2b277ebdb762fc8a5bfb1b94c1994e73.zip
ramips: add support for Ubiquiti EdgeRouter X (UBNT-ERX)
This router is based on MT7621 SoC, no wifi, no usb, nand. Works: * Boots. * Ethernet. * Switch. * Button (reset). * Flashing OpenWrt from stock firmware. * Upgrading OpenWrt. Doesn't work: * No GPIO leds. All leds are controlled by switch, but stock firmware was able to control them. * SoC has crypto engine but no open driver. * SoC has nat acceleration, but no open driver. * This router has 2MB spi flash soldered in but MT nand/spi drivers do not support pin sharing, so it is not accessable and disabled. Stock firmware could read it and it was empty. * PoE out. Router has serial pins populated. If looking at the top of the router, then counting from Eth sockets pins go as: 'GND, RX, TX, GND'. 3.3v, 57600. U-boot bootloader supports tftpboot, controlled from serial. This router has two kernel partitions: 'live' and 'backup'. They are swapped during flashing (on both stock and OpenWrt). Active partition is controlled by a flag in a factory partition. U-boot has custom command to switch active kernel partition. Kernel partitions are 'bare flash' 3MB. Stock bootloader has no UBI support. Stock rootfs is UBIFS. Flashing procedure. Stock firmware uses custom kernel patch to mount squashfs from a file that is located on UBIFS volume. This makes wiping out this volume from within stock firmware difficult. Instead this patch builds image that is flashable by stock firmware and contains initrams image (with minimal set of packages to fit into kernel partition). Once this is flashed one can reboot into initramfs OpenWrt and use sysupgrade to flash OpenWrt including rootfs into nand. Note: factory image is only built if initramfs image is enabled. Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@47881 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ramips/image')
-rw-r--r--target/linux/ramips/image/Makefile61
1 files changed, 60 insertions, 1 deletions
diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile
index 63d6222223..1b12249c82 100644
--- a/target/linux/ramips/image/Makefile
+++ b/target/linux/ramips/image/Makefile
@@ -69,6 +69,51 @@ define Build/relocate-kernel
mv $@.new $@
endef
+define Build/ubnt-erx-factory-compat
+ echo '21001:6' > $@.compat
+ $(TAR) -cf $@ --transform='s/^.*/compat/' $@.compat
+ $(RM) $@.compat
+endef
+
+define Build/ubnt-erx-factory-kernel
+ if [ -e $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE) ]; then \
+ $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp/' $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE); \
+ \
+ md5sum --binary $(BIN_DIR)/$(KERNEL_INITRAMFS_IMAGE) | awk '{print $$1}'> $@.md5; \
+ $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp.md5/' $@.md5; \
+ $(RM) $@.md5; \
+ fi
+endef
+
+define Build/ubnt-erx-factory-rootfs
+ echo "dummy" > $@.rootfs
+ $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp/' $@.rootfs
+
+ md5sum --binary $@.rootfs | awk '{print $$1}'> $@.md5
+ $(TAR) -rf $@ --transform='s/^.*/squashfs.tmp.md5/' $@.md5
+ $(RM) $@.md5
+ $(RM) $@.rootfs
+endef
+
+define Build/ubnt-erx-factory-version
+ echo '$(BOARD) $(VERSION_CODE) $(VERSION_NUMBER)' > $@.version
+ $(TAR) -rf $@ --transform='s/^.*/version.tmp/' $@.version
+ $(RM) $@.version
+endef
+
+#We need kernel+initrams fit into kernel partition
+define Build/ubnt-erx-factory-check-size
+ @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$($(TAR) -xf $@ vmlinux.tmp -O | wc -c)" ] || { \
+ echo "WARNING: Initramfs kernel for image $@ is too big (kernel size: $$($(TAR) -xf $@ vmlinux.tmp -O | wc -c), max size $(1))" >&2; \
+ $(RM) -f $@; \
+ }
+
+ @[ "$$($(TAR) -xf $@ vmlinux.tmp -O | wc -c)" -gt 0 ] || { \
+ echo "WARNING: Kernel for image $@ not found" >&2; \
+ $(RM) -f $@; \
+ }
+endef
+
define MkCombineduImage
$(call PatchKernelLzma,$(2),$(3))
if [ `stat -c%s "$(KDIR)/vmlinux-$(2).bin.lzma"` -gt `expr $(4) - 64` ]; then \
@@ -954,7 +999,7 @@ endif
#
ifeq ($(SUBTARGET),mt7621)
- TARGET_DEVICES += mt7621 wsr-600 wsr-1166 dir-860l-b1 firewrt pbr-m1 re6500 sap-g3200u3 witi wf-2881 zbt-wg2626
+ TARGET_DEVICES += mt7621 wsr-600 wsr-1166 dir-860l-b1 firewrt pbr-m1 re6500 sap-g3200u3 ubnt-erx witi wf-2881 zbt-wg2626
endif
define Device/mt7621
@@ -1023,6 +1068,20 @@ define Device/wf-2881
IMAGE/sysupgrade.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | check-size $$$$(IMAGE_SIZE)
endef
+define Device/ubnt-erx
+ DTS := UBNT-ERX
+ FILESYSTEMS := squashfs
+ KERNEL_SIZE := 3145728
+ KERNEL := $(KERNEL_DTB) | uImage lzma
+ IMAGES := sysupgrade.tar factory-initramfs.tar
+ IMAGE/factory-initramfs.tar := ubnt-erx-factory-compat | \
+ ubnt-erx-factory-kernel | \
+ ubnt-erx-factory-rootfs | \
+ ubnt-erx-factory-version | \
+ ubnt-erx-factory-check-size $$$$(KERNEL_SIZE)
+ IMAGE/sysupgrade.tar := sysupgrade-nand
+endef
+
#
# MT7628 Profiles
#