SmartAudio/target/allwinner/generic/image/Makefile

247 lines
7.5 KiB
Makefile
Executable File

#
# Copyright (C) 2013-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(BUILD_DIR)/image.mk
include $(BUILD_DIR)/host.mk
FAT32_BLOCK_SIZE=1024
ifneq ($(CONFIG_SUNXI_SD_BOOT_PARTSIZE),)
FAT32_BLOCKS=$(shell echo $$(($(CONFIG_SUNXI_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
endif
ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_PARTSIZE),)
RECOVERY_INITRAMFS_BLOCKS=$(shell echo $$(($(CONFIG_SUNXI_RECOVERY_INITRAMFS_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
endif
IMAGE_NAME_SUFFIX:=
ifneq ($(CONFIG_SUNXI_BOOT_IMAGE_NAME_SUFFIX_RECOVERY),)
IMAGE_NAME_SUFFIX=_recovery
else ifneq ($(CONFIG_SUNXI_BOOT_IMAGE_NAME_SUFFIX_RAMFS),)
IMAGE_NAME_SUFFIX=_ramfs
endif
ROOTFS_IMAGE_NAME_SUFFIX:=
ifneq ($(CONFIG_SUNXI_ROOTFS_IMAGE_NAME_SUFFIX_RECOVERY),)
ROOTFS_IMAGE_NAME_SUFFIX=_recovery
else ifneq ($(CONFIG_SUNXI_ROOTFS_IMAGE_NAME_SUFFIX_RAMFS),)
ROOTFS_IMAGE_NAME_SUFFIX=_ramfs
endif
LOAD_ADDRESS:=0x40008000
ENTRY_POINT:=0x40008000
BASE_ADDRESS:=0x40000000
KERNEL_OFFSET:=0x8000
RAMDISK_OFFSET:=0x01000000
IMAGE_DATA:=zImage
BOOTIMG_IMAGE_DATA:=zImage
RAMDISK:=ramdisk.img
UIMAGE_NAME:=uImage
BOOTIMG_NAME:=boot.img
TARCH:=$(ARCH)
COMP:=none
ifeq ($(ARCH), aarch64)
TARCH=arm64
endif
TARGET_BOOT_IMG:=boot${IMAGE_NAME_SUFFIX}.img
TARGET_BOOT_INITRAMFS_IMG:=boot_initramfs${IMAGE_NAME_SUFFIX}.img
TARGET_ROOTFS_IMG:=rootfs${ROOTFS_IMAGE_NAME_SUFFIX}.img
TARGET_USR_IMG:=usr${ROOTFS_IMAGE_NAME_SUFFIX}.img
# max size of board name is 16
BOOTIMG_BOARD:=$(IMG_PREFIX)
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
UIMAGE_NAME=uImage-initramfs
BOOTIMG_NAME=boot-initramfs.img
endif
ifeq ($(TARGET_BOARD_PLATFORM), tulip)
LOAD_ADDRESS=0x40080000
ENTRY_POINT=0x40080000
BASE_ADDRESS=0x40000000
KERNEL_OFFSET=0x80000
RAMDISK_OFFSET:=0x02000000
IMAGE_DATA=Image.gz
BOOTIMG_IMAGE_DATA=bImage
COMP=gzip
ifneq ($(CONFIG_KERNEL_KERNEL_LZO),)
IMAGE_DATA=Image.lzo
COMP=lzo
endif
endif
ifeq ($(TARGET_BOARD_PLATFORM), koto)
LOAD_ADDRESS=0x40080000
ENTRY_POINT=0x40080000
BASE_ADDRESS=0x40000000
KERNEL_OFFSET=0x80000
IMAGE_DATA=Image.gz
BOOTIMG_IMAGE_DATA=bImage
COMP=gzip
ifneq ($(CONFIG_KERNEL_KERNEL_LZO),)
IMAGE_DATA=Image.lzo
COMP=lzo
endif
endif
ifneq (,$(findstring $(TARGET_BOARD_PLATFORM), sitar violin))
LOAD_ADDRESS=0x80008000
ENTRY_POINT=0x80008000
BASE_ADDRESS=0x80000000
KERNEL_OFFSET=0x8000
endif
define mkBootimg
mkbootimg --kernel $(1) \
--ramdisk $(2) \
--board $(3) \
--base $(4) \
--kernel_offset $(5) \
--ramdisk_offset $(6) \
-o $(7)
endef
define mkuImage
mkimage -A $(TARCH) -O linux -T kernel -C $(1) -a $(2) -e $(3) \
-n '$(call toupper,$(ARCH)) OpenWrt Linux-$(LINUX_VERSION)' -d $(4) $(5)
endef
define Image/BuildKernel
ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_UIMAGE),)
$(call mkuImage, \
$(COMP), $(LOAD_ADDRESS), $(ENTRY_POINT), \
$(KDIR)/$(IMAGE_DATA), $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) \
)
else ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_BOOTIMG),)
$(call mkBootimg, \
$(KDIR)/$(BOOTIMG_IMAGE_DATA), \
$(RAMDISK), \
${BOOTIMG_BOARD}, \
${BASE_ADDRESS}, \
${KERNEL_OFFSET}, \
${RAMDISK_OFFSET}, \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME),\
)
else
# Compatible with old config
$(call mkuImage, \
$(COMP), $(LOAD_ADDRESS), $(ENTRY_POINT), \
$(KDIR)/$(IMAGE_DATA), $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) \
)
endif
endef
define Image/Build/Initramfs
ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_UIMAGE),)
$(CP) $(KDIR)/$(IMAGE_DATA)-initramfs $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs
echo -ne '\x00\x00\x00\x00' >> $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs
$(call mkuImage, \
$(COMP), $(LOAD_ADDRESS), $(ENTRY_POINT), \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs, \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) \
)
else ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_BOOTIMG),)
$(CP) $(KDIR)/$(BOOTIMG_IMAGE_DATA)-initramfs $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_IMAGE_DATA)-initramfs
echo -ne '\x00\x00\x00\x00' >> $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_IMAGE_DATA)-initramfs
$(call mkBootimg, \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_IMAGE_DATA)-initramfs, \
$(RAMDISK), \
${BOOTIMG_BOARD}, \
${BASE_ADDRESS}, \
${KERNEL_OFFSET}, \
${RAMDISK_OFFSET}, \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME),\
)
else
# Compatible with old config
$(CP) $(KDIR)/$(IMAGE_DATA)-initramfs $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs
echo -ne '\x00\x00\x00\x00' >> $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs
$(call mkuImage, \
$(COMP), $(LOAD_ADDRESS), $(ENTRY_POINT), \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(IMAGE_DATA)-initramfs, \
$(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) \
)
endif
endef
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
define Image/InstallKernel
rm -f $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG}
rm -f $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG}
ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_PARTSIZE),)
mkdosfs $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG} -C $(RECOVERY_INITRAMFS_BLOCKS)
ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_KERNEL_FORMAT_UIMAGE),)
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) ::uImage
else ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_KERNEL_FORMAT_BOOTIMG),)
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME) ::boot.img
else
# Compatible with old config
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) ::uImage
endif
else
ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_KERNEL_FORMAT_UIMAGE),)
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG}
else ifneq ($(CONFIG_SUNXI_RECOVERY_INITRAMFS_KERNEL_FORMAT_BOOTIMG),)
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG}
else
# Compatible with old config
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG}
endif
endif
endef
else
define Image/InstallKernel
rm -f $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG}
rm -f $(TARGET_OUT_DIR)/${TARGET_BOOT_INITRAMFS_IMG}
ifneq ($(CONFIG_SUNXI_SD_BOOT_PARTSIZE),)
mkdosfs $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG} -C $(FAT32_BLOCKS)
ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_UIMAGE),)
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) ::uImage
else ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_BOOTIMG),)
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME) ::boot.img
else
# Compatible with old config
mcopy -i $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG} $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) ::uImage
endif
else
ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_UIMAGE),)
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG}
else ifneq ($(CONFIG_SUNXI_SD_BOOT_KERNEL_FORMAT_BOOTIMG),)
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(BOOTIMG_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG}
else
# Compatible with old config
$(CP) $(TARGET_OUT_DIR)/$(IMG_PREFIX)-$(UIMAGE_NAME) $(TARGET_OUT_DIR)/${TARGET_BOOT_IMG}
endif
endif
endef
endif
define Image/Build
rm -f $(TARGET_OUT_DIR)/$(TARGET_ROOTFS_IMG)
rm -f $(TARGET_OUT_DIR)/$(TARGET_USR_IMG)
$(call Image/Build/$(1),$(1))
dd if=$(KDIR)/root.$(1) of=$(TARGET_OUT_DIR)/$(TARGET_ROOTFS_IMG) bs=128k conv=sync
ifneq ($(CONFIG_SUNXI_SMALL_STORAGE_OTA),)
dd if=$(KDIR)/usr.$(1) of=$(TARGET_OUT_DIR)/$(TARGET_USR_IMG) bs=128k conv=sync
endif
endef
$(eval $(call BuildImage))