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 <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2018-02-13 16:12:08 +01:00
parent 7762c07c88
commit b9aca834e8
3 changed files with 10 additions and 16 deletions

View file

@ -113,11 +113,6 @@ define Build/install-dtb
) )
endef endef
define Build/install-zImage
$(CP) $(KDIR)/zImage \
$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage
endef
define Build/fit define Build/fit
$(TOPDIR)/scripts/mkits.sh \ $(TOPDIR)/scripts/mkits.sh \
-D $(DEVICE_NAME) -o $@.its -k $@ \ -D $(DEVICE_NAME) -o $@.its -k $@ \

View file

@ -9,6 +9,10 @@ include $(INCLUDE_DIR)/image.mk
KERNEL_LOADADDR := 0x20008000 KERNEL_LOADADDR := 0x20008000
define Build/at91-install-zImage
$(CP) $(KDIR)/zImage $@
endef
ifeq ($(SUBTARGET),legacy) ifeq ($(SUBTARGET),legacy)
include ./legacy.mk include ./legacy.mk
endif endif
@ -40,7 +44,7 @@ endef
define Device/evaluation-zImage define Device/evaluation-zImage
IMAGES += zImage IMAGES += zImage
IMAGE/zImage := install-zImage IMAGE/zImage := at91-install-zImage
endef endef
define Device/evaluation-dtb define Device/evaluation-dtb

View file

@ -16,24 +16,19 @@ define Build/at91-sdcard
$(BIN_DIR)/u-boot-$(dts:at91-%=%)_mmc/u-boot.bin \ $(BIN_DIR)/u-boot-$(dts:at91-%=%)_mmc/u-boot.bin \
::u-boot.bin; \ ::u-boot.bin; \
$(CP) $(BIN_DIR)/at91bootstrap-$(dts:at91-%=%)sd_uboot*/*.bin \ $(CP) $(BIN_DIR)/at91bootstrap-$(dts:at91-%=%)sd_uboot*/*.bin \
$(BIN_DIR)/BOOT.bin; \ $@.BOOT.bin; \
mcopy -i $@.boot $(BIN_DIR)/BOOT.bin ::BOOT.bin;) mcopy -i $@.boot $@.BOOT.bin ::BOOT.bin;)
./gen_at91_sdcard_img.sh \ ./gen_at91_sdcard_img.sh \
$(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img \ $@.img \
$@.boot \ $@.boot \
$(KDIR)/root.ext4 \ $(KDIR)/root.ext4 \
$(AT91_SD_BOOT_PARTSIZE) \ $(AT91_SD_BOOT_PARTSIZE) \
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(CONFIG_TARGET_ROOTFS_PARTSIZE)
gzip -nc9 $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img \ gzip -nc9 $@.img > $@
> $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img.gz
$(CP) $(dir $@)$(IMG_PREFIX)-$(DEVICE_NAME)-sdcard.img.gz \ rm -f $@.img $@.boot $@.BOOT.bin
$(BIN_DIR)/
rm -f $(BIN_DIR)/BOOT.bin
rm -f $@.boot
endef endef
define Device/evaluation-sdimage define Device/evaluation-sdimage