This change moves the initramfs bundling functions and tasks into a
separate class called 'kernel-initramfs'. The change also converts the
copy_initramfs into a task that itself depends on the do_image_complete
of the initramfs image. Making this change allows for the do_initramfs_*
tasks to be conditionally added instead of relying on the task checking
the variables, with the exception of do_deploy(_append).

The 'use_alternate_initrd' of kernel_do_compile is replaced with a
general use 'extra_make' variable. And the INITRAMFS_TASK functionality
of kernel_do_compile is removed.

The 'KERNEL_CLASSES' inherit is moved to after the EXPORT_FUNCTIONS
do_deploy in order to allow these classes to append to the do_deploy
task without breaking the do_deploy task itself.

The functionality for INITRAMFS_TASK remained for backwards
compatibility when the bundle changes were introduced. The bundle
functionality has been available for a number of releases since, as such
this change does not carry forward the functionality of INITRAMFS_TASK.
The information regarding INITRAMFS_TASK issues for is kept along with
the generation of a bb.fatal when a user attempts to use it.

Signed-off-by: Nathan Rossi <[email protected]>
---
 meta/classes/kernel-initramfs.bbclass | 114 +++++++++++++++++++++++++
 meta/classes/kernel.bbclass           | 155 +++++-----------------------------
 2 files changed, 133 insertions(+), 136 deletions(-)
 create mode 100644 meta/classes/kernel-initramfs.bbclass

