<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">&lt;<a href="mailto:liu.ming50@gmail.com" target="_blank">liu.ming50@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Ming Liu &lt;<a href="mailto:peter.x.liu@external.atlascopco.com">peter.x.liu@external.<wbr>atlascopco.com</a>&gt;<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 = &quot;bzImage vmlinux&quot;<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 &lt;<a href="mailto:peter.x.liu@external.atlascopco.com">peter.x.liu@external.<wbr>atlascopco.com</a>&gt;<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 = &quot;Initramfs bundled kernel images&quot;<br>
+DESCRIPTION = &quot;When built, it packages initramfs bundled kernel images of the \<br>
+preferred virtual/kernel provider.&quot;<br>
+SECTION = &quot;kernel&quot;<br>
+LICENSE = &quot;GPLv2&quot;<br>
+<br>
+inherit linux-kernel-base<br>
+<br>
+# Whilst not a module, this ensures we don&#39;t get multilib extended. (which would make no sense)<br>
+inherit module-base<br>
+<br>
+S = &quot;${STAGING_KERNEL_DIR}&quot;<br>
+B = &quot;${WORKDIR}/build&quot;<br>
+<br>
+# we dont need the default dependencies.<br>
+INHIBIT_DEFAULT_DEPS = &quot;1&quot;<br>
+<br>
+KERNEL_ALT_IMAGETYPE ??= &quot;&quot;<br>
+KERNEL_IMAGETYPES_append = &quot; vmlinux&quot;<br>
+KERNEL_IMAGETYPE ?= &quot;zImage&quot;<br>
+KERNEL_IMAGEDEST ?= &quot;boot&quot;<br>
+KERNEL_VERSION = &quot;${@[&#39;1.0.0&#39;, get_kernelversion_file(&#39;${<wbr>STAGING_KERNEL_BUILDDIR}&#39;)][<wbr>get_kernelversion_file(&#39;${<wbr>STAGING_KERNEL_BUILDDIR}&#39;) != None]}&quot;<br>
+KERNEL_PKG_NAME = &quot;${@legitimize_package_name(d.<wbr>getVar(&#39;KERNEL_VERSION&#39;))}&quot;<br>
+KERNEL_PRIORITY ?= &quot;${@int(d.getVar(&#39;KERNEL_<wbr>VERSION&#39;).split(&#39;-&#39;)[0].split(<wbr>&#39;+&#39;)[0].split(&#39;.&#39;)[0]) * 10000 + \<br>
+                       int(d.getVar(&#39;KERNEL_VERSION&#39;)<wbr>.split(&#39;-&#39;)[0].split(&#39;+&#39;)[0].<wbr>split(&#39;.&#39;)[1]) * 100 + \<br>
+                       int(d.getVar(&#39;KERNEL_VERSION&#39;)<wbr>.split(&#39;-&#39;)[0].split(&#39;+&#39;)[0].<wbr>split(&#39;.&#39;)[-1])}&quot;<br>
+<br>
+PACKAGES = &quot;${PN} ${PN}-image&quot;<br>
+<br>
+FILES_${PN} = &quot;&quot;<br>
+FILES_${PN}-image = &quot;&quot;<br>
+RDEPENDS_${PN} = &quot;${PN}-image&quot;<br>
+PKG_${PN} = &quot;${PN}-${KERNEL_PKG_NAME}&quot;<br>
+PKG_${PN}-image = &quot;${PN}-image-${KERNEL_PKG_<wbr>NAME}&quot;<br>
+RPROVIDES_${PN} += &quot;${PN}-${KERNEL_VERSION}&quot;<br>
+ALLOW_EMPTY_${PN} = &quot;1&quot;<br>
+ALLOW_EMPTY_${PN}-image = &quot;1&quot;<br>
+<br>
+PACKAGE_ARCH = &quot;${MACHINE_ARCH}&quot;<br>
+<br>
+PACKAGES_DYNAMIC = &quot;^kernel-initramfs-image-.*&quot;<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(&#39;INITRAMFS_IMAGE&#39;) or d.getVar(&#39;INITRAMFS_IMAGE_<wbr>BUNDLE&#39;) != &#39;1&#39;:<br>
+        raise bb.parse.SkipPackage(&quot;Set INITRAMFS_IMAGE and INITRAMFS_IMAGE_BUNDLE to enable it&quot;)<br>
+<br>
+    # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES<br>
+    types = set((d.getVar(&#39;KERNEL_<wbr>IMAGETYPES&#39;) or &quot;&quot;).split())<br>
+    types.add(d.getVar(&#39;KERNEL_<wbr>IMAGETYPE&#39;) or &quot;&quot;)<br>
+    types.add(d.getVar(&#39;KERNEL_<wbr>ALT_IMAGETYPE&#39;) or &quot;&quot;)<br>
+    types = &#39; &#39;.join(sorted(types)).strip()<br>
+    d.setVar(&#39;KERNEL_IMAGETYPES&#39;, types)<br>
+<br>
+    for type in types.split():<br>
+        pn = d.getVar(&#39;PN&#39;)<br>
+        imagedest = d.getVar(&#39;KERNEL_IMAGEDEST&#39;)<br>
+        if type == &quot;vmlinux&quot;:<br>
+            typelower = type.lower()<br>
+        else:<br>
+            typelower = &quot;image-%s&quot; % type.lower()<br>
+<br>
+        d.appendVar(&#39;PACKAGES&#39;, &#39; %s-%s&#39; % (pn, typelower))<br>
+        if type != &#39;vmlinux&#39; or &#39;vmlinux&#39; in (d.getVar(&#39;KERNEL_IMAGETYPE&#39;) or &quot;&quot;):<br>
+            d.appendVar(&#39;RDEPENDS_%s-<wbr>image&#39; % pn, &#39; %s-%s&#39; % (pn, typelower))<br>
+<br>
+        d.setVar(&#39;FILES_%s-%s&#39; % (pn, typelower), &#39;/%s/%s-initramfs-${KERNEL_<wbr>VERSION}&#39; % (imagedest, type))<br>
+        d.setVar(&#39;PKG_%s-%s&#39; % ( pn, typelower), &#39;%s-%s-${KERNEL_PKG_NAME}&#39; % (pn, typelower))<br>
+<br>
+        priority = d.getVar(&#39;KERNEL_PRIORITY&#39;)<br>
+        postinst = &#39;#!/bin/sh\nupdate-<wbr>alternatives --install /%s/%s-initramfs %s-initramfs %s-initramfs-${KERNEL_VERSION} %s || true\n&#39; % (imagedest, type, type, type, priority)<br>
+        d.setVar(&#39;pkg_postinst_%s-%s&#39; % (pn, typelower), postinst)<br>
+<br>
+        postrm = &#39;#!/bin/sh\nupdate-<wbr>alternatives --remove %s-initramfs %s-initramfs-${KERNEL_VERSION} || true\n&#39; % (type, type)<br>
+        d.setVar(&#39;pkg_postrm_%s-%s&#39; % (pn, typelower), postrm)<br>
+}<br>
+<br>
+# Need the output of deploy.<br>
+do_install[depends] += &quot;virtual/kernel:do_deploy&quot;<br>
+<br>
+# We only need the packaging tasks - disable the rest<br>
+do_fetch[noexec] = &quot;1&quot;<br>
+do_unpack[noexec] = &quot;1&quot;<br>
+do_patch[noexec] = &quot;1&quot;<br>
+do_configure[noexec] = &quot;1&quot;<br>
+do_compile[noexec] = &quot;1&quot;<br>
+do_populate_sysroot[noexec] = &quot;1&quot;<br>
+<br>
+do_install() {<br>
+       if [ ! -z &quot;${INITRAMFS_IMAGE}&quot; -a x&quot;${INITRAMFS_IMAGE_BUNDLE}&quot; = x1 ]; then<br>
+               echo &quot;Copying initramfs bundled kernel images from ${DEPLOY_DIR_IMAGE}...&quot;<br>
+               install -d ${D}/${KERNEL_IMAGEDEST}<br>
+               for type in ${KERNEL_IMAGETYPES}; do<br>
+                       echo &quot;Copying initramfs bundled kernel image: $type-initramfs-${MACHINE}.<wbr>bin&quot;<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>