From b9aca834e812efc9d0bb2701eab8c78f2efb0367 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 13 Feb 2018 16:12:08 +0100 Subject: [PATCH] at91: fix image building with CONFIG_TARGET_MULTI_PROFILE The current image build code has a number of race conditions and interface contract violations in the custom image build steps: - Build/install-zImage, solely used by at91, relies on $(PROFILE_SANITIZED) which is not available when building with CONFIG_TARGET_MULTI_PROFILE - Build/at91-sdcard, which may run concurrently, creates scratch files at fixed locations and manipulates target files directly which can lead to file corruption and other unexpected failures Rename the install-zImage macro to at91-install-zImage and move it to the at91 image Makefile since this target is the sole user. Also utilize "$@" as output file name and switch the usage of $(PROFILE_SANITIZED) to $(DEVICE_NAME) in order to fix naming under multi profile builds. Fix the at91-sdcard macro to construct scratch file paths relative to "$@", which is guaranteed to be unique and store the final artifact output in "$@" as well, instead of inside $(BIN_DIR). The generic image build code takes care of moving a build steps "$@" output to the final destination in a concurrency-safe manner. Finally remove the broken install-zImage from the generic image-commands Makefile. Fixes: d7a679a036 ("at91: Install zImage.") Signed-off-by: Jo-Philipp Wich --- include/image-commands.mk | 5 ----- target/linux/at91/image/Makefile | 6 +++++- target/linux/at91/image/sama5.mk | 15 +++++---------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/include/image-commands.mk b/include/image-commands.mk index adef8f2759..555a9e5906 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -113,11 +113,6 @@ define Build/install-dtb ) endef -define Build/install-zImage - $(CP) $(KDIR)/zImage \ - $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage -endef - define Build/fit $(TOPDIR)/scripts/mkits.sh \ -D $(DEVICE_NAME) -o $@.its -k $@ \ diff --git a/target/linux/at91/image/Makefile b/target/linux/at91/image/Makefile index 12607073e4..ccaeebe7ca 100644 --- a/target/linux/at91/image/Makefile +++ b/target/linux/at91/image/Makefile @@ -9,6 +9,10 @@ include $(INCLUDE_DIR)/image.mk KERNEL_LOADADDR := 0x20008000 +define Build/at91-install-zImage + $(CP) $(KDIR)/zImage $@ +endef + ifeq ($(SUBTARGET),legacy) include ./legacy.mk endif @@ -40,7 +44,7 @@ endef define Device/evaluation-zImage IMAGES += zImage - IMAGE/zImage := install-zImage + IMAGE/zImage := at91-install-zImage endef define Device/evaluation-dtb diff --git a/target/linux/at91/image/sama5.mk b/target/linux/at91/image/sama5.mk index b251d714dc..e51a0bce20 100644 --- a/target/linux/at91/image/sama5.mk +++ b/target/linux/at91/image/sama5.mk @@ -16,24 +16,19 @@ define Build/at91-sdcard $(BIN_DIR)/u-boot-$(dts:at91-%=%)_mmc/u-boot.bin \ ::u-boot.bin; \ $(CP) $(BIN_DIR)/at91bootstrap-$(dts:at91-%=%)sd_uboot*/*.bin \ - $(BIN_DIR)/BOOT.bin; \ - mcopy -i $@.boot $(BIN_DIR)/BOOT.bin ::BOOT.bin;) + $@.BOOT.bin; \ + mcopy -i $@.boot $@.BOOT.bin ::BOOT.bin;) ./gen_at91_sdcard_img.sh \ - $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img \ + $@.img \ $@.boot \ $(KDIR)/root.ext4 \ $(AT91_SD_BOOT_PARTSIZE) \ $(CONFIG_TARGET_ROOTFS_PARTSIZE) - gzip -nc9 $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img \ - > $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img.gz + gzip -nc9 $@.img > $@ - $(CP) $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img.gz \ - $(BIN_DIR)/ - - rm -f $(BIN_DIR)/BOOT.bin - rm -f $@.boot + rm -f $@.img $@.boot $@.BOOT.bin endef define Device/evaluation-sdimage