[OE-core] [PATCH 4/4] kernel-initramfs: add recipe
Ming Liu
liu.ming50 at gmail.com
Wed Mar 22 04:50:10 UTC 2017
This patch needs to be adjusted, please ignore this patch set 3, will send
a V4 soon.
//Ming Liu
2017-03-21 15:34 GMT+01:00 <liu.ming50 at gmail.com>:
> From: Ming Liu <peter.x.liu at external.atlascopco.com>
>
> To implement initramfs bundled kernel packaging.
>
> The kernel images are copied from DEPLOY_DIR_IMAGE, and a list of
> packages will be generated according to KERNEL_IMAGETYPES setting.
>
> For instance:
> For KERNEL_IMAGETYPES = "bzImage vmlinux"
>
> the generated packages would be:
> - kernel-initramfs (Base package, RDEPENDS on kernel-initramfs-image)
> - kernel-initramfs-image (Image package, RDEPENDS on all sub images)
> - kernel-initramfs-image-bzimage (Contains bzImage image)
> - kernel-initramfs-vmlinux (Contains vmlinux image)
>
> This recipe would be skipped if INITRAMFS_IMAGE_BUNDLE or
> INITRAMFS_IMAGE is not being set correctly.
>
> Signed-off-by: Ming Liu <peter.x.liu at external.atlascopco.com>
> ---
> meta/recipes-kernel/linux/kernel-initramfs.bb | 100
> ++++++++++++++++++++++++++
> 1 file changed, 100 insertions(+)
> create mode 100644 meta/recipes-kernel/linux/kernel-initramfs.bb
>
> diff --git a/meta/recipes-kernel/linux/kernel-initramfs.bb
> b/meta/recipes-kernel/linux/kernel-initramfs.bb
> new file mode 100644
> index 0000000..91ea55e
> --- /dev/null
> +++ b/meta/recipes-kernel/linux/kernel-initramfs.bb
> @@ -0,0 +1,100 @@
> +SUMMARY = "Initramfs bundled kernel images"
> +DESCRIPTION = "When built, it packages initramfs bundled kernel images of
> the \
> +preferred virtual/kernel provider."
> +SECTION = "kernel"
> +LICENSE = "GPLv2"
> +
> +inherit linux-kernel-base
> +
> +# Whilst not a module, this ensures we don't get multilib extended.
> (which would make no sense)
> +inherit module-base
> +
> +S = "${STAGING_KERNEL_DIR}"
> +B = "${WORKDIR}/build"
> +
> +# we dont need the default dependencies.
> +INHIBIT_DEFAULT_DEPS = "1"
> +
> +KERNEL_ALT_IMAGETYPE ??= ""
> +KERNEL_IMAGETYPES_append = " vmlinux"
> +KERNEL_IMAGETYPE ?= "zImage"
> +KERNEL_IMAGEDEST ?= "boot"
> +KERNEL_VERSION = "${@['1.0.0', get_kernelversion_file('${
> STAGING_KERNEL_BUILDDIR}')][get_kernelversion_file('${STAGING_KERNEL_BUILDDIR}')
> != None]}"
> +KERNEL_PKG_NAME = "${@legitimize_package_name(d.
> getVar('KERNEL_VERSION'))}"
> +KERNEL_PRIORITY ?= "${@int(d.getVar('KERNEL_
> VERSION').split('-')[0].split('+')[0].split('.')[0]) * 10000 + \
> + int(d.getVar('KERNEL_VERSION')
> .split('-')[0].split('+')[0].split('.')[1]) * 100 + \
> + int(d.getVar('KERNEL_VERSION')
> .split('-')[0].split('+')[0].split('.')[-1])}"
> +
> +PACKAGES = "${PN} ${PN}-image"
> +
> +FILES_${PN} = ""
> +FILES_${PN}-image = ""
> +RDEPENDS_${PN} = "${PN}-image"
> +PKG_${PN} = "${PN}-${KERNEL_PKG_NAME}"
> +PKG_${PN}-image = "${PN}-image-${KERNEL_PKG_NAME}"
> +RPROVIDES_${PN} += "${PN}-${KERNEL_VERSION}"
> +ALLOW_EMPTY_${PN} = "1"
> +ALLOW_EMPTY_${PN}-image = "1"
> +
> +PACKAGE_ARCH = "${MACHINE_ARCH}"
> +
> +PACKAGES_DYNAMIC = "^kernel-initramfs-image-.*"
> +
> +python __anonymous () {
> + # Skip processing of this recipe if INITRAMFS_IMAGE or
> INITRAMFS_IMAGE_BUNDLE
> + # is not set correctly, to avoid generating only empty packages which
> makes
> + # no sense.
> + if not d.getVar('INITRAMFS_IMAGE') or d.getVar('INITRAMFS_IMAGE_BUNDLE')
> != '1':
> + raise bb.parse.SkipPackage("Set INITRAMFS_IMAGE and
> INITRAMFS_IMAGE_BUNDLE to enable it")
> +
> + # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into
> KERNEL_IMAGETYPES
> + types = set((d.getVar('KERNEL_IMAGETYPES') or "").split())
> + types.add(d.getVar('KERNEL_IMAGETYPE') or "")
> + types.add(d.getVar('KERNEL_ALT_IMAGETYPE') or "")
> + types = ' '.join(sorted(types)).strip()
> + d.setVar('KERNEL_IMAGETYPES', types)
> +
> + for type in types.split():
> + pn = d.getVar('PN')
> + imagedest = d.getVar('KERNEL_IMAGEDEST')
> + if type == "vmlinux":
> + typelower = type.lower()
> + else:
> + typelower = "image-%s" % type.lower()
> +
> + d.appendVar('PACKAGES', ' %s-%s' % (pn, typelower))
> + if type != 'vmlinux' or 'vmlinux' in
> (d.getVar('KERNEL_IMAGETYPE') or ""):
> + d.appendVar('RDEPENDS_%s-image' % pn, ' %s-%s' % (pn,
> typelower))
> +
> + d.setVar('FILES_%s-%s' % (pn, typelower),
> '/%s/%s-initramfs-${KERNEL_VERSION}' % (imagedest, type))
> + d.setVar('PKG_%s-%s' % ( pn, typelower),
> '%s-%s-${KERNEL_PKG_NAME}' % (pn, typelower))
> +
> + priority = d.getVar('KERNEL_PRIORITY')
> + postinst = '#!/bin/sh\nupdate-alternatives --install
> /%s/%s-initramfs %s-initramfs %s-initramfs-${KERNEL_VERSION} %s || true\n'
> % (imagedest, type, type, type, priority)
> + d.setVar('pkg_postinst_%s-%s' % (pn, typelower), postinst)
> +
> + postrm = '#!/bin/sh\nupdate-alternatives --remove %s-initramfs
> %s-initramfs-${KERNEL_VERSION} || true\n' % (type, type)
> + d.setVar('pkg_postrm_%s-%s' % (pn, typelower), postrm)
> +}
> +
> +# Need the output of deploy.
> +do_install[depends] += "virtual/kernel:do_deploy"
> +
> +# We only need the packaging tasks - disable the rest
> +do_fetch[noexec] = "1"
> +do_unpack[noexec] = "1"
> +do_patch[noexec] = "1"
> +do_configure[noexec] = "1"
> +do_compile[noexec] = "1"
> +do_populate_sysroot[noexec] = "1"
> +
> +do_install() {
> + if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" =
> x1 ]; then
> + echo "Copying initramfs bundled kernel images from
> ${DEPLOY_DIR_IMAGE}..."
> + install -d ${D}/${KERNEL_IMAGEDEST}
> + for type in ${KERNEL_IMAGETYPES}; do
> + echo "Copying initramfs bundled kernel image:
> $type-initramfs-${MACHINE}.bin"
> + install -m 0644 ${DEPLOY_DIR_IMAGE}/$type-initramfs-${MACHINE}.bin
> ${D}/${KERNEL_IMAGEDEST}/$type-initramfs-${KERNEL_VERSION}
> + done
> + fi
> +}
> --
> 2.7.4
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20170322/c4457f68/attachment-0002.html>
More information about the Openembedded-core
mailing list