[OE-core] [PATCH V3 0/3] Introduces kernel-initramfs recipe to resolve a implicit dependency issue

Ming Liu liu.ming50 at gmail.com
Fri Jan 29 06:40:16 UTC 2016


Changes in V3:
1 Adjusted to the tip:2a6e061712cfe9cb4738806a0c351a64e0d30144
[ cmake: update to 3.4.2 ]
2 Fixed a KERNEL_PRIORITY expanding issue
3 Tested with following configuration in local.conf:
  a) INITRAMFS_IMAGE = "initramfs-kexecboot-klibc-image"
     INITRAMFS_IMAGE_BUNDLE = "1"
     IMAGE_INSTALL_append = "kernel-initramfs"

  b) INITRAMFS_IMAGE = "core-image-minimal-initramfs"
     INITRAMFS_IMAGE_BUNDLE = "1"
     IMAGE_INSTALL_append = "kernel-initramfs"

  c) # INITRAMFS_IMAGE = "core-image-minimal-initramfs"
     INITRAMFS_IMAGE_BUNDLE = "1"
     IMAGE_INSTALL_append = "kernel-initramfs"

  d) # INITRAMFS_IMAGE = "core-image-minimal-initramfs"
     # INITRAMFS_IMAGE_BUNDLE = "1"
     # IMAGE_INSTALL_append = "kernel-initramfs"

Test was based on qemux86-64 machine, core-image-minimal.
With a and b, the kernel-initramfs package has been installed into rootfs correclty.
With c, got a error message like:
......
ERROR: Nothing RPROVIDES 'kernel-initramfs' (but /data/poky/meta/recipes-core/images/core-image-minimal.bb RDEPENDS on or otherwise requires it)
ERROR: kernel-initramfs was skipped: Set INITRAMFS_IMAGE and INITRAMFS_IMAGE_BUNDLE to enable it
NOTE: Runtime target 'kernel-initramfs' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['kernel-initramfs']
ERROR: Required build target 'core-image-minimal' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image-minimal', 'kernel-initramfs']
......

With d, nothing changed comparing to without the patches.

-----------------------------------------------------------------------
In current initramfs bundled kernel packaging policy, there are several
dependency chains co-existing:

| "core-image-minimal.do_build" -> "core-image-minimal.do_bundle_initramfs"
| "core-image-minimal.do_bundle_initramfs" -> "virtual/kernel.do_bundle_initramfs"
| "core-image-minimal.do_bundle_initramfs" -> "core-image-minimal.do_rootfs"
| "core-image-minimal.do_rootfs" -> "virtual/kernel.do_package_write_${IMAGE_PKGTYPE}"
| "virtual/kernel.do_package_write_${IMAGE_PKGTYPE}" -> "virtual/kernel.do_package"
| "virtual/kernel.do_package" -> "virtual/kernel.do_install"
|
| "virtual/kernel.do_deploy" -> "virtual/kernel.do_bundle_initramfs"
| "virtual/kernel.do_bundle_initramfs" -> "virtual/kernel.do_install"

We could see, virtual/kernel.do_package is not explicitly depending on
virtual/kernel.do_bundle_initramfs so far, therefore, there is not a
workable way to add initramfs bundled kernel image into rootfs, because
kernel's do_bundle_initramfs could run parallelly with its do_package,
which means we will get a implicit kernel-image package that sometimes it
contains the initramfs bundled kernel or sometimes it doesn't.

To fix this problem, the idea is to let the initramfs bundled kernel
packaging depend on do_bundle_initramfs, meanwhile, to avoid the circular
dependency issue that commit: 609d5a9ab9e58bb1c2bcc2145399fbc8b701b85a
[ kernel.bbclass, image.bbclass: Implement kernel INITRAMFS dependency and bundling ]

was trying to address, this dependency has to be splitted from kernel
recipe(at least, I could not figure out another way to achieve it), so a
new kernel-initramfs is introduced, in which a dependency chain is created:

| "kernel-initramfs.do_install" -> "virtual/kernel.do_deploy"
| "virtual/kernel.do_deploy" -> "virtual/kernel.do_bundle_initramfs"

Then the users can add initramfs bundled kernel image into rootfs by:

IMAGE_INSTALL_append = " kernel-initramfs"

without introducing any circular dependencies.

Ming Liu (3):
  kernel.bbclass: do not install initramfs bundled kernel image
  image.bbclass: removes bundle_initramfs related code
  kernel-initramfs: new recipe, creates initramfs bundled kernel
    packaging

 meta/classes/image.bbclass                    | 13 -----
 meta/classes/kernel.bbclass                   |  4 --
 meta/recipes-kernel/linux/kernel-initramfs.bb | 69 +++++++++++++++++++++++++++
 3 files changed, 69 insertions(+), 17 deletions(-)
 create mode 100644 meta/recipes-kernel/linux/kernel-initramfs.bb

-- 
1.9.1




More information about the Openembedded-core mailing list