diff --git a/meta/classes/kernel-initramfs.bbclass 
b/meta/classes/kernel-initramfs.bbclass
new file mode 100644
index 0000000000..b23fb51495
--- /dev/null
+++ b/meta/classes/kernel-initramfs.bbclass
@@ -0,0 +1,114 @@
+
+INITRAMFS_IMAGE ?= ""
+INITRAMFS_IMAGE_NAME ?= "${@'${INITRAMFS_IMAGE}-${MACHINE}' if 
d.getVar('INITRAMFS_IMAGE') else ''}"
+INITRAMFS_IMAGE_BUNDLE ?= ""
+
+python __anonymous () {
+    # NOTE: setting INITRAMFS_TASK was for backward compatibility
+    #       The preferred method is to set INITRAMFS_IMAGE, because
+    #       this INITRAMFS_TASK has circular dependency problems
+    #       if the initramfs requires kernel modules
+    if d.getVar('INITRAMFS_TASK'):
+        bb.fatal("The INITRAMFS_TASK variable is no longer supported. Use 
INITRAMFS_IMAGE and INITRAMFS_IMAGE_BUNDLE.")
+
+    image = d.getVar("INITRAMFS_IMAGE")
+    bundle = oe.types.boolean(d.getVar("INITRAMFS_IMAGE_BUNDLE") or "0")
+    if image and bundle:
+        # add all the tasks
+        bb.build.addtask('do_initramfs_copy', 'do_initramfs_bundle', 
'do_install', d)
+        bb.build.addtask('do_initramfs_bundle', 'do_deploy', 
'do_initramfs_copy', d)
+
+        # make the do_initramfs_copy task depend on the image 
do_image_complete task
+        d.appendVarFlag('do_initramfs_copy', 'depends', ' 
${INITRAMFS_IMAGE}:do_image_complete')
+}
+
+do_initramfs_copy[dirs] = "${B}"
+do_initramfs_copy () {
+    echo "Copying initramfs into ./usr ..."
+    # In case the directory is not created yet from the first pass compile:
+    mkdir -p ${B}/usr
+    # Find and use the first initramfs image archive type we find
+    rm -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+    for img in cpio cpio.gz cpio.lz4 cpio.lzo cpio.lzma cpio.xz; do
+        if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img" ]; then
+            cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/.
+            case $img in
+            *gz)
+                echo "gzip decompressing image"
+                gunzip -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+                break
+                ;;
+            *lz4)
+                echo "lz4 decompressing image"
+                lz4 -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+                break
+                ;;
+            *lzo)
+                echo "lzo decompressing image"
+                lzop -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+                break
+                ;;
+            *lzma)
+                echo "lzma decompressing image"
+                lzma -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+                break
+                ;;
+            *xz)
+                echo "xz decompressing image"
+                xz -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+                break
+                ;;
+            esac
+        fi
+    done
+    if [ ! -e ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio ]; then
+        bbfatal "Failed to copy initramfs cpio for image 
${INITRAMFS_IMAGE_NAME}"
+    fi
+    echo "Finished copy of initramfs into ./usr"
+}
+
+do_initramfs_bundle[dirs] = "${B}"
+do_initramfs_bundle () {
+    echo "Creating a kernel image with a bundled initramfs..."
+    # Backing up kernel image relies on its type(regular file or symbolic link)
+    tmp_path=""
+    for imageType in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
+        if [ -h ${KERNEL_OUTPUT_DIR}/$imageType ] ; then
+            linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$imageType`
+            realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$imageType`
+            mv -f $realpath $realpath.bak
+            tmp_path=$tmp_path" "$imageType"#"$linkpath"#"$realpath
+        elif [ -f ${KERNEL_OUTPUT_DIR}/$imageType ]; then
+            mv -f ${KERNEL_OUTPUT_DIR}/$imageType 
${KERNEL_OUTPUT_DIR}/$imageType.bak
+            tmp_path=$tmp_path" "$imageType"##"
+        fi
+    done
+    extra_make=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+    kernel_do_compile
+    # Restoring kernel image
+    for tp in $tmp_path ; do
+        imageType=`echo $tp|cut -d "#" -f 1`
+        linkpath=`echo $tp|cut -d "#" -f 2`
+        realpath=`echo $tp|cut -d "#" -f 3`
+        if [ -n "$realpath" ]; then
+            mv -f $realpath $realpath.initramfs
+            mv -f $realpath.bak $realpath
+            ln -sf $linkpath.initramfs 
${B}/${KERNEL_OUTPUT_DIR}/$imageType.initramfs
+        else
+            mv -f ${KERNEL_OUTPUT_DIR}/$imageType 
${KERNEL_OUTPUT_DIR}/$imageType.initramfs
+            mv -f ${KERNEL_OUTPUT_DIR}/$imageType.bak 
${KERNEL_OUTPUT_DIR}/$imageType
+        fi
+    done
+}
+
+do_deploy_append () {
+    if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
+        for imageType in ${KERNEL_IMAGETYPES} ; do
+            initramfs_base_name=${imageType}-${INITRAMFS_NAME}
+            initramfs_symlink_name=${imageType}-${INITRAMFS_LINK_NAME}
+            install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType}.initramfs 
$deployDir/${initramfs_base_name}.bin
+            ln -sf ${initramfs_base_name}.bin 
$deployDir/${initramfs_symlink_name}.bin
+        done
+    fi
+}
+
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index e04d2fe004..c0e9452ca6 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -20,10 +20,6 @@ OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
 INHIBIT_DEFAULT_DEPS = "1"
 
 KERNEL_IMAGETYPE ?= "zImage"
-INITRAMFS_IMAGE ?= ""
-INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}-${MACHINE}', 
''][d.getVar('INITRAMFS_IMAGE') == '']}"
-INITRAMFS_TASK ?= ""
-INITRAMFS_IMAGE_BUNDLE ?= ""
 
 # KERNEL_VERSION is extracted from source code. It is evaluated as
 # None for the first parsing, since the code has not been fetched.
