# # 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))