-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 $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) ]; then \
- $(TAR) -rf $@ --transform='s/^.*/vmlinux.tmp/' $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE); \
- \
- md5sum --binary $(KDIR)/tmp/$(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 \
- echo "Warning: $(KDIR)/vmlinux-$(2).bin.lzma is too big" >&2; \
- else if [ `stat -c%s "$(KDIR)/root.$(1)"` -gt $(5) ]; then \
- echo "Warning: $(KDIR)/root.$(1) is too big" >&2; \
- else \
- ( dd if=$(KDIR)/vmlinux-$(2).bin.lzma bs=`expr $(4) - 64` conv=sync ; dd if=$(KDIR)/root.$(1) ) > $(KDIR)/vmlinux-$(2).bin.lzma.combined ; \
- fi ; fi
- $(call MkImage,lzma,$(KDIR)/vmlinux-$(2).bin.lzma.combined,$(call sysupname,$(1),$(2)),$(6))
-endef
-
-
-#
-# The real magic happens inside these templates
-#
-# $(1), compression method
-# $(2), filename of image data
-# $(3), output filename
-define MkImage
- $(eval imagename=$(if $(4),$(4),MIPS OpenWrt Linux-$(LINUX_VERSION)))
- -mkimage -A mips -O linux -T kernel -C $(1) -a $(loadaddr-y) -e $(loadaddr-y) \
- -n "$(imagename)" \
- -d $(2) $(3)
-endef
-
-define CompressLzma
- $(STAGING_DIR_HOST)/bin/lzma e $(1) -lc1 -lp2 -pb2 $(2)
-endef
-
-define MkImageSysupgrade/squashfs
- $(eval output_name=$(IMG_PREFIX)-$(2)-$(1)-$(if $(4),$(4),sysupgrade).bin)
- cat $(KDIR)/vmlinux-$(2).uImage $(KDIR)/root.$(1) > $(KDIR)/$(output_name)
- $(call prepare_generic_squashfs,$(KDIR)/$(output_name))
- if [ `stat -c%s "$(KDIR)/$(output_name)"` -gt $(3) ]; then \
- echo "Warning: $(KDIR)/$(output_name) is too big" >&2; \
- else \
- $(CP) $(KDIR)/$(output_name) $(BIN_DIR)/$(output_name); \
- fi
-endef
-
-define MkImageTpl/squashfs
- $(eval output_name=$(IMG_PREFIX)-$(2)-$(1)-$(if $(4),$(4),sysupgrade).bin)
- -$(STAGING_DIR_HOST)/bin/mktplinkfw2 -V "ver. 2.0" -B "$(2)" -j \
- -o $(KDIR)/$(output_name) \
- -k $(KDIR)/vmlinux-$(1)$(4).bin.lzma \
- -r $(KDIR)/root.$(1) && \
- $(CP) $(KDIR)/$(output_name) $(BIN_DIR)/$(output_name)
-endef
-
-define MkImageTpl/initramfs
- $(eval output_name=$(IMG_PREFIX)-$(2)-$(1).bin)
- -$(STAGING_DIR_HOST)/bin/mktplinkfw2 -V "ver. 2.0" -B "$(2)" -c \
- -o $(KDIR)/$(output_name) \
- -k $(KDIR)/vmlinux-$(1).bin.lzma && \
- $(CP) $(KDIR)/$(output_name) $(BIN_DIR)/$(output_name)
-endef
-
-# $(1), lowercase board name like "mt7620a_v22sg"
-# $(2), DTS filename without .dts extension
-# $(3), optional filename suffix, e.g. "-initramfs"
-define PatchKernelLzmaDtb
- cp $(KDIR)/vmlinux$(3) $(KDIR)/vmlinux-$(1)$(3)
- $(LINUX_DIR)/scripts/dtc/dtc -O dtb -o $(KDIR)/$(2).dtb ../dts/$(2).dts
- $(STAGING_DIR_HOST)/bin/patch-dtb $(KDIR)/vmlinux-$(1)$(3) $(KDIR)/$(2).dtb
- $(call CompressLzma,$(KDIR)/vmlinux-$(1)$(3),$(KDIR)/vmlinux-$(1)$(3).bin.lzma)
-endef
-
-# $(1), lowercase board name
-# $(2), DTS filename without .dts extension
-# $(3), ih_name field of uImage header
-# $(4), optional filename suffix, e.g. "-initramfs"
-define MkImageLzmaDtb
- $(call PatchKernelLzmaDtb,$(1),$(2),$(4))
- $(call MkImage,lzma,$(KDIR)/vmlinux-$(1)$(4).bin.lzma,$(KDIR)/vmlinux-$(1)$(4).uImage,$(3))
-endef
-
-# $(1), Rootfs type, e.g. squashfs
-# $(2), lowercase board name
-# $(3), DTS filename without .dts extension
-# $(4), maximum size of sysupgrade image
-# $(5), uImage header's ih_name field
-define BuildFirmware/OF
- $(call MkImageLzmaDtb,$(2),$(3),$(5))
- $(call MkImageSysupgrade/$(1),$(1),$(2),$(4),$(6))
-endef
-
-define BuildFirmware/OF/tplink
- $(call PatchKernelLzmaDtb,$(1),$(2),$(4))
- $(call MkImageTpl/$(1),$(1),$(2),$(4),$(5))
-endef
-
-define BuildFirmware/OF/tplink/initramfs
- $(call PatchKernelLzmaDtb,$(2),$(3),-initramfs)
- $(call MkImageTpl/$(1),$(1),$(2),$(4),$(5))
-endef
-
-# $(1), squashfs/initramfs
-# $(2), lowercase board name
-# $(3), DTS filename without .dts extension
-# $(4), ih_name field of uImage header
-define BuildFirmware/OF/initramfs
- $(call MkImageLzmaDtb,$(2),$(3),$(4),-initramfs)
- $(CP) $(KDIR)/vmlinux-$(2)-initramfs.uImage $(call imgname,$(1),$(2))-uImage.bin
-endef
-
-
-# Build images for default ralink layout for 4MB flash
-# kernel + roots = 0x3b0000
-# $(1) = squashfs/initramfs
-# $(2) = lowercase board name
-# $(3) = dts file
-ralink_default_fw_size_4M=3866624
-BuildFirmware/Default4M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_4M),$(4))
-BuildFirmware/Default4M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))
-
-# Build images for default ralink layout for 8MB flash
-# kernel + roots = 0x7b0000
-# $(1) = squashfs/initramfs
-# $(2) = lowercase board name
-# $(3) = dts file
-# $(4) = uImage header name field
-ralink_default_fw_size_8M=8060928
-BuildFirmware/Default8M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_8M),$(4))
-BuildFirmware/Default8M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))
-BuildFirmware/Tplink/squashfs=$(call BuildFirmware/OF/tplink,$(1),$(2),$(3),$(4))
-BuildFirmware/Tplink/initramfs=$(call BuildFirmware/OF/tplink/initramfs,$(1),$(2),$(3),$(4))
-
-ralink_default_fw_size_16M=16121856
-BuildFirmware/Default16M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_16M),$(4))
-BuildFirmware/Default16M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))
-
-ralink_default_fw_size_32M=33226752
-BuildFirmware/Default32M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_32M),$(4))
-BuildFirmware/Default32M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))
-
-# Build images for a custom sized flash layout
-# $(1) = squashfs/initramfs
-# $(2) = lowercase board name
-# $(3) = dts file
-# $(4) = kernel + rootfs size
-BuildFirmware/CustomFlash/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(4),$(5),$(6))
-BuildFirmware/CustomFlash/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# wrappers for boards that have 4MB and 8MB versions
-define BuildFirmware/DefaultDualSize/squashfs
- $(call BuildFirmware/Default4M/$(1),$(1),$(2)-4M,$(3)-4M)
- $(call BuildFirmware/Default8M/$(1),$(1),$(2)-8M,$(3)-8M)
-endef
-define BuildFirmware/DefaultDualSize/initramfs
- $(call BuildFirmware/OF/initramfs,$(1),$(2)-4M,$(3)-4M)
- $(call BuildFirmware/OF/initramfs,$(1),$(2)-8M,$(3)-8M)
-endef
-
-# Some boards need a special header inside the uImage to make them bootable
-define BuildFirmware/CustomFlashFactory/squashfs
- $(call BuildFirmware/CustomFlash/$(1),$(1),$(2),$(3),$(4))
- $(call BuildFirmware/CustomFlash/$(1),$(1),$(2),$(3),$(4),$(5),$(6))
-endef
-BuildFirmware/CustomFlashFactory/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# sign an image to make it work with edimax tftp recovery
-define BuildFirmware/Edimax/squashfs
- $(call BuildFirmware/OF,$(1),$(2),$(3),$(4))
- if [ -e "$(call sysupname,$(1),$(2))" ]; then \
- mkedimaximg -i $(call sysupname,$(1),$(2)) \
- -o $(call imgname,$(1),$(2))-factory.bin \
- -s $(5) -m $(6) -f $(7) -S $(8); \
- fi
-endef
-BuildFirmware/Edimax/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# build Seama header images
-define BuildFirmware/Seama/squashfs
- $(call MkImageLzmaDtb,$(2),$(3),$(5))
- $(eval output_name=$(IMG_PREFIX)-$(2)-$(1)-sysupgrade.bin)
- cat $(KDIR)/vmlinux-$(2).bin.lzma $(KDIR)/root.$(1) > $(KDIR)/img_$(2).$(1).tmp
- if [ `stat -c%s "$(KDIR)/img_$(2).$(1).tmp"` -gt $$$$(($(5) - 64)) ]; then \
- echo "Warning: $(KDIR)/img_$(2).$(1).tmp is too big" >&2; \
- else \
- dd if=$(KDIR)/vmlinux-$(2).bin.lzma of=$(KDIR)/vmlinux-$(2).bin.lzma.padded bs=64k conv=sync; \
- ( \
- dd if=$(KDIR)/vmlinux-$(2).bin.lzma.padded bs=1 count=`expr \`stat -c%s $(KDIR)/vmlinux-$(2).bin.lzma.padded\` - 64`; \
- dd if=$(KDIR)/root.$(1) bs=64k conv=sync; \
- ) > $(KDIR)/vmlinux-$(2).tmp; \
- $(STAGING_DIR_HOST)/bin/seama \
- -i $(KDIR)/vmlinux-$(2).tmp \
- -m "dev=/dev/mtdblock/2" -m "type=firmware"; \
- $(STAGING_DIR_HOST)/bin/seama \
- -s $(call imgname,$(1),$(2))-factory.bin \
- -m "signature=$(4)" \
- -i $(KDIR)/vmlinux-$(2).tmp.seama; \
- dd if=$(KDIR)/vmlinux-$(2).bin.lzma.padded bs=1 count=`expr \`stat -c%s $(KDIR)/vmlinux-$(2).bin.lzma.padded\` - 64` of=$(KDIR)/vmlinux-$(2)-sysupgrade.tmp; \
- $(STAGING_DIR_HOST)/bin/seama \
- -i $(KDIR)/vmlinux-$(2)-sysupgrade.tmp \
- -m "dev=/dev/mtdblock/2" -m "type=firmware"; \
- ( \
- dd if=$(KDIR)/vmlinux-$(2)-sysupgrade.tmp.seama; \
- dd if=$(KDIR)/root.$(1) bs=64k conv=sync; \
- ) > $(BIN_DIR)/$(output_name); \
- fi
-endef
-BuildFirmware/Seama/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# sign Buffalo images
-define BuildFirmware/Buffalo
- if [ -e "$(call sysupname,$(1),$(2))" ]; then \
- buffalo-enc -p $(3) -v 1.76 \
- -i $(KDIR)/vmlinux-$(2).uImage \
- -o $(KDIR)/vmlinux-$(2).uImage.enc; \
- buffalo-enc -p $(3) -v 1.76 \
- -i $(KDIR)/root.$(1) \
- -o $(KDIR)/root.$(2).enc; \
- buffalo-tag -b $(3) -p $(3) -a ram -v 1.76 -m 1.01 \
- -l mlang8 -f 1 -r EU \
- -i $(KDIR)/vmlinux-$(2).uImage.enc \
- -i $(KDIR)/root.$(2).enc \
- -o $(call imgname,$(1),$(2))-factory-EU.bin; \
- fi
-endef
-
-# sign trednet / UMedia images
-define BuildFirmware/UMedia/squashfs
- $(call BuildFirmware/Default8M/$(1),$(1),$(2),$(3))
- if [ -e "$(call sysupname,$(1),$(2))" ]; then \
- fix-u-media-header -T 0x46 -B $(4) \
- -i $(call sysupname,$(1),$(2)) \
- -o $(call imgname,$(1),$(2))-factory.bin; \
- fi
-endef
-BuildFirmware/UMedia/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# sign dap 1350 based images
-dap1350_mtd_size=7667712
-define BuildFirmware/dap1350/squashfs
- $(call BuildFirmware/CustomFlash/$(1),$(1),$(2),$(3),$(dap1350_mtd_size))
- -mkdapimg -s $(4) \
- -i $(call sysupname,$(1),$(2)) \
- -o $(call imgname,$(1),$(2))-factory.bin
-endef
-BuildFirmware/dap1350/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-# Sign Poray images
-define BuildFirmware/Poray4M/squashfs
- $(call BuildFirmware/Default4M/$(1),$(1),$(2),$(3))
- if [ -e "$(call sysupname,$(1),$(2))" ]; then \
- mkporayfw -B $(3) -F 4M \
- -f $(call sysupname,$(1),$(2)) \
- -o $(call imgname,$(1),$(2))-factory.bin; \
- fi
-endef
-BuildFirmware/Poray4M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3))
-
-define BuildFirmware/Poray8M/squashfs
- $(call BuildFirmware/Default8M/$(1),$(1),$(2),$(3))
- if [ -e "$(call sysupname,$(1),$(2))" ]; then \
- mkporayfw -B $(3) -F 8M \
- -f $(call sysupname,$(1),$(2)) \
- -o $(call imgname,$(1),$(2))-factory.bin; \
- fi