@@ -93,37 +89,8 @@ python __anonymous () {
         d.appendVar('RDEPENDS_%s-image' % kname, ' %s-image-%s' % (kname, 
typelower))
         d.setVar('PKG_%s-image-%s' % (kname,typelower), 
'%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
         d.setVar('ALLOW_EMPTY_%s-image-%s' % (kname, typelower), '1')
-
-    image = d.getVar('INITRAMFS_IMAGE')
-    if image:
-        d.appendVarFlag('do_bundle_initramfs', 'depends', ' 
${INITRAMFS_IMAGE}:do_image_complete')
-
-    # NOTE: setting INITRAMFS_TASK is for backward compatibility
-    #       The preferred method is to set INITRAMFS_IMAGE, because
-    #       this INITRAMFS_TASK has circular dependency problems
-    #       if the initramfs requires kernel modules
-    image_task = d.getVar('INITRAMFS_TASK')
-    if image_task:
-        d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')
 }
 
-# Here we pull in all various kernel image types which we support.
-#
-# In case you're wondering why kernel.bbclass inherits the other image
-# types instead of the other way around, the reason for that is to
-# maintain compatibility with various currently existing meta-layers.
-# By pulling in the various kernel image types here, we retain the
-# original behavior of kernel.bbclass, so no meta-layers should get
-# broken.
-#
-# KERNEL_CLASSES by default pulls in kernel-uimage.bbclass, since this
-# used to be the default behavior when only uImage was supported. This
-# variable can be appended by users who implement support for new kernel
-# image types.
-
-KERNEL_CLASSES ?= " kernel-uimage "
-inherit ${KERNEL_CLASSES}
-
 # Old style kernels may set ${S} = ${WORKDIR}/git for example
 # We need to move these over to STAGING_KERNEL_DIR. We can't just
 # create the symlink in advance as the git fetcher can't cope with
@@ -188,90 +155,10 @@ KERNEL_EXTRA_ARGS ?= ""
 EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" 
HOSTCPP="${BUILD_CPP}""
 KERNEL_ALT_IMAGETYPE ??= ""
 
-copy_initramfs() {
-       echo "Copying initramfs into ./usr ..."
-       # In case the directory is not created yet from the first pass compile:
-       mkdir -p ${B}/usr
-       # Find and use the first initramfs image archive type we find
-       rm -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
-       for img in cpio cpio.gz cpio.lz4 cpio.lzo cpio.lzma cpio.xz; do
-               if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img" ]; 
then
-                       cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img 
${B}/usr/.
-                       case $img in
-                       *gz)
-                               echo "gzip decompressing image"
-                               gunzip -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
-                               break
-                               ;;
-                       *lz4)
-                               echo "lz4 decompressing image"
-                               lz4 -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
-                               break
-                               ;;
-                       *lzo)
-                               echo "lzo decompressing image"
-                               lzop -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
-                               break
-                               ;;
-                       *lzma)
-                               echo "lzma decompressing image"
-                               lzma -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
-                               break
-                               ;;
-                       *xz)
-                               echo "xz decompressing image"
-                               xz -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
-                               break
-                               ;;
-                       esac
-               fi
-       done
-       echo "Finished copy of initramfs into ./usr"
-}
-
-do_bundle_initramfs () {
-       if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; 
then
-               echo "Creating a kernel image with a bundled initramfs..."
-               copy_initramfs
-               # Backing up kernel image relies on its type(regular file or 
symbolic link)
-               tmp_path=""
-               for imageType in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
-                       if [ -h ${KERNEL_OUTPUT_DIR}/$imageType ] ; then
-                               linkpath=`readlink -n 
${KERNEL_OUTPUT_DIR}/$imageType`
-                               realpath=`readlink -fn 
${KERNEL_OUTPUT_DIR}/$imageType`
-                               mv -f $realpath $realpath.bak
-                               tmp_path=$tmp_path" 
"$imageType"#"$linkpath"#"$realpath
-                       elif [ -f ${KERNEL_OUTPUT_DIR}/$imageType ]; then
-                               mv -f ${KERNEL_OUTPUT_DIR}/$imageType 
${KERNEL_OUTPUT_DIR}/$imageType.bak
-                               tmp_path=$tmp_path" "$imageType"##"
-                       fi
-               done
-               
use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
-               kernel_do_compile
-               # Restoring kernel image
-               for tp in $tmp_path ; do
-                       imageType=`echo $tp|cut -d "#" -f 1`
-                       linkpath=`echo $tp|cut -d "#" -f 2`
-                       realpath=`echo $tp|cut -d "#" -f 3`
-                       if [ -n "$realpath" ]; then
-                               mv -f $realpath $realpath.initramfs
-                               mv -f $realpath.bak $realpath
-                               ln -sf $linkpath.initramfs 
${B}/${KERNEL_OUTPUT_DIR}/$imageType.initramfs
-                       else
-                               mv -f ${KERNEL_OUTPUT_DIR}/$imageType 
${KERNEL_OUTPUT_DIR}/$imageType.initramfs
-                               mv -f ${KERNEL_OUTPUT_DIR}/$imageType.bak 
${KERNEL_OUTPUT_DIR}/$imageType
-                       fi
-               done
-       fi
-}
-do_bundle_initramfs[dirs] = "${B}"
-
 python do_devshell_prepend () {
     os.environ["LDFLAGS"] = ''
 }
 
