From 0e8b0cf63d094f383c025785a205d261921ed638 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Sun, 4 Jun 2023 15:57:25 +0100 Subject: [PATCH] image: improve uImage.FIT device tree overlay support Instead of generating full config nodes incl. kernel, generate minimal config nodes for device tree overlays to be applied to the main config. In this way, multiple device tree overlays can be applied more easily. While at it change filenames to upstream style, ie. use dtso and dtbo suffix for device tree overlays. Signed-off-by: Daniel Golle --- include/image-commands.mk | 2 +- include/image.mk | 19 ++++++++++++++++++- scripts/mkits.sh | 9 +++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/image-commands.mk b/include/image-commands.mk index 7a4bd7824..6afb76ef8 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -300,7 +300,7 @@ define Build/fit $(if $(DEVICE_FDT_NUM),-n $(DEVICE_FDT_NUM)) \ $(if $(DEVICE_DTS_DELIMITER),-l $(DEVICE_DTS_DELIMITER)) \ $(if $(DEVICE_DTS_LOADADDR),-s $(DEVICE_DTS_LOADADDR)) \ - $(if $(DEVICE_DTS_OVERLAY),$(foreach dtso,$(DEVICE_DTS_OVERLAY), -O $(dtso):$(KERNEL_BUILD_DIR)/image-$(dtso).dtb)) \ + $(if $(DEVICE_DTS_OVERLAY),$(foreach dtso,$(DEVICE_DTS_OVERLAY), -O $(dtso):$(KERNEL_BUILD_DIR)/image-$(dtso).dtbo)) \ -c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config-1") \ -A $(LINUX_KARCH) -v $(LINUX_VERSION) PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage $(if $(findstring external,$(word 3,$(1))),\ diff --git a/include/image.mk b/include/image.mk index 0eae216de..0cf110df9 100644 --- a/include/image.mk +++ b/include/image.mk @@ -554,16 +554,33 @@ define Device/Build/dtb image_prepare: $(KDIR)/image-$(1).dtb endif +endef + +define Device/Build/dtbo + ifndef BUILD_DTS_$(1) + BUILD_DTS_$(1) := 1 + $(KDIR)/image-$(1).dtbo: FORCE + $(call Image/BuildDTB,$(strip $(2))/$(strip $(3)).dtso,$$@) + + image_prepare: $(KDIR)/image-$(1).dtbo + endif + endef endif define Device/Build/kernel - $$(eval $$(foreach dts,$$(DEVICE_DTS) $$(DEVICE_DTS_OVERLAY), \ + $$(eval $$(foreach dts,$$(DEVICE_DTS), \ $$(call Device/Build/dtb,$$(notdir $$(dts)), \ $$(if $$(DEVICE_DTS_DIR),$$(DEVICE_DTS_DIR),$$(DTS_DIR)), \ $$(dts) \ ) \ )) + $$(eval $$(foreach dtso,$$(DEVICE_DTS_OVERLAY), \ + $$(call Device/Build/dtbo,$$(notdir $$(dtso)), \ + $$(if $$(DEVICE_DTS_DIR),$$(DEVICE_DTS_DIR),$$(DTS_DIR)), \ + $$(dtso) \ + ) \ + )) $(KDIR)/$$(KERNEL_NAME):: image_prepare $$(_TARGET): $$(if $$(KERNEL_INSTALL),$(BIN_DIR)/$$(KERNEL_IMAGE)) diff --git a/scripts/mkits.sh b/scripts/mkits.sh index 09e522e1e..eeb01216f 100755 --- a/scripts/mkits.sh +++ b/scripts/mkits.sh @@ -191,13 +191,10 @@ OVCONFIGS="" " OVCONFIGS="$OVCONFIGS - config-$ovname { - description = \"OpenWrt ${DEVICE} with $ovname\"; - kernel = \"kernel${REFERENCE_CHAR}1\"; - fdt = \"fdt${REFERENCE_CHAR}$FDTNUM\", \"$ovnode\"; - ${LOADABLES:+loadables = ${LOADABLES};} + $ovname { + description = \"OpenWrt ${DEVICE} overlay $ovname\"; + fdt = \"$ovnode\"; ${COMPATIBLE_PROP} - ${INITRD_PROP} }; " done