diff --git a/linux/linux.mk b/linux/linux.mk index 536e931ed8..451e6817aa 100644 --- a/linux/linux.mk +++ b/linux/linux.mk @@ -272,11 +272,15 @@ endif # BR2_LINUX_KERNEL_DTS_SUPPORT ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y) # dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1 define LINUX_APPEND_DTB - if [ -e $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb ]; then \ - cat $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb; \ - else \ - cat $(KERNEL_ARCH_PATH)/boot/dts/$(KERNEL_DTS_NAME).dtb; \ - fi >> $(KERNEL_ARCH_PATH)/boot/zImage + (cd $(KERNEL_ARCH_PATH)/boot; \ + for dtb in $(KERNEL_DTS_NAME); do \ + if test -e $${dtb}.dtb ; then \ + dtbpath=$${dtb}.dtb ; \ + else \ + dtbpath=dts/$${dtb}.dtb ; \ + fi ; \ + cat zImage $${dtbpath} > zImage.$${dtb} || exit 1; \ + done) endef ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y) # We need to generate a new u-boot image that takes into @@ -284,11 +288,14 @@ ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y) # of the image. To do so, we first need to retrieve both load # address and entry point for the kernel from the already # generate uboot image before using mkimage -l. -LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\ +LINUX_APPEND_DTB += ; \ + MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\ sed -n -e 's/Image Name:[ ]*\(.*\)/-n \1/p' -e 's/Load Address:/-a/p' -e 's/Entry Point:/-e/p'`; \ - $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \ - -T kernel -C none $${MKIMAGE_ARGS} \ - -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH); + for dtb in $(KERNEL_DTS_NAME); do \ + $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \ + -T kernel -C none $${MKIMAGE_ARGS} \ + -d $(KERNEL_ARCH_PATH)/boot/zImage.$${dtb} $(LINUX_IMAGE_PATH).$${dtb}; \ + done endif endif @@ -305,9 +312,20 @@ define LINUX_BUILD_CMDS $(LINUX_APPEND_DTB) endef +ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y) +# When a DTB was appended, install the potential several images with +# appended DTBs. +define LINUX_INSTALL_IMAGE + mkdir -p $(1) + cp $(KERNEL_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME).* $(1) +endef +else +# Otherwise, just install the unique image generated by the kernel +# build process. define LINUX_INSTALL_IMAGE $(INSTALL) -m 0644 -D $(LINUX_IMAGE_PATH) $(1)/$(LINUX_IMAGE_NAME) endef +endif ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y) define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET @@ -316,7 +334,6 @@ define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET endef endif - define LINUX_INSTALL_HOST_TOOLS # Installing dtc (device tree compiler) as host tool, if selected if grep -q "CONFIG_DTC=y" $(@D)/.config; then \ @@ -403,13 +420,6 @@ $(error No kernel device tree source specified, check your \ BR2_LINUX_KERNEL_USE_INTREE_DTS / BR2_LINUX_KERNEL_USE_CUSTOM_DTS settings) endif -ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y) -ifneq ($(words $(KERNEL_DTS_NAME)),1) -$(error Kernel with appended device tree needs exactly one DTS source. \ - Check BR2_LINUX_KERNEL_INTREE_DTS_NAME or BR2_LINUX_KERNEL_CUSTOM_DTS_PATH.) -endif -endif - endif # BR_BUILDING $(eval $(kconfig-package))