-addtask bundle_initramfs after do_install before do_deploy
-
 get_cc_option () {
                # Check if KERNEL_CC supports the option "file-prefix-map".
                # This option allows us to build images with __FILE__ values 
that do not
@@ -302,22 +189,10 @@ kernel_do_compile() {
                export KCONFIG_NOTIMESTAMP=1
                bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
        fi
-       # The $use_alternate_initrd is only set from
-       # do_bundle_initramfs() This variable is specifically for the
-       # case where we are making a second pass at the kernel
-       # compilation and we want to force the kernel build to use a
-       # 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_NAME}.cpio
-       fi
        cc_extra=$(get_cc_option)
+       # extra_make is set via users of kernel_do_compile like 
do_initramfs_bundle
        for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
-               oe_runmake ${typeformake} CC="${KERNEL_CC} $cc_extra " 
LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
+               oe_runmake ${typeformake} CC="${KERNEL_CC} $cc_extra " 
LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $extra_make
        done
        # vmlinux.gz is not built by kernel
        if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
@@ -679,15 +554,6 @@ kernel_do_deploy() {
                tar -cvzf $deployDir/modules-${MODULE_TARBALL_NAME}.tgz -C 
${D}${root_prefix} lib
                ln -sf modules-${MODULE_TARBALL_NAME}.tgz 
$deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
        fi
-
-       if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; 
then
-               for imageType in ${KERNEL_IMAGETYPES} ; do
-                       initramfs_base_name=${imageType}-${INITRAMFS_NAME}
-                       
initramfs_symlink_name=${imageType}-${INITRAMFS_LINK_NAME}
-                       install -m 0644 
${KERNEL_OUTPUT_DIR}/${imageType}.initramfs 
$deployDir/${initramfs_base_name}.bin
-                       ln -sf ${initramfs_base_name}.bin 
$deployDir/${initramfs_symlink_name}.bin
-               done
-       fi
 }
 do_deploy[cleandirs] = "${DEPLOYDIR}"
 do_deploy[dirs] = "${DEPLOYDIR} ${B}"
@@ -697,5 +563,22 @@ addtask deploy after do_populate_sysroot do_packagedata
 
 EXPORT_FUNCTIONS do_deploy
 
+# Here we pull in all various kernel image types which we support.
+#
+# In case you're wondering why kernel.bbclass inherits the other image
+# types instead of the other way around, the reason for that is to
+# maintain compatibility with various currently existing meta-layers.
+# By pulling in the various kernel image types here, we retain the
+# original behavior of kernel.bbclass, so no meta-layers should get
+# broken.
+#
+# KERNEL_CLASSES by default pulls in kernel-uimage.bbclass, since this
+# used to be the default behavior when only uImage was supported. This
+# variable can be appended by users who implement support for new kernel
+# image types.
+
+KERNEL_CLASSES ?= " kernel-uimage kernel-initramfs "
+inherit ${KERNEL_CLASSES}
+
 # Add using Device Tree support
 inherit kernel-devicetree
---
2.19.1
-- 
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to