linux: don't build appended DTB image in place and support multiple images
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 18 Oct 2015 21:05:02 +0000 (23:05 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 20 Dec 2015 14:23:27 +0000 (15:23 +0100)
commit055e6162bba7edb1db78458e089e151abde625b6
tree45b637e44cf7f225a9b535f43c4e8856ab6ff499
parent24745cb4be748df7fea28195236fe60bb14bef0c
linux: don't build appended DTB image in place and support multiple images

Currently, the linux.mk logic for appended DTB image does the
appending of the DTB in place, directly at the end of the zImage using
a >> sign. This is incorrect because if you run "make linux-rebuild"
multiple times, you get the DTB appended over and over again to the
image.

Since keeping the 'zImage' or 'uImage' name for the appended DTB image
is not very clear, this commit moves to using the 'zImage.<dtb>' and
'uImage.<dtb>' format. This way, we can clearly distinguish the
original image from the appended one.

In addition, this naming scheme easily allows to generate *multiple*
appended DTB images: from one zImage, you can generate multiple
zImage.<dtb> for several DTBs, and then generate (if requested) the
corresponding uImage.<dtb>.

To achieve this, this commit:

 - Changes the definition of LINUX_APPENDED_DTB to iterate over
   $(KERNEL_DTS_NAME), and generate a zImage.<dtb> image for each of
   them.

 - Changes the addition of LINUX_APPENDED_DTB for appended uImage to
   also iterate over $(KERNEL_DTS_NAME).

 - Provide a different implementation of LINUX_INSTALL_IMAGE which
   installs all the appended DTB images (but not the bare image)

 - Remove the checks that verified that only one DT name is passed
   when appended DTB is used, since we now support generating multiple
   DT images.

Some of the tested configuration:

 - Normal uImage with several DTBs

   BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7"
   BR2_LINUX_KERNEL_UIMAGE=y
   BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x200000"
   BR2_LINUX_KERNEL_DTS_SUPPORT=y
   BR2_LINUX_KERNEL_INTREE_DTS_NAME="armada-xp-matrix armada-xp-gp armada-370-mirabox"

   Contents of output/images/:

   armada-370-mirabox.dtb  armada-xp-gp.dtb  armada-xp-matrix.dtb  uImage

 - Normal zImage with several DTBs

   BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7"
   BR2_LINUX_KERNEL_ZIMAGE=y
   BR2_LINUX_KERNEL_DTS_SUPPORT=y
   BR2_LINUX_KERNEL_INTREE_DTS_NAME="armada-xp-matrix armada-xp-gp armada-370-mirabox"

   Contents of output/images:

   armada-370-mirabox.dtb  armada-xp-gp.dtb  armada-xp-matrix.dtb  zImage

 - Appended uImage with several DTBs:

   BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7"
   BR2_LINUX_KERNEL_APPENDED_UIMAGE=y
   BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x200000"
   BR2_LINUX_KERNEL_INTREE_DTS_NAME="armada-xp-matrix armada-xp-gp armada-370-mirabox"

   Contents of output/images:

   uImage.armada-370-mirabox  uImage.armada-xp-gp  uImage.armada-xp-matrix

 - Appended zImage with several DTBs:

   BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7"
   BR2_LINUX_KERNEL_APPENDED_ZIMAGE=y
   BR2_LINUX_KERNEL_INTREE_DTS_NAME="armada-xp-matrix armada-xp-gp armada-370-mirabox"

   Contents of output/images:

   zImage.armada-370-mirabox  zImage.armada-xp-gp  zImage.armada-xp-matrix

In all configurations, the contents of output/target/boot/ was the
same if BR2_LINUX_KERNEL_INSTALL_TARGET=y.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
linux/linux.mk