<div dir="ltr">This patch needs to be adjusted, please ignore this patch set 3, will send a V4 soon.<div><br></div><div>//Ming Liu</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-21 15:34 GMT+01:00 <span dir="ltr"><<a href="mailto:liu.ming50@gmail.com" target="_blank">liu.ming50@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Ming Liu <<a href="mailto:peter.x.liu@external.atlascopco.com">peter.x.liu@external.<wbr>atlascopco.com</a>><br>
<br>
To implement initramfs bundled kernel packaging.<br>
<br>
The kernel images are copied from DEPLOY_DIR_IMAGE, and a list of<br>
packages will be generated according to KERNEL_IMAGETYPES setting.<br>
<br>
For instance:<br>
For KERNEL_IMAGETYPES = "bzImage vmlinux"<br>
<br>
the generated packages would be:<br>
- kernel-initramfs (Base package, RDEPENDS on kernel-initramfs-image)<br>
- kernel-initramfs-image (Image package, RDEPENDS on all sub images)<br>
- kernel-initramfs-image-bzimage (Contains bzImage image)<br>
- kernel-initramfs-vmlinux (Contains vmlinux image)<br>
<br>
This recipe would be skipped if INITRAMFS_IMAGE_BUNDLE or<br>
INITRAMFS_IMAGE is not being set correctly.<br>
<br>
Signed-off-by: Ming Liu <<a href="mailto:peter.x.liu@external.atlascopco.com">peter.x.liu@external.<wbr>atlascopco.com</a>><br>
---<br>
meta/recipes-kernel/linux/<a href="http://kernel-initramfs.bb" rel="noreferrer" target="_blank">kern<wbr>el-initramfs.bb</a> | 100 ++++++++++++++++++++++++++<br>
1 file changed, 100 insertions(+)<br>
create mode 100644 meta/recipes-kernel/linux/<a href="http://kernel-initramfs.bb" rel="noreferrer" target="_blank">kern<wbr>el-initramfs.bb</a><br>
<br>
diff --git a/meta/recipes-kernel/linux/<a href="http://kernel-initramfs.bb" rel="noreferrer" target="_blank">ke<wbr>rnel-initramfs.bb</a> b/meta/recipes-kernel/linux/<a href="http://kernel-initramfs.bb" rel="noreferrer" target="_blank">ke<wbr>rnel-initramfs.bb</a><br>
new file mode 100644<br>
index 0000000..91ea55e<br>
--- /dev/null<br>
+++ b/meta/recipes-kernel/linux/<a href="http://kernel-initramfs.bb" rel="noreferrer" target="_blank">ke<wbr>rnel-initramfs.bb</a><br>
@@ -0,0 +1,100 @@<br>
+SUMMARY = "Initramfs bundled kernel images"<br>
+DESCRIPTION = "When built, it packages initramfs bundled kernel images of the \<br>
+preferred virtual/kernel provider."<br>
+SECTION = "kernel"<br>
+LICENSE = "GPLv2"<br>
+<br>
+inherit linux-kernel-base<br>
+<br>
+# Whilst not a module, this ensures we don't get multilib extended. (which would make no sense)<br>
+inherit module-base<br>
+<br>
+S = "${STAGING_KERNEL_DIR}"<br>
+B = "${WORKDIR}/build"<br>
+<br>
+# we dont need the default dependencies.<br>
+INHIBIT_DEFAULT_DEPS = "1"<br>
+<br>
+KERNEL_ALT_IMAGETYPE ??= ""<br>
+KERNEL_IMAGETYPES_append = " vmlinux"<br>
+KERNEL_IMAGETYPE ?= "zImage"<br>
+KERNEL_IMAGEDEST ?= "boot"<br>
+KERNEL_VERSION = "${@['1.0.0', get_kernelversion_file('${<wbr>STAGING_KERNEL_BUILDDIR}')][<wbr>get_kernelversion_file('${<wbr>STAGING_KERNEL_BUILDDIR}') != None]}"<br>
+KERNEL_PKG_NAME = "${@legitimize_package_name(d.<wbr>getVar('KERNEL_VERSION'))}"<br>
+KERNEL_PRIORITY ?= "${@int(d.getVar('KERNEL_<wbr>VERSION').split('-')[0].split(<wbr>'+')[0].split('.')[0]) * 10000 + \<br>
+ int(d.getVar('KERNEL_VERSION')<wbr>.split('-')[0].split('+')[0].<wbr>split('.')[1]) * 100 + \<br>
+ int(d.getVar('KERNEL_VERSION')<wbr>.split('-')[0].split('+')[0].<wbr>split('.')[-1])}"<br>
+<br>
+PACKAGES = "${PN} ${PN}-image"<br>
+<br>
+FILES_${PN} = ""<br>
+FILES_${PN}-image = ""<br>
+RDEPENDS_${PN} = "${PN}-image"<br>
+PKG_${PN} = "${PN}-${KERNEL_PKG_NAME}"<br>
+PKG_${PN}-image = "${PN}-image-${KERNEL_PKG_<wbr>NAME}"<br>
+RPROVIDES_${PN} += "${PN}-${KERNEL_VERSION}"<br>
+ALLOW_EMPTY_${PN} = "1"<br>
+ALLOW_EMPTY_${PN}-image = "1"<br>
+<br>
+PACKAGE_ARCH = "${MACHINE_ARCH}"<br>
+<br>
+PACKAGES_DYNAMIC = "^kernel-initramfs-image-.*"<br>
+<br>
+python __anonymous () {<br>
+ # Skip processing of this recipe if INITRAMFS_IMAGE or INITRAMFS_IMAGE_BUNDLE<br>
+ # is not set correctly, to avoid generating only empty packages which makes<br>
+ # no sense.<br>
+ if not d.getVar('INITRAMFS_IMAGE') or d.getVar('INITRAMFS_IMAGE_<wbr>BUNDLE') != '1':<br>
+ raise bb.parse.SkipPackage("Set INITRAMFS_IMAGE and INITRAMFS_IMAGE_BUNDLE to enable it")<br>
+<br>
+ # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES<br>
+ types = set((d.getVar('KERNEL_<wbr>IMAGETYPES') or "").split())<br>
+ types.add(d.getVar('KERNEL_<wbr>IMAGETYPE') or "")<br>
+ types.add(d.getVar('KERNEL_<wbr>ALT_IMAGETYPE') or "")<br>
+ types = ' '.join(sorted(types)).strip()<br>
+ d.setVar('KERNEL_IMAGETYPES', types)<br>
+<br>
+ for type in types.split():<br>
+ pn = d.getVar('PN')<br>
+ imagedest = d.getVar('KERNEL_IMAGEDEST')<br>
+ if type == "vmlinux":<br>
+ typelower = type.lower()<br>
+ else:<br>
+ typelower = "image-%s" % type.lower()<br>
+<br>
+ d.appendVar('PACKAGES', ' %s-%s' % (pn, typelower))<br>
+ if type != 'vmlinux' or 'vmlinux' in (d.getVar('KERNEL_IMAGETYPE') or ""):<br>
+ d.appendVar('RDEPENDS_%s-<wbr>image' % pn, ' %s-%s' % (pn, typelower))<br>
+<br>
+ d.setVar('FILES_%s-%s' % (pn, typelower), '/%s/%s-initramfs-${KERNEL_<wbr>VERSION}' % (imagedest, type))<br>
+ d.setVar('PKG_%s-%s' % ( pn, typelower), '%s-%s-${KERNEL_PKG_NAME}' % (pn, typelower))<br>
+<br>
+ priority = d.getVar('KERNEL_PRIORITY')<br>
+ postinst = '#!/bin/sh\nupdate-<wbr>alternatives --install /%s/%s-initramfs %s-initramfs %s-initramfs-${KERNEL_VERSION} %s || true\n' % (imagedest, type, type, type, priority)<br>
+ d.setVar('pkg_postinst_%s-%s' % (pn, typelower), postinst)<br>
+<br>
+ postrm = '#!/bin/sh\nupdate-<wbr>alternatives --remove %s-initramfs %s-initramfs-${KERNEL_VERSION} || true\n' % (type, type)<br>
+ d.setVar('pkg_postrm_%s-%s' % (pn, typelower), postrm)<br>
+}<br>
+<br>
+# Need the output of deploy.<br>
+do_install[depends] += "virtual/kernel:do_deploy"<br>
+<br>
+# We only need the packaging tasks - disable the rest<br>
+do_fetch[noexec] = "1"<br>
+do_unpack[noexec] = "1"<br>
+do_patch[noexec] = "1"<br>
+do_configure[noexec] = "1"<br>
+do_compile[noexec] = "1"<br>
+do_populate_sysroot[noexec] = "1"<br>
+<br>
+do_install() {<br>
+ if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then<br>
+ echo "Copying initramfs bundled kernel images from ${DEPLOY_DIR_IMAGE}..."<br>
+ install -d ${D}/${KERNEL_IMAGEDEST}<br>
+ for type in ${KERNEL_IMAGETYPES}; do<br>
+ echo "Copying initramfs bundled kernel image: $type-initramfs-${MACHINE}.<wbr>bin"<br>
+ install -m 0644 ${DEPLOY_DIR_IMAGE}/$type-<wbr>initramfs-${MACHINE}.bin ${D}/${KERNEL_IMAGEDEST}/$<wbr>type-initramfs-${KERNEL_<wbr>VERSION}<br>
+ done<br>
+ fi<br>
+}<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.7.4<br>
<br>
</font></span></blockquote></div><br></div>