On 2015-04-28 12:38 PM, Marek Vasut wrote:
Pull the uImage image format generation from kernel.bbclass into
a separate kernel-uimage.bbclass. The recipes which now need to
generate an uImage will have to inherit kernel-uimage instead of
kernel class.

Signed-off-by: Marek Vasut <ma...@denx.de>
Cc: Richard Purdie <richard.pur...@linuxfoundation.org>
Cc: Koen Kooi <k...@dominion.thruhere.net>
Cc: Paul Eggleton <paul.eggle...@linux.intel.com>
Cc: Ross Burton <ross.bur...@intel.com>
Cc: Bruce Ashfield <bruce.ashfi...@windriver.com>
---
  meta/classes/kernel-uimage.bbclass | 48 +++++++++++++++++++++++++++++++++
  meta/classes/kernel.bbclass        | 55 +++++++-------------------------------
  2 files changed, 58 insertions(+), 45 deletions(-)
  create mode 100644 meta/classes/kernel-uimage.bbclass

NOTE: The "inherit kernel-uimage" in kernel.bbclass should be changed to
       something like "inherit kernel-${@d.getVar("KERNEL_IMAGETYPE", 
True).lower()}"
       but the problem is that I only want to perform the inheritance for uimage
       and fitimage, the other image types don't need to inherit any additional
       special stuff.
       Paul suggested I can do "inherit <empty here>". This would at least let 
me
       implement a python function which returns either "kernel-uimage",
       "kernel-fitimage" or "" and based on that, I could inherit the particular
       image type specifics into kernel.bbclass.
       What I don't know how to implement well is this function which returns
       those three strings based on the KERNEL_IMAGETYPE. What I would like to
       avoid is encoding those strings explicitly into the function, since that
       would force each new kernel image format to also edit this function in
       kernel.bbclass . Apparently, checking whether class exists and inheriting
       it only if it does is also not a simple task.

Agreed that this would be better. It would remove a lot of the checks
in the other tasks for the image type.

I'm not aware of the exact details on how to make this work, but
hopefully others have the foo.

Bruce


       The conditional inheritance here would also allow me to remove all those
       if [ $KERNEL_IMAGETYPE = "uImage" ] checks from kernel-uimage.bbclass and
       kernel-fitimage.bbclass, since those classes would be inherited only if
       the matching imagetype would be selected.

diff --git a/meta/classes/kernel-uimage.bbclass 
b/meta/classes/kernel-uimage.bbclass
new file mode 100644
index 0000000..8a3efc6
--- /dev/null
+++ b/meta/classes/kernel-uimage.bbclass
@@ -0,0 +1,48 @@
+python __anonymous () {
+    kerneltype = d.getVar('KERNEL_IMAGETYPE', True)
+    if kerneltype == 'uImage':
+        depends = d.getVar("DEPENDS", True)
+        depends = "%s u-boot-mkimage-native" % depends
+        d.setVar("DEPENDS", depends)
+}
+
+uboot_prep_kimage() {
+       if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
+               vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
+               linux_suffix=""
+               linux_comp="none"
+       else
+               vmlinux_path="vmlinux"
+               linux_suffix=".gz"
+               linux_comp="gzip"
+       fi
+
+       ${OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin
+
+       if [ "${linux_comp}" != "none" ] ; then
+               rm -f linux.bin
+               gzip -9 linux.bin
+               mv -f "linux.bin${linux_suffix}" linux.bin
+       fi
+
+       echo "${linux_comp}"
+}
+
+do_uboot_mkimage() {
+       if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then
+               if test "x${KEEPUIMAGE}" != "xyes" ; then
+                       uboot_prep_kimage
+
+                       ENTRYPOINT=${UBOOT_ENTRYPOINT}
+                       if test -n "${UBOOT_ENTRYSYMBOL}"; then
+                               ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
+                                       awk '$3=="${UBOOT_ENTRYSYMBOL}" {print 
$1}'`
+                       fi
+
+                       uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C 
"${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n 
"${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
+                       rm -f linux.bin
+               fi
+       fi
+}
+
+addtask uboot_mkimage before do_install after do_compile
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 2895e5e..9723be2 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -20,10 +20,6 @@ python __anonymous () {
      import re

      kerneltype = d.getVar('KERNEL_IMAGETYPE', True)
-    if kerneltype == 'uImage':
-        depends = d.getVar("DEPENDS", True)
-        depends = "%s u-boot-mkimage-native" % depends
-        d.setVar("DEPENDS", depends)

      d.setVar("KERNEL_IMAGETYPE_FOR_MAKE", re.sub(r'\.gz$', '', kerneltype))

@@ -40,6 +36,16 @@ python __anonymous () {
          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.
+inherit kernel-uimage
+
  # 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
@@ -432,47 +438,6 @@ MODULE_TARBALL_BASE_NAME ?= "${MODULE_IMAGE_BASE_NAME}.tgz"
  MODULE_TARBALL_SYMLINK_NAME ?= "modules-${MACHINE}.tgz"
  MODULE_TARBALL_DEPLOY ?= "1"

-uboot_prep_kimage() {
-       if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
-               vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
-               linux_suffix=""
-               linux_comp="none"
-       else
-               vmlinux_path="vmlinux"
-               linux_suffix=".gz"
-               linux_comp="gzip"
-       fi
-
-       ${OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin
-
-       if [ "${linux_comp}" != "none" ] ; then
-               rm -f linux.bin
-               gzip -9 linux.bin
-               mv -f "linux.bin${linux_suffix}" linux.bin
-       fi
-
-       echo "${linux_comp}"
-}
-
-do_uboot_mkimage() {
-       if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then
-               if test "x${KEEPUIMAGE}" != "xyes" ; then
-                       uboot_prep_kimage
-
-                       ENTRYPOINT=${UBOOT_ENTRYPOINT}
-                       if test -n "${UBOOT_ENTRYSYMBOL}"; then
-                               ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
-                                       awk '$3=="${UBOOT_ENTRYSYMBOL}" {print 
$1}'`
-                       fi
-
-                       uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C 
"${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n 
"${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
-                       rm -f linux.bin
-               fi
-       fi
-}
-
-addtask uboot_mkimage before do_install after do_compile
-
  kernel_do_deploy() {
        install -m 0644 ${KERNEL_OUTPUT} 
${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
        if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e 
'^CONFIG_MODULES=y$' .config); then


--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to