X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=target%2Flinux%2Framips%2Fimage%2FMakefile;h=fdc15aa1efc3ce016c31001f23253cdf61a16e45;hp=d165ec55126e0824cc4b7b11e09a6dc3e425a496;hb=HEAD;hpb=1cd0a4c688f02918cb96ff7f5f21cddc281d4f2c diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile index d165ec5512..fdc15aa1ef 100644 --- a/target/linux/ramips/image/Makefile +++ b/target/linux/ramips/image/Makefile @@ -1,291 +1,234 @@ +# SPDX-License-Identifier: GPL-2.0-only # # Copyright (C) 2008-2011 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# + include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.mk -define imgname -$(BIN_DIR)/$(IMG_PREFIX)-$(2)-$(1) -endef - -define sysupname -$(call imgname,$(1),$(2))-sysupgrade.bin -endef - -VMLINUX:=$(IMG_PREFIX)-vmlinux -UIMAGE:=$(IMG_PREFIX)-uImage - -define Image/Build/Initramfs - $(call Image/Build/Profile/$(PROFILE),initramfs) -endef - -DEVICE_VARS += DTS IMAGE_SIZE +DEVICE_VARS += LOADER_TYPE LOADER_FLASH_OFFS LZMA_TEXT_START +DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID +DEVICE_VARS += NETGEAR_ENC_MODEL NETGEAR_ENC_REGION NETGEAR_ENC_HW_ID_LIST NETGEAR_ENC_MODEL_LIST +DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR +DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK +DEVICE_VARS += SERCOMM_HWNAME SERCOMM_HWID SERCOMM_HWVER SERCOMM_SWVER +DEVICE_VARS += SERCOMM_PAD JCG_MAXSIZE loadaddr-y := 0x80000000 loadaddr-$(CONFIG_TARGET_ramips_rt288x) := 0x88000000 loadaddr-$(CONFIG_TARGET_ramips_mt7621) := 0x80001000 -KERNEL_LOADADDR := $(loadaddr-y) +ldrplatform-y := ralink +ldrplatform-$(CONFIG_TARGET_ramips_mt7621) := mt7621 -KERNEL_DTB = kernel-bin | patch-dtb | lzma -define Device/Default - PROFILES = Default $$(DTS) - KERNEL_DEPENDS = $$(wildcard ../dts/$$(DTS).dts) - KERNEL := $(KERNEL_DTB) | uImage lzma - IMAGES := sysupgrade.bin - IMAGE_SIZE := $(ralink_default_fw_size_8M) - IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) -endef +ldrflashstart-y := 0x1c000000 +ldrflashstart-$(CONFIG_TARGET_ramips_mt7621) := 0x1fc00000 -define Build/patch-dtb - $(call Image/BuildDTB,../dts/$(DTS).dts,$@.dtb) - $(STAGING_DIR_HOST)/bin/patch-dtb $@ $@.dtb -endef +LOADADDR := $(loadaddr-y) +LOADER_PLATFORM := $(ldrplatform-y) +LOADER_FLASH_START := $(ldrflashstart-y) -define Build/trx - $(STAGING_DIR_HOST)/bin/trx \ - -o $@ \ - -m $(IMAGE_SIZE) \ - -f $(IMAGE_KERNEL) \ - -a 4 -f $(IMAGE_ROOTFS) -endef +KERNEL_DTB = kernel-bin | append-dtb | lzma -define Build/relocate-kernel - ( \ - dd if=$(KDIR)/loader.bin bs=32 conv=sync && \ - perl -e '@s = stat("$@"); print pack("V", @s[7])' && \ - cat $@ \ - ) > $@.new +define Build/jcg-header + $(STAGING_DIR_HOST)/bin/jcgimage -v $(1) \ + $(if $(JCG_MAXSIZE), -m $$(($(call exp_units,$(JCG_MAXSIZE)))),) \ + -u $@ -o $@.new mv $@.new $@ 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)) +define Build/loader-common + rm -rf $@.src + $(MAKE) -C lzma-loader \ + PKG_BUILD_DIR="$@.src" \ + TARGET_DIR="$(dir $@)" LOADER_NAME="$(notdir $@)" \ + BOARD="$(BOARDNAME)" PLATFORM="$(LOADER_PLATFORM)" \ + LZMA_TEXT_START=$(LZMA_TEXT_START) \ + LOADADDR=$(LOADADDR) \ + SUBTARGET=$(SUBTARGET) \ + $(1) compile loader.$(LOADER_TYPE) + mv "$@.$(LOADER_TYPE)" "$@" + rm -rf $@.src endef -define Build/umedia-header - fix-u-media-header -T 0x46 -B $(1) -i $@ -o $@.new && mv $@.new $@ +define Build/loader-kernel + $(call Build/loader-common,LOADER_DATA="$@") endef -define Build/senao-header - $(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new - mv $@.new $@ +define Build/loader-okli-compile + $(call Build/loader-common, \ + FLASH_START=$(LOADER_FLASH_START) \ + FLASH_OFFS=$(LOADER_FLASH_OFFS) \ + FLASH_MAX=0 \ + ) endef -define Build/seama - $(STAGING_DIR_HOST)/bin/seama -i $@ $(1) - mv $@.seama $@ +define Build/append-loader-okli + cat "$(KDIR)/loader-$(word 1,$(1)).$(LOADER_TYPE)" >> "$@" endef -define Build/seama-seal - $(call Build/seama,-s $@.seama $(1)) +# combine kernel and rootfs into one image +# mkdlinkfw +define Build/mkdlinkfw + -$(STAGING_DIR_HOST)/bin/mkdlinkfw \ + -k $(IMAGE_KERNEL) \ + -r $(IMAGE_ROOTFS) \ + -o $@ \ + $(if $(DLINK_IMAGE_OFFSET), -O $(DLINK_IMAGE_OFFSET)) \ + -s $(DLINK_FIRMWARE_SIZE) 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) +define Build/mkdlinkfw-factory + -$(STAGING_DIR_HOST)/bin/mkdlinkfw \ + -m $(DLINK_ROM_ID) -f $(DLINK_FAMILY_MEMBER) \ + -F $@ \ + -o $@.new \ + $(if $(DLINK_IMAGE_OFFSET), -O $(DLINK_IMAGE_OFFSET)) \ + -s $(DLINK_FIRMWARE_SIZE) + mv $@.new $@ endef -define CompressLzma - $(STAGING_DIR_HOST)/bin/lzma e $(1) -lc1 -lp2 -pb2 $(2) +define Build/mkdlinkfw-loader + -$(STAGING_DIR_HOST)/bin/mkdlinkfw \ + -k $(KDIR)/loader-$(DEVICE_NAME).bin \ + -r $@ \ + -o $@.new \ + $(if $(DLINK_IMAGE_OFFSET), -O $(DLINK_IMAGE_OFFSET)) \ + -s $(DLINK_FIRMWARE_SIZE) + mv $@.new $@ 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 +define Build/netis-tail + echo -n $(1) >> $@ + echo -n $(UIMAGE_NAME)-yun | $(MKHASH) md5 | \ + sed 's/../\\\\x&/g' | xargs echo -ne >> $@ 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) - $(call Image/BuildDTB,../dts/$(2).dts,$(KDIR)/$(2).dtb) - $(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) +define Build/poray-header + $(STAGING_DIR_HOST)/bin/mkporayfw $(1) -f $@ -o $@.new + mv $@.new $@ 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)) +define Build/relocate-kernel + rm -rf $@.relocate + $(CP) ../../generic/image/relocate $@.relocate + $(MAKE) -C $@.relocate KERNEL_ADDR=$(if $(1),$(1),$(KERNEL_LOADADDR)) CROSS_COMPILE=$(TARGET_CROSS) + ( \ + dd if=$@.relocate/loader.bin bs=32 conv=sync && \ + perl -e '@s = stat("$@"); print pack("V", @s[7])' && \ + cat $@ \ + ) > $@.new + mv $@.new $@ + rm -rf $@.relocate 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)) +define Build/sercom-footer + $(call Build/sercom-seal,-f) 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 +define Build/sercom-seal + $(STAGING_DIR_HOST)/bin/mksercommfw \ + -i $@ \ + -b $(SERCOMM_HWID) \ + -r $(SERCOMM_HWVER) \ + -v $(SERCOMM_SWVER) \ + $(1) 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)) - -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)) - -# 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)) +define Build/sign-dlink-ru + sign_dlink_ru $@ $1 $2 + mv $@.new $@ endef -BuildFirmware/CustomFlashFactory/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) +define Build/trx + $(STAGING_DIR_HOST)/bin/trx $(1) \ + -o $@ \ + -m $$(($(call exp_units,$(IMAGE_SIZE)))) \ + -f $(IMAGE_KERNEL) \ + -a 4 -f $(IMAGE_ROOTFS) endef -define BuildFirmware/PorayDualSize/squashfs - $(call BuildFirmware/DefaultDualSize/$(1),$(1),$(2),$(3)) - if [ -e "$(call sysupname,$(1),$(2)-4M)" ]; then \ - mkporayfw -B $(3) -F 4M \ - -f $(call sysupname,$(1),$(2)-4M) \ - -o $(call imgname,$(1),$(2)-4M)-factory.bin; \ - fi - if [ -e "$(call sysupname,$(1),$(2)-8M)" ]; then \ - mkporayfw -B $(3) -F 8M \ - -f $(call sysupname,$(1),$(2)-8M) \ - -o $(call imgname,$(1),$(2)-8M)-factory.bin; \ - fi +define Build/uimage-padhdr + uimage_padhdr $(if $(1),-l $(1)) -i $@ -o $@.new + mv $@.new $@ endef -BuildFirmware/PorayDualSize/initramfs=$(call BuildFirmware/DefaultDualSize/initramfs,$(1),$(2),$(3)) - - -ifeq ($(SUBTARGET),rt288x) -include rt288x.mk -endif -ifeq ($(SUBTARGET),rt305x) -include rt305x.mk -include rt305x-legacy.mk -endif - -ifeq ($(SUBTARGET),rt3883) -include rt3883.mk -endif +define Build/uimage-sgehdr + uimage_sgehdr -i $@ -o $@.new -m $(DEVICE_MODEL) \ + -h $(DEVICE_VARIANT) -s V1.00000 + mv $@.new $@ +endef -ifeq ($(SUBTARGET),mt7620) -include mt7620.mk -endif +define Build/umedia-header + fix-u-media-header -T 0x46 -B $(1) -i $@ -o $@.new && mv $@.new $@ +endef -ifeq ($(SUBTARGET),mt7621) -include mt7621.mk -endif +define Build/wrg-header + mkwrgimg -i $@ -d "/dev/mtdblock/2" -s $(1) -o $@.new + mv $@.new $@ +endef -ifeq ($(SUBTARGET),mt7628) -include mt7628.mk -endif +define Build/zyimage + $(STAGING_DIR_HOST)/bin/zyimage $(1) $@ +endef -ifeq ($(SUBTARGET),mt7688) -include mt7688.mk -endif +define Device/Default + PROFILES = Default + BLOCKSIZE := 64k + KERNEL := $(KERNEL_DTB) | uImage lzma + KERNEL_LOADADDR := $(loadaddr-y) + LZMA_TEXT_START := 0x81800000 + SOC := $(DEFAULT_SOC) + DEVICE_DTS_DIR := ../dts + DEVICE_DTS = $$(SOC)_$(1) + NETGEAR_ENC_MODEL := + NETGEAR_ENC_REGION := + NETGEAR_ENC_HW_ID_LIST := + NETGEAR_ENC_MODEL_LIST := + IMAGES := sysupgrade.bin + COMPILE := + sysupgrade_bin := append-kernel | append-rootfs | pad-rootfs + IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | check-size | append-metadata +endef -ifdef LEGACY_DEVICES -# -# Generic Targets - only needed for legacy image building code -# -define Image/BuildKernel - cp $(KDIR)/vmlinux.elf $(BIN_DIR)/$(VMLINUX).elf - cp $(KDIR)/vmlinux $(BIN_DIR)/$(VMLINUX).bin - $(call CompressLzma,$(KDIR)/vmlinux,$(KDIR)/vmlinux.bin.lzma) - $(call MkImage,lzma,$(KDIR)/vmlinux.bin.lzma,$(KDIR)/uImage.lzma) - cp $(KDIR)/uImage.lzma $(BIN_DIR)/$(UIMAGE).bin +define Device/netgear_sercomm_nor + DEVICE_VENDOR := NETGEAR + IMAGES += factory.img + IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \ + pad-rootfs + IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata + IMAGE/factory.img := pad-extra $$$$(SERCOMM_PAD) | $$(IMAGE/default) | \ + pad-to $$$$(BLOCKSIZE) | sercom-footer | pad-to 128 | \ + zip $$$$(SERCOMM_HWNAME).bin | sercom-seal endef -define Image/BuildKernel/Initramfs - cp $(KDIR)/vmlinux-initramfs.elf $(BIN_DIR)/$(VMLINUX)-initramfs.elf - cp $(KDIR)/vmlinux-initramfs $(BIN_DIR)/$(VMLINUX)-initramfs.bin - $(call CompressLzma,$(KDIR)/vmlinux-initramfs,$(KDIR)/vmlinux-initramfs.bin.lzma) - $(call MkImage,lzma,$(KDIR)/vmlinux-initramfs.bin.lzma,$(KDIR)/uImage-initramfs.lzma) - cp $(KDIR)/uImage-initramfs.lzma $(BIN_DIR)/$(UIMAGE)-initramfs.bin - $(call Image/Build/Initramfs) +define Device/seama + SEAMA_MTDBLOCK := 2 + IMAGES += factory.bin + + # 64 bytes offset: + # - 28 bytes seama_header + # - 36 bytes of META data (4-bytes aligned) + IMAGE/default := append-kernel | pad-offset $$$$(BLOCKSIZE) 64 | append-rootfs + IMAGE/sysupgrade.bin := \ + $$(IMAGE/default) | seama | pad-rootfs | check-size | append-metadata + IMAGE/factory.bin := \ + $$(IMAGE/default) | pad-rootfs -x 64 | seama | seama-seal | check-size + SEAMA_SIGNATURE := endef -define Image/Build - $(call Image/Build/$(1)) - dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k conv=sync +define Device/uimage-lzma-loader + LOADER_TYPE := bin + KERNEL/lzma-loader := kernel-bin | append-dtb | lzma | loader-kernel + KERNEL := $$(KERNEL/lzma-loader) | uImage none endef -define Image/Build/Profile - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Image/Build/Profile/$(1),initramfs)) - $(call Image/Build/Profile/$(1),$(2)) +define Device/seama-lzma-loader + $(Device/seama) + $(Device/uimage-lzma-loader) + KERNEL := $$(KERNEL/lzma-loader) | relocate-kernel | lzma -a0 + KERNEL_INITRAMFS := $$(KERNEL/lzma-loader) | uImage none endef -endif +include $(SUBTARGET).mk $(eval $(call BuildImage))