From: Bruce Ashfield <bruce.ashfield@windriver.com>
To: Marek Vasut <marex@denx.de>, <openembedded-core@lists.openembedded.org>
Cc: Paul Eggleton <paul.eggleton@linux.intel.com>,
Koen Kooi <koen@dominion.thruhere.net>
Subject: Re: [PATCH 4/8] kernel: Pull uImage generation into separate class
Date: Tue, 28 Apr 2015 14:44:54 -0400 [thread overview]
Message-ID: <553FD526.2020708@windriver.com> (raw)
In-Reply-To: <1430239116-7671-5-git-send-email-marex@denx.de>
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 <marex@denx.de>
> Cc: Richard Purdie <richard.purdie@linuxfoundation.org>
> Cc: Koen Kooi <koen@dominion.thruhere.net>
> Cc: Paul Eggleton <paul.eggleton@linux.intel.com>
> Cc: Ross Burton <ross.burton@intel.com>
> Cc: Bruce Ashfield <bruce.ashfield@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
>
next prev parent reply other threads:[~2015-04-28 18:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-28 16:38 [PATCH 0/8] Add basic fitImage support Marek Vasut
2015-04-28 16:38 ` [PATCH 1/8] kernel: Clean up KERNEL_IMAGETYPE_FOR_MAKE Marek Vasut
2015-04-28 16:38 ` [PATCH 2/8] kernel: Rework do_uboot_mkimage Marek Vasut
2015-04-28 16:38 ` [PATCH 3/8] kernel: Pull out the linux.bin generation Marek Vasut
2015-04-28 16:38 ` [PATCH 4/8] kernel: Pull uImage generation into separate class Marek Vasut
2015-04-28 18:44 ` Bruce Ashfield [this message]
2015-04-28 21:16 ` Marek Vasut
2015-05-04 21:41 ` Marek Vasut
2015-05-12 14:15 ` Paul Eggleton
2015-05-12 15:38 ` Bruce Ashfield
2015-05-12 16:18 ` Paul Eggleton
2015-05-12 19:27 ` Marek Vasut
2015-05-12 20:57 ` Paul Eggleton
2015-05-12 22:18 ` Marek Vasut
2015-05-12 22:27 ` Paul Eggleton
2015-05-13 7:17 ` Marek Vasut
2015-04-28 16:38 ` [PATCH 5/8] kernel: Separate out uboot_prep_kimage Marek Vasut
2015-04-28 16:38 ` [PATCH 6/8] kernel: Build DTBs early Marek Vasut
2015-04-28 16:38 ` [PATCH 7/8] kernel: Add basic fitImage support Marek Vasut
2015-04-28 16:38 ` [PATCH 8/8] kernel: Build uImage only when really needed Marek Vasut
2015-04-28 18:43 ` Bruce Ashfield
2015-04-28 21:15 ` Marek Vasut
2015-04-28 18:45 ` [PATCH 0/8] Add basic fitImage support Bruce Ashfield
2015-04-28 20:06 ` Marek Vasut
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=553FD526.2020708@windriver.com \
--to=bruce.ashfield@windriver.com \
--cc=koen@dominion.thruhere.net \
--cc=marex@denx.de \
--cc=openembedded-core@lists.openembedded.org \
--cc=paul.eggleton@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox