kernel.bbclass: Allow INITRAMFS_TASK to trigger copy initramfs code

Submitted by Jason Wessel on Sept. 27, 2013, 4:23 p.m.

Details

Message ID 1380299019-10777-1-git-send-email-jason.wessel@windriver.com
State New
Headers show

Commit Message

Jason Wessel Sept. 27, 2013, 4:23 p.m.
Activating the INITRAMFS_TASK can cause circular dependencies, but
that is up to the end user to resolve in recipes.  The INITRAMFS_TASK
should also trigger immediate linking of the cpio task in the first
compile pass.  This was a subtle regression introduced by: 609d5a9ab
(kernel.bbclass, image.bbclass: Implement kernel INITRAMFS dependency
and bundling).

This patch restores the previous behavior and only affects the
INITRAMFS_TASK which is not set by any of the default build profiles
in oe-core.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 meta/classes/kernel.bbclass |    6 ++++++
 1 file changed, 6 insertions(+)

Patch hide | download patch | download mbox

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 8cf66ce..73c525f 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -156,6 +156,12 @@  kernel_do_compile() {
 	# different initramfs image.  The way to do that in the kernel
 	# is to specify:
 	# make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
+	if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
+		# The old style way of copying an prebuilt image and building it
+		# is turned on via INTIRAMFS_TASK != ""
+		copy_initramfs
+		use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio
+	fi
 	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
 	if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
 		gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"

Comments

Andrea Adami Sept. 27, 2013, 9:06 p.m.
Jason,

there is one more problem here:

| DEBUG: Executing shell function do_compile
| Copying initramfs into ./usr ...
| cp: cannot create regular file
'/oe/oe-core/build/tmp-eglibc/work/poodle-oe-linux-gnueabi/linux-yocto-tiny-kexecboot/3.10.11+gitAUTOINC+dad2b7e1ce_e1aa804148-r0/linux-poodle-tiny-build/usr/.':
No such file or directory

I'm solving it this way:

copy_initramfs() {
        echo "Covpying initramfs into ./usr ..."
+        mkdir -p ${B}/usr
        # Find and use the first initramfs image archive type we find


Please take care of this.
Thanks

Andrea




On Fri, Sep 27, 2013 at 6:23 PM, Jason Wessel
<jason.wessel@windriver.com> wrote:
> Activating the INITRAMFS_TASK can cause circular dependencies, but
> that is up to the end user to resolve in recipes.  The INITRAMFS_TASK
> should also trigger immediate linking of the cpio task in the first
> compile pass.  This was a subtle regression introduced by: 609d5a9ab
> (kernel.bbclass, image.bbclass: Implement kernel INITRAMFS dependency
> and bundling).
>
> This patch restores the previous behavior and only affects the
> INITRAMFS_TASK which is not set by any of the default build profiles
> in oe-core.
>
> Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
> ---
>  meta/classes/kernel.bbclass |    6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 8cf66ce..73c525f 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -156,6 +156,12 @@ kernel_do_compile() {
>         # different initramfs image.  The way to do that in the kernel
>         # is to specify:
>         # make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
> +       if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
> +               # The old style way of copying an prebuilt image and building it
> +               # is turned on via INTIRAMFS_TASK != ""
> +               copy_initramfs
> +               use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio
> +       fi
>         oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
>         if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
>                 gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
> --
> 1.7.9.5
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
Jason Wessel Sept. 27, 2013, 9:20 p.m.
On 09/27/2013 04:06 PM, Andrea Adami wrote:
> | DEBUG: Executing shell function do_compile
> | Copying initramfs into ./usr ...
> | cp: cannot create regular file
> '/oe/oe-core/build/tmp-eglibc/work/poodle-oe-linux-gnueabi/linux-yocto-tiny-kexecboot/3.10.11+gitAUTOINC+dad2b7e1ce_e1aa804148-r0/linux-poodle-tiny-build/usr/.':


I suppose that one makes sense given that the compile directory might not exist.  My testing did not show this problem because my working env was "dirty".

Thanks for the report, your fix is perfectly fine.  I'll send a v2.

Jason.