kernel.bbclass, image.bbclass: Implement kernel INITRAMFS dependency and bundling
authorJason Wessel <jason.wessel@windriver.com>
Thu, 22 Aug 2013 23:04:27 +0000 (18:04 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 6 Sep 2013 22:04:47 +0000 (23:04 +0100)
commit83846dbd48e669990f136134770b6fb12438719d
tree244cdcf13b127a81faa691ad1c7f7b0c9d9c6b2e
parent051240b5c7acf33ca17ed4bc7afe2f544641515a
kernel.bbclass, image.bbclass: Implement kernel INITRAMFS dependency and bundling

This patch aims to fix the following two cases for the INITRAMFS generation.
  1) Allow an image recipe to specify a paired INITRAMFS recipe such
     as core-image-minimal-initramfs.  This allows building a base
     image which always generates the needed initramfs image in one step
  2) Allow building a single binary which contains a kernel and
     the initramfs.

A key requirement of the initramfs is to be able to add kernel
modules.  The current implementation of the INITRAMFS_IMAGE variable
has a circular dependency when using kernel modules in the initramfs
image.bb file that is caused by kernel.bbclass trying to build the
initramfs before the kernel's do_install rule.

The solution for this problem is to have the kernel's
do_bundle_initramfs_image task depend on the do_rootfs from the
INITRAMFS_IMAGE and not some intermediate point.  The image.bbclass
will also sets up dependencies to make the initramfs creation task run
last.

The code to bundle the kernel and initramfs together has been added.
At a high level, all it is doing is invoking a second compilation of
the kernel but changing the value of CONFIG_INITRAMFS_SOURCE to point
to the generated initramfs from the image recipe.

[YOCTO #4072]

(From OE-Core rev: 609d5a9ab9e58bb1c2bcc2145399fbc8b701b85a)

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Acked-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/image.bbclass
meta/classes/kernel.bbclass