<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 22, 2016 at 3:43 AM, He Zhe <span dir="ltr">&lt;<a href="mailto:zhe.he@windriver.com" target="_blank">zhe.he@windriver.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
On 02/19/2016 11:46 PM, Bruce Ashfield wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Fri, Feb 19, 2016 at 4:56 AM, &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a> &lt;mailto:<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;&gt;wrote:<br>
&gt;<br>
&gt;     From: He Zhe &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a> &lt;mailto:<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;&gt;<br>
<span class="">&gt;<br>
&gt;     Add KERNEL_IMAGETYPES to support building packaging and installing<br>
&gt;     multi types of kernel images, such as zImage uImage, at one time.<br>
&gt;<br>
&gt;     KERNEL_IMAGETYPE works as before. All KERNEL_ALT_IMAGETYPEs are<br>
&gt;     replaced by KERNEL_IMAGETYPES.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I see that you have updated layers/configs with the new variable, but obviously you can&#39;t see all the<br>
&gt; layers that may be using that old variable.<br>
&gt;<br>
&gt; Isn&#39;t it possible to have a python routine that detects the old ALT_IMAGETYPE variable and<br>
&gt; assigns it to the new one (if it isn&#39;t already set) ? Sort of like how distro features/features backfill<br>
&gt; work ?<br>
&gt;<br>
<br>
</span>Thanks for careful review.<br>
<br>
OK. I&#39;ll try to add such function.<br>
<br>
&gt;<br>
&gt;     Fixes [YOCTO #6945].<br>
&gt;<br>
&gt;     Signed-off-by: He Zhe &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a> &lt;mailto:<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;&gt;<br>
<div><div class="h5">&gt;     ---<br>
&gt;      documentation/ref-manual/ref-variables.xml         |  10 +-<br>
&gt;      meta-yocto-bsp/conf/machine/edgerouter.conf        |   2 +-<br>
&gt;      meta/classes/kernel-fitimage.bbclass               |  20 +--<br>
&gt;      meta/classes/kernel-grub.bbclass                   |  44 ++++--<br>
&gt;      meta/classes/kernel-uimage.bbclass                 |  22 +--<br>
&gt;      meta/classes/kernel.bbclass                        | 171 +++++++++++++++------<br>
&gt;      meta/conf/documentation.conf                       |   1 +<br>
&gt;      meta/conf/machine/qemumips.conf                    |   2 +-<br>
&gt;      meta/conf/machine/qemumips64.conf                  |   2 +-<br>
&gt;      meta/recipes-kernel/linux/linux-dtb.inc            |  49 +++---<br>
&gt;      .../target/arch/mips/conf/machine/machine.conf     |   2 +-<br>
&gt;      .../target/arch/mips64/conf/machine/machine.conf   |   2 +-<br>
&gt;      .../target/arch/qemu/conf/machine/machine.conf     |   2 +-<br>
&gt;      13 files changed, 214 insertions(+), 115 deletions(-)<br>
&gt;<br>
&gt;     diff --git a/documentation/ref-manual/ref-variables.xml b/documentation/ref-manual/ref-variables.xml<br>
&gt;     index a76a8c2..a8e4fd8 100644<br>
&gt;     --- a/documentation/ref-manual/ref-variables.xml<br>
&gt;     +++ b/documentation/ref-manual/ref-variables.xml<br>
&gt;     @@ -6417,14 +6417,14 @@ recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR = &quot;${INC_PR}.3&quot;<br>
&gt;                  &lt;/glossdef&gt;<br>
&gt;              &lt;/glossentry&gt;<br>
&gt;<br>
&gt;     -        &lt;glossentry id=&#39;var-KERNEL_ALT_IMAGETYPE&#39;&gt;&lt;glossterm&gt;KERNEL_ALT_IMAGETYPE&lt;/glossterm&gt;<br>
&gt;     +        &lt;glossentry id=&#39;var-KERNEL_IMAGETYPES&#39;&gt;&lt;glossterm&gt;KERNEL_IMAGETYPES&lt;/glossterm&gt;<br>
&gt;                  &lt;info&gt;<br>
&gt;     -                KERNEL_ALT_IMAGETYPE[doc] = &quot;Specifies an alternate kernel image type for creation.&quot;<br>
&gt;     +                KERNEL_IMAGETYPES[doc] = &quot;Specifies alternate kernel image types for creation.&quot;<br>
&gt;                  &lt;/info&gt;<br>
&gt;                  &lt;glossdef&gt;<br>
&gt;                      &lt;para role=&quot;glossdeffirst&quot;&gt;<br>
&gt;      &lt;!--                &lt;para role=&quot;glossdeffirst&quot;&gt;&lt;imagedata fileref=&quot;figures/define-generic.png&quot; /&gt; --&gt;<br>
&gt;     -                    Specifies an alternate kernel image type for creation in<br>
&gt;     +                    Specifies alternate kernel image types for creation in<br>
&gt;                          addition to the kernel image type specified using the<br>
&gt;                          &lt;link linkend=&#39;var-KERNEL_IMAGETYPE&#39;&gt;&lt;filename&gt;KERNEL_IMAGETYPE&lt;/filename&gt;&lt;/link&gt;<br>
&gt;                          variable.<br>
&gt;     @@ -6612,8 +6612,8 @@ recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR = &quot;${INC_PR}.3&quot;<br>
&gt;                      &lt;/para&gt;<br>
&gt;<br>
&gt;                      &lt;para&gt;<br>
&gt;     -                    If you want to build an alternate kernel image type, use the<br>
&gt;     -                    &lt;link linkend=&#39;var-KERNEL_ALT_IMAGETYPE&#39;&gt;&lt;filename&gt;KERNEL_ALT_IMAGETYPE&lt;/filename&gt;&lt;/link&gt;<br>
&gt;     +                    If you want to build alternate kernel image types, use the<br>
&gt;     +                    &lt;link linkend=&#39;var-KERNEL_IMAGETYPES&#39;&gt;&lt;filename&gt;KERNEL_IMAGETYPES&lt;/filename&gt;&lt;/link&gt;<br>
&gt;                          variable.<br>
&gt;                      &lt;/para&gt;<br>
&gt;                  &lt;/glossdef&gt;<br>
&gt;     diff --git a/meta-yocto-bsp/conf/machine/edgerouter.conf b/meta-yocto-bsp/conf/machine/edgerouter.conf<br>
&gt;     index 476e690..affd568 100644<br>
&gt;     --- a/meta-yocto-bsp/conf/machine/edgerouter.conf<br>
&gt;     +++ b/meta-yocto-bsp/conf/machine/edgerouter.conf<br>
&gt;     @@ -7,7 +7,7 @@ require conf/machine/include/tune-mips64.inc<br>
&gt;      MACHINE_FEATURES = &quot;pci ext2 ext3 serial&quot;<br>
&gt;<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;<br>
&gt;<br>
&gt; This now reads a bit ... odd (for back of a better description). I&#39;m concerned that it will cause<br>
&gt; confusion, there are two variables:<br>
&gt;<br>
&gt; KERNEL_IMAGETYPE and KERNEL_IMAGETYPES ..<br>
&gt;<br>
&gt; They are very close in name, and just reading the variable doesn&#39;t really tell us why<br>
&gt; we&#39;d set one and not the other. The old &quot;ALT&quot; made it more obvious.<br>
&gt;<br>
<br>
</div></div>But changing original KERNEL_ALT_IMAGETYPE to a list or using KERNEL_ALT_IMAGETYPES<br>
in addition to KERNEL_ALT_IMAGETYPE also seems not very clear. Below is the previous<br>
talk with Richard Purdie and Christopher Larson.<br></blockquote><div><br></div><div><br></div><div>Aha. I didn&#39;t recall that previous discussion. Clearly there&#39;s no &quot;one good way&quot; to name</div><div>these to avoid some confusion, so I&#39;d defer to Richard&#39;s opinion on the naming.</div><div><br></div><div>That being said, I do wish that the names conveyed why there was a variable that</div><div>took a single image type, and then another one that took a list, and that the lists</div><div>were non overlapping. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
&gt;&gt;&gt;&gt;&gt; Question, why not add KERNEL_IMAGETYPES, and make KERNEL_IMAGETYPE equal to your new KERNEL_IMAGETYPE_0?(Christopher)<br>
&gt;&gt;&gt;&gt; Adding a new KERNEL_IMAGETYPES will also work. But it should be better(me)<br>
&gt;&gt;&gt;&gt; not to change the name of KERNEL_IMAGETYPE, so that those who have<br>
&gt;&gt;&gt;&gt; used it don&#39;t have to change their code.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thank you for reviewing.<br>
&gt;&gt;&gt; I have to agree with Chris here, keeping KERNEL_IMAGETYPE as used today(Richard)<br>
&gt;&gt;&gt; and equivalent to KERNEL_IMAGETYPE_0 and adding KERNEL_IMAGETYPES does<br>
&gt;&gt;&gt; seem like a cleaner way to implement this.<br>
&gt;&gt;<br>
&gt;&gt; But it might mean we are going to check both KERNEL_IMAGETYPE and KERNEL_IMAGETYPES(me)<br>
&gt;&gt; to generate final image type list. Is that OK?<br>
&gt;<br>
&gt;Well, in some places you will use one and in some places you&#39;ll use the(Richard)<br>
&gt;other, that is unavoidable.<br>
&gt;<br>
&gt;I much prefer &quot;KERNEL_IMAGETYPE and KERNEL_IMAGETYPES&quot; to<br>
&gt;&quot;KERNEL_IMAGETYPE_0 and KERNEL_IMAGETYPE&quot; as variable names though.<br>
&gt;<br>
&gt;Cheers,<br>
<span class=""><br>
&gt; But from the patch, KERNEL_IMAGETYPE isn&#39;t used, so does it have to be set at<br>
&gt; all in these .conf files ? .. or maybe I missed where it is still used other than for<br>
&gt; compatibility.<br>
&gt;<br>
<br>
</span>Not every KERNEL_IMAGETYPE should be replaced by KERNEL_IMAGETYPES. Only one<br>
type of kernel image is necessary for below cases.Right?<br>
<br>
Yes, more explanations should be added to commit message and code comments.<br>
<br>
1) boot fs image<br>
meta/classes/bootimg.bbclass:50:KERNEL_IMAGETYPE ??= &quot;bzImage&quot;<br>
meta/classes/bootimg.bbclass:72:        install -m 0644 ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} ${DEST}/vmlinuz<br>
meta/classes/image_types.bbclass:109:ELF_KERNEL ?= &quot;${STAGING_DIR_HOST}/usr/src/kernel/${KERNEL_IMAGETYPE}&quot;<br>
<br>
2) test fs image<br>
meta/lib/oeqa/controllers/masterimage.py:55:        self.kernel = os.path.join(d.getVar(&quot;DEPLOY_DIR_IMAGE&quot;, True), d.getVar(&quot;KERNEL_IMAGETYPE&quot;, False) + &#39;-&#39; + d.getVar(&#39;MACHINE&#39;, False) + &#39;.bin&#39;)<br>
meta/lib/oeqa/targetcontrol.py:126:        self.kernel = os.path.join(d.getVar(&quot;DEPLOY_DIR_IMAGE&quot;, True), d.getVar(&quot;KERNEL_IMAGETYPE&quot;, False) + &#39;-&#39; + d.getVar(&#39;MACHINE&#39;, False) + &#39;.bin&#39;)<br>
<div><div class="h5"><br>
<br>
&gt;      KERNEL_IMAGE_STRIP_EXTRA_SECTIONS  = &quot;.comment&quot;<br>
&gt;<br>
&gt;      PREFERRED_PROVIDER_virtual/kernel ?= &quot;linux-yocto&quot;<br>
&gt;     diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass<br>
&gt;     index f1b409c..51df19d 100644<br>
&gt;     --- a/meta/classes/kernel-fitimage.bbclass<br>
&gt;     +++ b/meta/classes/kernel-fitimage.bbclass<br>
&gt;     @@ -1,8 +1,8 @@<br>
&gt;      inherit kernel-uboot<br>
&gt;<br>
&gt;      python __anonymous () {<br>
&gt;     -    kerneltype = d.getVar(&#39;KERNEL_IMAGETYPE&#39;, True)<br>
&gt;     -    if kerneltype == &#39;fitImage&#39;:<br>
&gt;     +    kerneltypes = d.getVar(&#39;KERNEL_IMAGETYPES&#39;, True) or &quot;&quot;<br>
&gt;     +    if &#39;fitImage&#39; in kerneltypes.split():<br>
&gt;              depends = d.getVar(&quot;DEPENDS&quot;, True)<br>
&gt;              depends = &quot;%s u-boot-mkimage-native dtc-native&quot; % depends<br>
&gt;              d.setVar(&quot;DEPENDS&quot;, depends)<br>
&gt;     @@ -10,7 +10,9 @@ python __anonymous () {<br>
&gt;             # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal<br>
&gt;             # to kernel.bbclass . We have to override it, since we pack zImage<br>
&gt;             # (at least for now) into the fitImage .<br>
&gt;     -        d.setVar(&quot;KERNEL_IMAGETYPE_FOR_MAKE&quot;, &quot;zImage&quot;)<br>
&gt;     +        typeformake = d.getVar(&quot;KERNEL_IMAGETYPE_FOR_MAKE&quot;, True) or &quot;&quot;<br>
&gt;     +        if &#39;fitImage&#39; in typeformake.split():<br>
&gt;     +            d.setVar(&#39;KERNEL_IMAGETYPE_FOR_MAKE&#39;, typeformake.replace(&#39;fitImage&#39;, &#39;zImage&#39;))<br>
&gt;<br>
&gt;              image = d.getVar(&#39;INITRAMFS_IMAGE&#39;, True)<br>
&gt;              if image:<br>
&gt;     @@ -154,7 +156,7 @@ EOF<br>
&gt;      }<br>
&gt;<br>
&gt;      do_assemble_fitimage() {<br>
&gt;     -       if test &quot;x${KERNEL_IMAGETYPE}&quot; = &quot;xfitImage&quot; ; then<br>
&gt;     +       if echo ${KERNEL_IMAGETYPES} | grep -Pq &quot;\bfitImage\b&quot;; then<br>
&gt;<br>
&gt;<br>
&gt; Not that it really matters, but grep -w would work here as well, and might read bit simpler.<br>
<br>
</div></div>OK. I&#39;ll replace it with &quot;-w&quot;<br>
<div><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;                     kernelcount=1<br>
&gt;                     dtbcount=&quot;&quot;<br>
&gt;                     rm -f fit-image.its<br>
&gt;     @@ -217,14 +219,14 @@ addtask assemble_fitimage before do_install after do_compile<br>
&gt;<br>
&gt;      kernel_do_deploy_append() {<br>
&gt;             # Update deploy directory<br>
&gt;     -       if test &quot;x${KERNEL_IMAGETYPE}&quot; = &quot;xfitImage&quot; ; then<br>
&gt;     +       if echo ${KERNEL_IMAGETYPES} | grep -Pq &quot;\bfitImage\b&quot;; then<br>
&gt;                     cd ${B}<br>
&gt;                     echo &quot;Copying fit-image.its source file...&quot;<br>
&gt;     -               its_base_name=&quot;${KERNEL_IMAGETYPE}-its-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     -               its_symlink_name=${KERNEL_IMAGETYPE}-its-${MACHINE}<br>
&gt;     +               its_base_name=&quot;fitImage-its-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     +               its_symlink_name=fitImage-its-${MACHINE}<br>
&gt;                     install -m 0644 fit-image.its ${DEPLOYDIR}/${its_base_name}.its<br>
&gt;     -               linux_bin_base_name=&quot;${KERNEL_IMAGETYPE}-linux.bin-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     -               linux_bin_symlink_name=${KERNEL_IMAGETYPE}-linux.bin-${MACHINE}<br>
&gt;     +               linux_bin_base_name=&quot;fitImage-linux.bin-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     +               linux_bin_symlink_name=fitImage-linux.bin-${MACHINE}<br>
&gt;                     install -m 0644 linux.bin ${DEPLOYDIR}/${linux_bin_base_name}.bin<br>
&gt;<br>
&gt;                     cd ${DEPLOYDIR}<br>
&gt;     diff --git a/meta/classes/kernel-grub.bbclass b/meta/classes/kernel-grub.bbclass<br>
&gt;     index a63f482..f7dcc07 100644<br>
&gt;     --- a/meta/classes/kernel-grub.bbclass<br>
&gt;     +++ b/meta/classes/kernel-grub.bbclass<br>
&gt;     @@ -10,41 +10,44 @@<br>
&gt;      #   updates the new kernel as the boot priority.<br>
&gt;      #<br>
&gt;<br>
&gt;     -pkg_preinst_kernel-image_append () {<br>
&gt;     +python __anonymous () {<br>
&gt;<br>
&gt;<br>
&gt; Maybe it is just the patch context making me misread this, but can you elaborate on<br>
&gt; what is changing here ?<br>
&gt;<br>
<br>
</div></div>Here I change the two variables, pkg_preinst_kernel-image_append and<br>
pkg_postinst_kernel-image_prepend to two strings, and change all &quot;${KERNEL_IMAGETYPE}&quot;<br>
in the strings to &quot;KERNEL_IMAGETYPE&quot; to avoid being expanded in parsing time. So that I can<br>
replace KERNEL_IMAGETYPEs to every single image type in the following loops, in which the<br>
two original variables&#39; name are constructed and their values are set.<br>
<br>
According to bitbake user manual, __anonymous functions are executed during parsing. It<br>
should be OK for the following references. I&#39;ve verified this by building an image with<br>
kernel-grub.bbclass.<br></blockquote><div><br></div><div><br></div><div>Thanks. That clarifies things, I know there have been some variable expansion changes</div><div>recently in bitbake, and I wanted to make sure they have been taken into account.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
&gt; Is it the old preinst is being replaced by anonymous python that generates the preinst as<br>
&gt; a string, and that this injected into the package via the python ? Are we guaranteed<br>
&gt; to run the anonymous python at the right time ? .. I&#39;ve been burned by that before, so<br>
&gt; I wanted to check that it has been considered.<br>
&gt;<br>
&gt;<br>
&gt;     +    import re<br>
&gt;     +<br>
&gt;     +    preinst = &#39;&#39;&#39;<br>
&gt;             # Parsing confliction<br>
&gt;             [ -f &quot;$D/boot/grub/menu.list&quot; ] &amp;&amp; grubcfg=&quot;$D/boot/grub/menu.list&quot;<br>
&gt;             [ -f &quot;$D/boot/grub/grub.cfg&quot; ] &amp;&amp; grubcfg=&quot;$D/boot/grub/grub.cfg&quot;<br>
&gt;             if [ -n &quot;$grubcfg&quot; ]; then<br>
&gt;                     # Dereference symlink to avoid confliction with new kernel name.<br>
&gt;     -               if grep -q &quot;/${KERNEL_IMAGETYPE} \+root=&quot; $grubcfg; then<br>
&gt;     -                       if [ -L &quot;$D/boot/${KERNEL_IMAGETYPE}&quot; ]; then<br>
&gt;     -                               kimage=`realpath $D/boot/${KERNEL_IMAGETYPE} 2&gt;/dev/null`<br>
&gt;     +               if grep -q &quot;/KERNEL_IMAGETYPE \+root=&quot; $grubcfg; then<br>
&gt;<br>
&gt;<br>
&gt; It&#39;s lines like these that made me ask my question above. This looks like its checking the<br>
&gt; grubcfg on disk. Is that same grep going to work in this anonymous python .. or maybe this<br>
&gt; isn&#39;t being run now, and only when the package is being installed ? I&#39;m most likely missing<br>
&gt; something.<br>
<br>
</span>No, it&#39;s not running, it&#39;s in the middle of the string.<br></blockquote><div><br></div><div><br></div><div>Hmm. Indeed, the way that nested strings are valid is a bit confusing, but that&#39;s</div><div>just my background not being in python chowing through!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;     +                       if [ -L &quot;$D/boot/KERNEL_IMAGETYPE&quot; ]; then<br>
&gt;     +                               kimage=`realpath $D/boot/KERNEL_IMAGETYPE 2&gt;/dev/null`<br>
&gt;                                     if [ -f &quot;$D$kimage&quot; ]; then<br>
&gt;     -                                       sed -i &quot;s:${KERNEL_IMAGETYPE} \+root=:${kimage##*/} root=:&quot; $grubcfg<br>
&gt;     +                                       sed -i &quot;s:KERNEL_IMAGETYPE \+root=:${kimage##*/} root=:&quot; $grubcfg<br>
&gt;                                     fi<br>
&gt;                             fi<br>
&gt;                     fi<br>
&gt;<br>
&gt;                     # Rename old kernel if it conflicts with new kernel name.<br>
&gt;     -               if grep -q &quot;/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} \+root=&quot; $grubcfg; then<br>
&gt;     -                       if [ -f &quot;$D/boot/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}&quot; ]; then<br>
&gt;     +               if grep -q &quot;/KERNEL_IMAGETYPE-${KERNEL_VERSION} \+root=&quot; $grubcfg; then<br>
&gt;     +                       if [ -f &quot;$D/boot/KERNEL_IMAGETYPE-${KERNEL_VERSION}&quot; ]; then<br>
&gt;                                     timestamp=`date +%s`<br>
&gt;     -                               kimage=&quot;$D/boot/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}-$timestamp-back&quot;<br>
&gt;     -                               sed -i &quot;s:${KERNEL_IMAGETYPE}-${KERNEL_VERSION} \+root=:${kimage##*/} root=:&quot; $grubcfg<br>
&gt;     -                               mv &quot;$D/boot/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}&quot; &quot;$kimage&quot;<br>
&gt;     +                               kimage=&quot;$D/boot/KERNEL_IMAGETYPE-${KERNEL_VERSION}-$timestamp-back&quot;<br>
&gt;     +                               sed -i &quot;s:KERNEL_IMAGETYPE-${KERNEL_VERSION} \+root=:${kimage##*/} root=:&quot; $grubcfg<br>
&gt;     +                               mv &quot;$D/boot/KERNEL_IMAGETYPE-${KERNEL_VERSION}&quot; &quot;$kimage&quot;<br>
&gt;                             fi<br>
&gt;                     fi<br>
&gt;             fi<br>
&gt;     -}<br>
&gt;     +&#39;&#39;&#39;<br>
&gt;<br>
&gt;     -pkg_postinst_kernel-image_prepend () {<br>
&gt;     +    postinst = &#39;&#39;&#39;<br>
&gt;             get_new_grub_cfg() {<br>
&gt;                     grubcfg=&quot;$1&quot;<br>
&gt;                     old_image=&quot;$2&quot;<br>
&gt;     -               title=&quot;Update ${KERNEL_IMAGETYPE}-${KERNEL_VERSION}-${PV}&quot;<br>
&gt;     +               title=&quot;Update KERNEL_IMAGETYPE-${KERNEL_VERSION}-${PV}&quot;<br>
&gt;                     if [ &quot;${grubcfg##*/}&quot; = &quot;grub.cfg&quot; ]; then<br>
&gt;                             rootfs=`grep &quot; *linux \+[^ ]\+ \+root=&quot; $grubcfg -m 1 | \<br>
&gt;     -                                sed &quot;s#${old_image}#${old_image%/*}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}#&quot;`<br>
&gt;     +                                sed &quot;s#${old_image}#${old_image%/*}/KERNEL_IMAGETYPE-${KERNEL_VERSION}#&quot;`<br>
&gt;<br>
&gt;                             echo &quot;menuentry \&quot;$title\&quot; {&quot;<br>
&gt;                             echo &quot;    set root=(hd0,1)&quot;<br>
&gt;     @@ -52,7 +55,7 @@ pkg_postinst_kernel-image_prepend () {<br>
&gt;                             echo &quot;}&quot;<br>
&gt;                     elif [ &quot;${grubcfg##*/}&quot; = &quot;menu.list&quot; ]; then<br>
&gt;                             rootfs=`grep &quot;kernel \+[^ ]\+ \+root=&quot; $grubcfg -m 1 | \<br>
&gt;     -                                sed &quot;s#${old_image}#${old_image%/*}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}#&quot;`<br>
&gt;     +                                sed &quot;s#${old_image}#${old_image%/*}/KERNEL_IMAGETYPE-${KERNEL_VERSION}#&quot;`<br>
&gt;<br>
&gt;                             echo &quot;default 0&quot;<br>
&gt;                             echo &quot;timeout 30&quot;<br>
&gt;     @@ -87,5 +90,16 @@ pkg_postinst_kernel-image_prepend () {<br>
&gt;                     mv $grubcfgtmp $grubcfg<br>
&gt;                     echo &quot;Caution! Update kernel may affect kernel-module!&quot;<br>
&gt;             fi<br>
&gt;     +&#39;&#39;&#39;<br>
&gt;     +<br>
&gt;     +    imagetypes = d.getVar(&#39;KERNEL_IMAGETYPES&#39;, True)<br>
&gt;     +    imagetypes = re.sub(r&#39;\.gz$&#39;, &#39;&#39;, imagetypes)<br>
&gt;     +<br>
&gt;     +    for type in imagetypes.split():<br>
&gt;     +        typelower = type.lower()<br>
&gt;     +        preinst_append = preinst.replace(&#39;KERNEL_IMAGETYPE&#39;, type)<br>
&gt;     +        postinst_prepend = postinst.replace(&#39;KERNEL_IMAGETYPE&#39;, type)<br>
&gt;     +        d.setVar(&#39;pkg_preinst_kernel-image-&#39; + typelower + &#39;_append&#39;, preinst_append)<br>
&gt;     +        d.setVar(&#39;pkg_postinst_kernel-image-&#39; + typelower + &#39;_prepend&#39;, postinst_prepend)<br>
&gt;      }<br>
&gt;<br>
&gt;     diff --git a/meta/classes/kernel-uimage.bbclass b/meta/classes/kernel-uimage.bbclass<br>
&gt;     index f73965b..a238ce4 100644<br>
&gt;     --- a/meta/classes/kernel-uimage.bbclass<br>
&gt;     +++ b/meta/classes/kernel-uimage.bbclass<br>
&gt;     @@ -1,23 +1,25 @@<br>
&gt;      inherit kernel-uboot<br>
&gt;<br>
&gt;      python __anonymous () {<br>
&gt;     -    kerneltype = d.getVar(&#39;KERNEL_IMAGETYPE&#39;, True)<br>
&gt;     -    if kerneltype == &#39;uImage&#39;:<br>
&gt;     +    if &quot;uImage&quot; in (d.getVar(&#39;KERNEL_IMAGETYPES&#39;, True) or &quot;&quot;).split():<br>
&gt;              depends = d.getVar(&quot;DEPENDS&quot;, True)<br>
&gt;              depends = &quot;%s u-boot-mkimage-native&quot; % depends<br>
&gt;              d.setVar(&quot;DEPENDS&quot;, depends)<br>
&gt;<br>
&gt;     -       # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal<br>
&gt;     -       # to kernel.bbclass . We override the variable here, since we need<br>
&gt;     -       # to build uImage using the kernel build system if and only if<br>
&gt;     -       # KEEPUIMAGE == yes. Otherwise, we pack compressed vmlinux into<br>
&gt;     -       # the uImage .<br>
&gt;     -       if d.getVar(&quot;KEEPUIMAGE&quot;, True) != &#39;yes&#39;:<br>
&gt;     -            d.setVar(&quot;KERNEL_IMAGETYPE_FOR_MAKE&quot;, &quot;zImage&quot;)<br>
&gt;     +        # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal<br>
&gt;     +        # to kernel.bbclass . We override the variable here, since we need<br>
&gt;     +        # to build uImage using the kernel build system if and only if<br>
&gt;     +        # KEEPUIMAGE == yes. Otherwise, we pack compressed vmlinux into<br>
&gt;     +        # the uImage .<br>
&gt;     +        if d.getVar(&quot;KEEPUIMAGE&quot;, True) != &#39;yes&#39;:<br>
&gt;     +            typeformake = d.getVar(&quot;KERNEL_IMAGETYPE_FOR_MAKE&quot;, True) or &quot;&quot;<br>
&gt;     +            if &quot;uImage&quot; in typeformake.split():<br>
&gt;     +                typeformake.replace(&#39;uImage&#39;, &#39;zImage&#39;)<br>
&gt;     +            d.setVar(&#39;KERNEL_IMAGETYPE_FOR_MAKE&#39;, typeformake)<br>
&gt;      }<br>
&gt;<br>
&gt;      do_uboot_mkimage() {<br>
&gt;     -       if test &quot;x${KERNEL_IMAGETYPE}&quot; = &quot;xuImage&quot; ; then<br>
&gt;     +       if echo &quot;${KERNEL_IMAGETYPES}&quot; | grep -Pq &quot;\buImage\b&quot;; then<br>
&gt;                     if test &quot;x${KEEPUIMAGE}&quot; != &quot;xyes&quot; ; then<br>
&gt;                             uboot_prep_kimage<br>
&gt;<br>
&gt;     diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass<br>
&gt;     index c3eab50..6db2e2e 100644<br>
&gt;     --- a/meta/classes/kernel.bbclass<br>
&gt;     +++ b/meta/classes/kernel.bbclass<br>
&gt;     @@ -16,12 +16,48 @@ INITRAMFS_IMAGE ?= &quot;&quot;<br>
&gt;      INITRAMFS_TASK ?= &quot;&quot;<br>
&gt;      INITRAMFS_IMAGE_BUNDLE ?= &quot;&quot;<br>
&gt;<br>
&gt;     +# KERNEL_VERSION is extracted from source code. It is evaluated as<br>
&gt;     +# None for the first parsing, since the code has not been fetched.<br>
&gt;     +# After the code is fetched, it will be evaluated as real version<br>
&gt;     +# number and cause kernel to be rebuilt. To avoid this, make<br>
&gt;     +# KERNEL_VERSION_NAME and KERNEL_VERSION_PKG_NAME depend on<br>
&gt;     +# LINUX_VERSION which is a constant.<br>
&gt;     +KERNEL_VERSION_NAME = &quot;${@d.getVar(&#39;KERNEL_VERSION&#39;, True) or &quot;&quot;}&quot;<br>
&gt;     +KERNEL_VERSION_NAME[vardepvalue] = &quot;${LINUX_VERSION}&quot;<br>
&gt;     +KERNEL_VERSION_PKG_NAME = &quot;${@legitimize_package_name(d.getVar(&#39;KERNEL_VERSION&#39;, True))}&quot;<br>
&gt;     +KERNEL_VERSION_PKG_NAME[vardepvalue] = &quot;${LINUX_VERSION}&quot;<br>
&gt;     +<br>
&gt;      python __anonymous () {<br>
&gt;          import re<br>
&gt;<br>
&gt;     -    kerneltype = d.getVar(&#39;KERNEL_IMAGETYPE&#39;, True)<br>
&gt;     +    type = d.getVar(&#39;KERNEL_IMAGETYPE&#39;, True) or &quot;&quot;<br>
&gt;<br>
&gt;<br>
&gt; Aha. Here is that use of KERNEL_IMAGETYPE. Like I mentioned for the alt image type, can&#39;t<br>
&gt; this existing variable be checked, and then added to KERNEL_IMAGE_TYPES in some<br>
&gt; python code ? That would simplify the code here, and also not require the two variables to<br>
&gt; be kept around.<br>
<br>
</div></div>See above for explanation for KERNEL_IMAGETYPES.<br></blockquote><div><br></div><div>True. But I still think that we could allow the old variable to be set, and have it joined</div><div>into a single variable by python code. That would mean you&#39;d only need to check</div><div>one variable, and users can continue to set the existing one. Something to think about.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;     +    types = d.getVar(&#39;KERNEL_IMAGETYPES&#39;, True) or &quot;&quot;<br>
&gt;     +    if type not in types.split():<br>
&gt;     +        types = (type + &#39; &#39; + types).strip()<br>
&gt;     +        d.setVar(&#39;KERNEL_IMAGETYPES&#39;, types)<br>
&gt;     +    typeformake = re.sub(r&#39;\.gz&#39;, &#39;&#39;, types)<br>
&gt;     +    d.setVar(&#39;KERNEL_IMAGETYPE_FOR_MAKE&#39;, typeformake)<br>
&gt;     +<br>
&gt;     +    for type in typeformake.split():<br>
&gt;     +        typelower = type.lower()<br>
&gt;     +<br>
&gt;     +        d.appendVar(&#39;PACKAGES&#39;, &#39; &#39; + &#39;kernel-image-&#39; + typelower)<br>
&gt;     +<br>
&gt;     +        d.setVar(&#39;FILES_kernel-image-&#39; + typelower, &#39;/boot/&#39; + type + &#39;*&#39;)<br>
&gt;     +<br>
&gt;     +        d.appendVar(&#39;RDEPENDS_kernel-image&#39;, &#39; &#39; + &#39;kernel-image-&#39; + typelower)<br>
&gt;     +<br>
&gt;     +        d.setVar(&#39;PKG_kernel-image-&#39; + typelower, &#39;kernel-image-&#39; + typelower + &#39;-${KERNEL_VERSION_PKG_NAME}&#39;)<br>
&gt;     +<br>
&gt;     +        d.setVar(&#39;ALLOW_EMPTY_kernel-image-&#39; + typelower, &#39;1&#39;)<br>
&gt;<br>
&gt;     -    d.setVar(&quot;KERNEL_IMAGETYPE_FOR_MAKE&quot;, re.sub(r&#39;\.gz$&#39;, &#39;&#39;, kerneltype))<br>
&gt;     +        imagedest = d.getVar(&#39;KERNEL_IMAGEDEST&#39;, True)<br>
&gt;     +        priority = d.getVar(&#39;KERNEL_PRIORITY&#39;, True)<br>
&gt;     +        postinst = &#39;#!/bin/sh\n&#39; + &#39;update-alternatives --install /&#39; + imagedest + &#39;/&#39; + type + &#39; &#39; + type + &#39; &#39; + &#39;/&#39; + imagedest + &#39;/&#39; + type + &#39;-${KERNEL_VERSION_NAME} &#39; + priority + &#39; || true&#39; + &#39;\n&#39;<br>
&gt;     +        d.setVar(&#39;pkg_postinst_kernel-image-&#39; + typelower, postinst)<br>
&gt;     +<br>
&gt;     +        postrm = &#39;#!/bin/sh\n&#39; + &#39;update-alternatives --remove&#39; + &#39; &#39; + type + &#39; &#39; + type + &#39;-${KERNEL_VERSION_NAME} || true&#39; + &#39;\n&#39;<br>
&gt;     +        d.setVar(&#39;pkg_postrm_kernel-image-&#39; + typelower, postrm)<br>
&gt;<br>
&gt;          image = d.getVar(&#39;INITRAMFS_IMAGE&#39;, True)<br>
&gt;          if image:<br>
&gt;     @@ -92,8 +128,8 @@ KERNEL_PRIORITY ?= &quot;${@int(d.getVar(&#39;PV&#39;,1).split(&#39;-&#39;)[0].split(&#39;+&#39;)[0].split(&#39;.<br>
&gt;<br>
&gt;      KERNEL_RELEASE ?= &quot;${KERNEL_VERSION}&quot;<br>
&gt;<br>
&gt;     -# Where built kernel lies in the kernel tree<br>
&gt;     -KERNEL_OUTPUT ?= &quot;arch/${ARCH}/boot/${KERNEL_IMAGETYPE}&quot;<br>
&gt;     +# The directory where built kernel lies in the kernel tree<br>
&gt;     +KERNEL_OUTPUT_DIR ?= &quot;arch/${ARCH}/boot&quot;<br>
&gt;      KERNEL_IMAGEDEST = &quot;boot&quot;<br>
&gt;<br>
&gt;      #<br>
&gt;     @@ -119,8 +155,6 @@ KERNEL_EXTRA_ARGS ?= &quot;&quot;<br>
&gt;      # We don&#39;t want to override kernel Makefile variables from the environment<br>
&gt;      EXTRA_OEMAKE = &quot;&quot;<br>
&gt;<br>
&gt;     -KERNEL_ALT_IMAGETYPE ??= &quot;&quot;<br>
&gt;     -<br>
&gt;      # Define where the kernel headers are installed on the target as well as where<br>
&gt;      # they are staged.<br>
&gt;      KERNEL_SRC_PATH = &quot;/usr/src/kernel&quot;<br>
&gt;     @@ -166,23 +200,48 @@ copy_initramfs() {<br>
&gt;             echo &quot;Finished copy of initramfs into ./usr&quot;<br>
&gt;      }<br>
&gt;<br>
&gt;     -INITRAMFS_BASE_NAME = &quot;${KERNEL_IMAGETYPE}-initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     +INITRAMFS_BASE_NAME = &quot;initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;<br>
&gt;      INITRAMFS_BASE_NAME[vardepsexclude] = &quot;DATETIME&quot;<br>
&gt;      do_bundle_initramfs () {<br>
&gt;             if [ ! -z &quot;${INITRAMFS_IMAGE}&quot; -a x&quot;${INITRAMFS_IMAGE_BUNDLE}&quot; = x1 ]; then<br>
&gt;                     echo &quot;Creating a kernel image with a bundled initramfs...&quot;<br>
&gt;                     copy_initramfs<br>
&gt;     -               if [ -e ${KERNEL_OUTPUT} ] ; then<br>
&gt;     -                       mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.bak<br>
&gt;     -               fi<br>
&gt;     +               # Backuping kernel image relies on its type(regular file or symbolic link)<br>
&gt;<br>
&gt;<br>
&gt; s/Backuping/Backing up/<br>
<br>
</div></div>I&#39;ll correct it.<br>
<div><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;     +               tmp_path=&quot;&quot;<br>
&gt;     +               for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +                       if [ -h ${KERNEL_OUTPUT_DIR}/$type ] ; then<br>
&gt;     +                               linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$type`<br>
&gt;     +                               realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$type`<br>
&gt;     +                               mv -f $realpath $realpath.bak<br>
&gt;     +                               tmp_path=$tmp_path&quot; &quot;$type&quot;#&quot;$linkpath&quot;#&quot;$realpath<br>
&gt;     +                       elif [ -f ${KERNEL_OUTPUT_DIR}/$type ]; then<br>
&gt;     +                               mv -f ${KERNEL_OUTPUT_DIR}/$type ${KERNEL_OUTPUT_DIR}/$type.bak<br>
&gt;     +                               tmp_path=$tmp_path&quot; &quot;$type&quot;##&quot;<br>
&gt;     +                       fi<br>
&gt;     +               done<br>
&gt;                     use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio<br>
&gt;                     kernel_do_compile<br>
&gt;     -               mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.initramfs<br>
&gt;     -               mv -f ${KERNEL_OUTPUT}.bak ${KERNEL_OUTPUT}<br>
&gt;     +               # Restoring kernel image<br>
&gt;     +               for tp in $tmp_path ; do<br>
&gt;     +                       type=`echo $tp|cut -d &quot;#&quot; -f 1`<br>
&gt;     +                       linkpath=`echo $tp|cut -d &quot;#&quot; -f 2`<br>
&gt;     +                       realpath=`echo $tp|cut -d &quot;#&quot; -f 3`<br>
&gt;     +                       if [ -n &quot;$realpath&quot; ]; then<br>
&gt;     +                               mv -f $realpath $realpath.initramfs<br>
&gt;     +                               mv -f $realpath.bak $realpath<br>
&gt;     +                               cd ${B}/${KERNEL_OUTPUT_DIR}<br>
&gt;     +                               ln -sf $linkpath.initramfs<br>
&gt;     +                       else<br>
&gt;     +                               mv -f ${KERNEL_OUTPUT_DIR}/$type ${KERNEL_OUTPUT_DIR}/$type.initramfs<br>
&gt;     +                               mv -f ${KERNEL_OUTPUT_DIR}/$type.bak ${KERNEL_OUTPUT_DIR}/$type<br>
&gt;     +                       fi<br>
&gt;     +               done<br>
&gt;                     # Update install area<br>
&gt;     -               echo &quot;There is kernel image bundled with initramfs: ${B}/${KERNEL_OUTPUT}.initramfs&quot;<br>
&gt;     -               install -m 0644 ${B}/${KERNEL_OUTPUT}.initramfs ${D}/boot/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin<br>
&gt;     -               echo &quot;${B}/${KERNEL_OUTPUT}.initramfs&quot;<br>
&gt;     +               for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +                       echo &quot;There is kernel image bundled with initramfs: ${B}/${KERNEL_OUTPUT_DIR}/$type.initramfs&quot;<br>
&gt;     +                       install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/$type.initramfs ${D}/boot/$type-initramfs-${MACHINE}.bin<br>
&gt;     +                       echo &quot;${B}/${KERNEL_OUTPUT_DIR}/$type.initramfs&quot;<br>
&gt;     +               done<br>
&gt;             fi<br>
&gt;      }<br>
&gt;<br>
&gt;     @@ -207,10 +266,15 @@ kernel_do_compile() {<br>
&gt;                     copy_initramfs<br>
&gt;                     use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio<br>
&gt;             fi<br>
&gt;     -       oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC=&quot;${KERNEL_CC}&quot; LD=&quot;${KERNEL_LD}&quot; ${KERNEL_EXTRA_ARGS} $use_alternate_initrd<br>
&gt;     -       if test &quot;${KERNEL_IMAGETYPE_FOR_MAKE}.gz&quot; = &quot;${KERNEL_IMAGETYPE}&quot;; then<br>
&gt;     -               gzip -9c &lt; &quot;${KERNEL_IMAGETYPE_FOR_MAKE}&quot; &gt; &quot;${KERNEL_OUTPUT}&quot;<br>
&gt;     -       fi<br>
&gt;     +       oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} CC=&quot;${KERNEL_CC}&quot; LD=&quot;${KERNEL_LD}&quot; ${KERNEL_EXTRA_ARGS} $use_alternate_initrd<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; This is probably something that is worth mentioning in the top of the commit message. You are<br>
&gt; building multiple kernel image types, but they are all currently using the same configuration.<br>
&gt;<br>
&gt; If the make invokations were split into separate calls per image type, we could conceivably<br>
&gt; extend this to generate and use a separate config int he future.<br>
&gt;<br>
<br>
</div></div>OK. Let me test if there is any side effect after putting this make in a type loop.<br>
<div><div class="h5"><br>
&gt;     +       for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do<br>
&gt;     +               for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +                       if test &quot;${typeformake}.gz&quot; = &quot;${type}&quot;; then<br>
&gt;     +                               gzip -9c &lt; &quot;${typeformake}&quot; &gt; &quot;${KERNEL_OUTPUT_DIR}/${type}&quot;<br>
&gt;     +                               break;<br>
&gt;     +                       fi<br>
&gt;     +               done<br>
&gt;     +       done<br>
&gt;      }<br>
&gt;<br>
&gt;      do_compile_kernelmodules() {<br>
&gt;     @@ -251,7 +315,9 @@ kernel_do_install() {<br>
&gt;             #<br>
&gt;             install -d ${D}/${KERNEL_IMAGEDEST}<br>
&gt;             install -d ${D}/boot<br>
&gt;     -       install -m 0644 ${KERNEL_OUTPUT} ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}<br>
&gt;     +       for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +               install -m 0644 ${KERNEL_OUTPUT_DIR}/${type} ${D}/${KERNEL_IMAGEDEST}/${type}-${KERNEL_VERSION}<br>
&gt;     +       done<br>
&gt;             install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}<br>
&gt;             install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}<br>
&gt;             install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}<br>
&gt;     @@ -365,12 +431,12 @@ EXPORT_FUNCTIONS do_compile do_install do_configure<br>
&gt;      PACKAGES = &quot;kernel kernel-base kernel-vmlinux kernel-image kernel-dev kernel-modules&quot;<br>
&gt;      FILES_${PN} = &quot;&quot;<br>
&gt;      FILES_kernel-base = &quot;/lib/modules/${KERNEL_VERSION}/modules.order /lib/modules/${KERNEL_VERSION}/modules.builtin&quot;<br>
&gt;     -FILES_kernel-image = &quot;/boot/${KERNEL_IMAGETYPE}*&quot;<br>
&gt;     +FILES_kernel-image = &quot;&quot;<br>
&gt;      FILES_kernel-dev = &quot;/boot/System.map* /boot/Module.symvers* /boot/config* ${KERNEL_SRC_PATH} /lib/modules/${KERNEL_VERSION}/build&quot;<br>
&gt;      FILES_kernel-vmlinux = &quot;/boot/vmlinux*&quot;<br>
&gt;      FILES_kernel-modules = &quot;&quot;<br>
&gt;      RDEPENDS_kernel = &quot;kernel-base&quot;<br>
&gt;     -# Allow machines to override this dependency if kernel image files are<br>
&gt;     +# Allow machines to override this dependency if kernel image files are<br>
&gt;      # not wanted in images as standard<br>
&gt;      RDEPENDS_kernel-base ?= &quot;kernel-image&quot;<br>
&gt;      PKG_kernel-image = &quot;kernel-image-${@legitimize_package_name(&#39;${KERNEL_VERSION}&#39;)}&quot;<br>
&gt;     @@ -394,14 +460,6 @@ pkg_postinst_kernel-base () {<br>
&gt;             fi<br>
&gt;      }<br>
&gt;<br>
&gt;     -pkg_postinst_kernel-image () {<br>
&gt;     -       update-alternatives --install /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE} /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true<br>
&gt;     -}<br>
&gt;     -<br>
&gt;     -pkg_postrm_kernel-image () {<br>
&gt;     -       update-alternatives --remove ${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE}-${KERNEL_VERSION} || true<br>
&gt;     -}<br>
&gt;     -<br>
&gt;      PACKAGESPLITFUNCS_prepend = &quot;split_kernel_packages &quot;<br>
&gt;<br>
&gt;      python split_kernel_packages () {<br>
&gt;     @@ -422,13 +480,13 @@ do_kernel_link_vmlinux() {<br>
&gt;<br>
&gt;      do_strip() {<br>
&gt;             if [ -n &quot;${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}&quot; ]; then<br>
&gt;     -               if [ &quot;${KERNEL_IMAGETYPE}&quot; != &quot;vmlinux&quot; ]; then<br>
&gt;     -                       bbwarn &quot;image type will not be stripped (not supported): ${KERNEL_IMAGETYPE}&quot;<br>
&gt;     +               if ! (echo &quot;${KERNEL_IMAGETYPES}&quot; | grep -q &quot;vmlinux&quot;); then<br>
&gt;<br>
&gt;<br>
&gt; You had used the \bfitImage\b, but here you don&#39;t .. grep -w could work for them all.<br>
<br>
</div></div>I&#39;ll correct it.<br>
<span class=""><br>
&gt;<br>
&gt;<br>
&gt;     +                       bbwarn &quot;image type(s) will not be stripped (not supported): ${KERNEL_IMAGETYPES}&quot;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; But on another note. Is it really right to say that none of the images will be stripped if you<br>
&gt; find vmlinux anywhere in the image type list ?<br>
&gt;<br>
<br>
</span>Not clear what you mean here.<br></blockquote><div><br></div><div><br></div><div>Consider that there are a list of image types in KERNEL_IMAGETYPES, and most of them</div><div>could be stripped, but that list contains vmlinux. The test above will avoid stripping any</div><div>of them, where the intent was really to not strip vmlinux, and only vmlinux.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5"><br>
&gt;                             return<br>
&gt;                     fi<br>
&gt;<br>
&gt;                     cd ${B}<br>
&gt;     -               headers=`&quot;$CROSS_COMPILE&quot;readelf -S ${KERNEL_OUTPUT} | \<br>
&gt;     +               headers=`&quot;$CROSS_COMPILE&quot;readelf -S ${KERNEL_OUTPUT_DIR}/vmlinux | \<br>
&gt;                               grep &quot;^ \{1,\}\[[0-9 ]\{1,\}\] [^ ]&quot; | \<br>
&gt;                               sed &quot;s/^ \{1,\}\[[0-9 ]\{1,\}\] //&quot; | \<br>
&gt;                               gawk &#39;{print $1}&#39;`<br>
&gt;     @@ -438,7 +496,7 @@ do_strip() {<br>
&gt;                                     bbwarn &quot;Section not found: $str&quot;;<br>
&gt;                             fi<br>
&gt;<br>
&gt;     -                       &quot;$CROSS_COMPILE&quot;strip -s -R $str ${KERNEL_OUTPUT}<br>
&gt;     +                       &quot;$CROSS_COMPILE&quot;strip -s -R $str ${KERNEL_OUTPUT_DIR}/vmlinux<br>
&gt;                     }; done<br>
&gt;<br>
&gt;                     bbnote &quot;KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping sections:&quot; \<br>
&gt;     @@ -457,20 +515,22 @@ do_sizecheck() {<br>
&gt;                     if [ -n &quot;$invalid&quot; ]; then<br>
&gt;                             die &quot;Invalid KERNEL_IMAGE_MAXSIZE: ${KERNEL_IMAGE_MAXSIZE}, should be an integerx (The unit is Kbytes)&quot;<br>
&gt;                     fi<br>
&gt;     -               size=`du -ks ${B}/${KERNEL_OUTPUT} | awk &#39;{ print $1}&#39;`<br>
&gt;     -               if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then<br>
&gt;     -                       die &quot;This kernel (size=$size(K) &gt; ${KERNEL_IMAGE_MAXSIZE}(K)) is too big for your device. Please reduce the size of the kernel by making more of it modular.&quot;<br>
&gt;     -               fi<br>
&gt;     +               for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +                       size=`du -ks ${B}/${KERNEL_OUTPUT_DIR}/$type | awk &#39;{print $1}&#39;`<br>
&gt;     +                       if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then<br>
&gt;     +                               die &quot;This kernel $type (size=$size(K) &gt; ${KERNEL_IMAGE_MAXSIZE}(K)) is too big for your device. Please reduce the size of the kernel by making more of it modular.&quot;<br>
&gt;<br>
&gt;<br>
&gt; Hmm. Again here. Multiple image types are being built. If one of them is too large for the device,<br>
&gt; who&#39;s to say that that&#39;s the one that is going to be used ? Maybe this should be a warn, instead<br>
&gt; of a die ?<br>
&gt;<br>
<br>
</div></div>Fair point. A warn is OK.<br>
<div><div class="h5"><br>
&gt;     +                       fi<br>
&gt;     +               done<br>
&gt;             fi<br>
&gt;      }<br>
&gt;      do_sizecheck[dirs] = &quot;${B}&quot;<br>
&gt;<br>
&gt;      addtask sizecheck before do_install after do_strip<br>
&gt;<br>
&gt;     -KERNEL_IMAGE_BASE_NAME ?= &quot;${KERNEL_IMAGETYPE}-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;     +KERNEL_IMAGE_BASE_NAME ?= &quot;${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;      # Don&#39;t include the DATETIME variable in the sstate package signatures<br>
&gt;      KERNEL_IMAGE_BASE_NAME[vardepsexclude] = &quot;DATETIME&quot;<br>
&gt;     -KERNEL_IMAGE_SYMLINK_NAME ?= &quot;${KERNEL_IMAGETYPE}-${MACHINE}&quot;<br>
&gt;     +KERNEL_IMAGE_SYMLINK_NAME ?= &quot;${MACHINE}&quot;<br>
&gt;      MODULE_IMAGE_BASE_NAME ?= &quot;modules-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}&quot;<br>
&gt;      MODULE_IMAGE_BASE_NAME[vardepsexclude] = &quot;DATETIME&quot;<br>
&gt;      MODULE_TARBALL_BASE_NAME ?= &quot;${MODULE_IMAGE_BASE_NAME}.tgz&quot;<br>
&gt;     @@ -479,28 +539,37 @@ MODULE_TARBALL_SYMLINK_NAME ?= &quot;modules-${MACHINE}.tgz&quot;<br>
&gt;      MODULE_TARBALL_DEPLOY ?= &quot;1&quot;<br>
&gt;<br>
&gt;      kernel_do_deploy() {<br>
&gt;     -       install -m 0644 ${KERNEL_OUTPUT} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin<br>
&gt;     +       for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +               base_name=${type}-${KERNEL_IMAGE_BASE_NAME}<br>
&gt;     +               install -m 0644 ${KERNEL_OUTPUT_DIR}/${type} ${DEPLOYDIR}/${base_name}.bin<br>
&gt;     +       done<br>
&gt;             if [ ${MODULE_TARBALL_DEPLOY} = &quot;1&quot; ] &amp;&amp; (grep -q -i -e &#39;^CONFIG_MODULES=y$&#39; .config); then<br>
&gt;                     mkdir -p ${D}/lib<br>
&gt;                     tar -cvzf ${DEPLOYDIR}/${MODULE_TARBALL_BASE_NAME} -C ${D} lib<br>
&gt;                     ln -sf ${MODULE_TARBALL_BASE_NAME} ${DEPLOYDIR}/${MODULE_TARBALL_SYMLINK_NAME}<br>
&gt;             fi<br>
&gt;<br>
&gt;     -       ln -sf ${KERNEL_IMAGE_BASE_NAME}.bin ${DEPLOYDIR}/${KERNEL_IMAGE_SYMLINK_NAME}.bin<br>
&gt;     -       ln -sf ${KERNEL_IMAGE_BASE_NAME}.bin ${DEPLOYDIR}/${KERNEL_IMAGETYPE}<br>
&gt;     +       for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +               base_name=${type}-${KERNEL_IMAGE_BASE_NAME}<br>
&gt;     +               symlink_name=${type}-${KERNEL_IMAGE_SYMLINK_NAME}<br>
&gt;     +               ln -sf ${base_name}.bin ${DEPLOYDIR}/${symlink_name}.bin<br>
&gt;     +               ln -sf ${base_name}.bin ${DEPLOYDIR}/${type}<br>
&gt;     +       done<br>
&gt;<br>
&gt;             cp ${COREBASE}/meta/files/deploydir_readme.txt ${DEPLOYDIR}/README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt<br>
&gt;<br>
&gt;             cd ${B}<br>
&gt;             # Update deploy directory<br>
&gt;     -       if [ -e &quot;${KERNEL_OUTPUT}.initramfs&quot; ]; then<br>
&gt;     -               echo &quot;Copying deploy kernel-initramfs image and setting up links...&quot;<br>
&gt;     -               initramfs_base_name=${INITRAMFS_BASE_NAME}<br>
&gt;     -               initramfs_symlink_name=${KERNEL_IMAGETYPE}-initramfs-${MACHINE}<br>
&gt;     -               install -m 0644 ${KERNEL_OUTPUT}.initramfs ${DEPLOYDIR}/${initramfs_base_name}.bin<br>
&gt;     -               cd ${DEPLOYDIR}<br>
&gt;     -               ln -sf ${initramfs_base_name}.bin ${initramfs_symlink_name}.bin<br>
&gt;     -       fi<br>
&gt;     +       for type in ${KERNEL_IMAGETYPES} ; do<br>
&gt;     +               if [ -e &quot;${KERNEL_OUTPUT_DIR}/${type}.initramfs&quot; ]; then<br>
&gt;     +                       echo &quot;Copying deploy ${type} kernel-initramfs image and setting up links...&quot;<br>
&gt;     +                       initramfs_base_name=${type}-${INITRAMFS_BASE_NAME}<br>
&gt;     +                       initramfs_symlink_name=${type}-initramfs-${MACHINE}<br>
&gt;     +                       install -m 0644 ${KERNEL_OUTPUT_DIR}/${type}.initramfs ${DEPLOYDIR}/${initramfs_base_name}.bin<br>
&gt;     +                       cd ${DEPLOYDIR}<br>
&gt;     +                       ln -sf ${initramfs_base_name}.bin ${initramfs_symlink_name}.bin<br>
&gt;     +               fi<br>
&gt;     +       done<br>
&gt;      }<br>
&gt;      do_deploy[cleandirs] = &quot;${DEPLOYDIR}&quot;<br>
&gt;      do_deploy[dirs] = &quot;${DEPLOYDIR} ${B}&quot;<br>
&gt;     diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf<br>
&gt;     index 00a69da..b3969b0 100644<br>
&gt;     --- a/meta/conf/documentation.conf<br>
&gt;     +++ b/meta/conf/documentation.conf<br>
&gt;     @@ -246,6 +246,7 @@ KERNEL_CLASSES[doc] = &quot;A list of classes defining kernel image types that kernel<br>
&gt;      KERNEL_EXTRA_ARGS[doc] = &quot;Specifies additional make command-line arguments the OpenEmbedded build system passes on when compiling the kernel.&quot;<br>
&gt;      KERNEL_FEATURES[doc] = &quot;Includes additional metadata from the Yocto Project kernel Git repository. The metadata you add through this variable includes config fragments and features descriptions.&quot;<br>
&gt;      KERNEL_IMAGETYPE[doc] = &quot;The type of kernel to build for a device, usually set by the machine configuration files and defaults to &#39;zImage&#39;.&quot;<br>
&gt;     +KERNEL_IMAGETYPES[doc] = &quot;The list of types of kernel to build for a device, usually set by the machine configuration files and defaults to KERNEL_IMAGETYPE.&quot;<br>
&gt;      KERNEL_MODULE_AUTOLOAD[doc] = &quot;Lists kernel modules that need to be auto-loaded during boot&quot;<br>
&gt;      KERNEL_MODULE_PROBECONF[doc] = &quot;Lists kernel modules for which the build system expects to find module_conf_* values that specify configuration for each of the modules&quot;<br>
&gt;      KERNEL_PATH[doc] = &quot;The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass).&quot;<br>
&gt;     diff --git a/meta/conf/machine/qemumips.conf b/meta/conf/machine/qemumips.conf<br>
&gt;     index fbf8137..67ce161 100644<br>
&gt;     --- a/meta/conf/machine/qemumips.conf<br>
&gt;     +++ b/meta/conf/machine/qemumips.conf<br>
&gt;     @@ -6,7 +6,7 @@ require conf/machine/include/qemu.inc<br>
&gt;      require conf/machine/include/tune-mips32r2.inc<br>
&gt;<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;<br>
&gt;      SERIAL_CONSOLES = &quot;115200;ttyS0 115200;ttyS1&quot;<br>
&gt;<br>
&gt;     diff --git a/meta/conf/machine/qemumips64.conf b/meta/conf/machine/qemumips64.conf<br>
&gt;     index 8c3f1fe..393212e 100644<br>
&gt;     --- a/meta/conf/machine/qemumips64.conf<br>
&gt;     +++ b/meta/conf/machine/qemumips64.conf<br>
&gt;     @@ -6,7 +6,7 @@ require conf/machine/include/qemu.inc<br>
&gt;      require conf/machine/include/tune-mips64.inc<br>
&gt;<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;<br>
&gt;      SERIAL_CONSOLES = &quot;115200;ttyS0 115200;ttyS1&quot;<br>
&gt;<br>
&gt;     diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc<br>
&gt;     index 651a19e..74f5ef8 100644<br>
&gt;     --- a/meta/recipes-kernel/linux/linux-dtb.inc<br>
&gt;     +++ b/meta/recipes-kernel/linux/linux-dtb.inc<br>
&gt;     @@ -34,9 +34,12 @@ do_install_append() {<br>
&gt;             for DTB in ${KERNEL_DEVICETREE}; do<br>
&gt;                     DTB=`normalize_dtb &quot;${DTB}&quot;`<br>
&gt;                     DTB_BASE_NAME=`basename ${DTB} .dtb`<br>
&gt;     -               DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     -               DTB_PATH=`get_real_dtb_path_in_kernel &quot;${DTB}&quot;`<br>
&gt;     -               install -m 0644 ${DTB_PATH} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb<br>
&gt;     +               for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do<br>
&gt;     +                       symlink_name=${type}&quot;-&quot;${KERNEL_IMAGE_SYMLINK_NAME}<br>
&gt;<br>
&gt;<br>
&gt; If there are multiple image types being built, is this valid for them all ?<br>
<br>
</div></div>Add these links for convenience. If we give different configurations to<br>
different types of images in the future, as you pointed above, we might<br>
also need different dtb.<br></blockquote><div><br></div><div>Sounds good.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;     +                       DTB_SYMLINK_NAME=`echo ${symlink_name} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     +                       DTB_PATH=`get_real_dtb_path_in_kernel &quot;${DTB}&quot;`<br>
&gt;     +                       install -m 0644 ${DTB_PATH} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb<br>
&gt;     +               done<br>
&gt;             done<br>
&gt;      }<br>
&gt;<br>
&gt;     @@ -44,31 +47,39 @@ do_deploy_append() {<br>
&gt;             for DTB in ${KERNEL_DEVICETREE}; do<br>
&gt;                     DTB=`normalize_dtb &quot;${DTB}&quot;`<br>
&gt;                     DTB_BASE_NAME=`basename ${DTB} .dtb`<br>
&gt;     -               DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     -               DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     -               DTB_PATH=`get_real_dtb_path_in_kernel &quot;${DTB}&quot;`<br>
&gt;     -               install -d ${DEPLOYDIR}<br>
&gt;     -               install -m 0644 ${DTB_PATH} ${DEPLOYDIR}/${DTB_NAME}.dtb<br>
&gt;     -               ln -sf ${DTB_NAME}.dtb ${DEPLOYDIR}/${DTB_SYMLINK_NAME}.dtb<br>
&gt;     +               for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do<br>
&gt;     +                       base_name=${type}&quot;-&quot;${KERNEL_IMAGE_BASE_NAME}<br>
&gt;     +                       symlink_name=${type}&quot;-&quot;${KERNEL_IMAGE_SYMLINK_NAME}<br>
&gt;     +                       DTB_NAME=`echo ${base_name} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     +                       DTB_SYMLINK_NAME=`echo ${symlink_name} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     +                       DTB_PATH=`get_real_dtb_path_in_kernel &quot;${DTB}&quot;`<br>
&gt;     +                       install -d ${DEPLOYDIR}<br>
&gt;     +                       install -m 0644 ${DTB_PATH} ${DEPLOYDIR}/${DTB_NAME}.dtb<br>
&gt;     +                       ln -sf ${DTB_NAME}.dtb ${DEPLOYDIR}/${DTB_SYMLINK_NAME}.dtb<br>
&gt;     +               done<br>
&gt;             done<br>
&gt;      }<br>
&gt;<br>
&gt;      pkg_postinst_kernel-devicetree () {<br>
&gt;             cd /${KERNEL_IMAGEDEST}<br>
&gt;     -       for DTB in ${KERNEL_DEVICETREE}<br>
&gt;     -       do<br>
&gt;     -               DTB_BASE_NAME=`basename ${DTB} | awk -F &quot;.&quot; &#39;{print $1}&#39;`<br>
&gt;     -               DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     -               update-alternatives --install /${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.dtb ${DTB_BASE_NAME}.dtb /boot/devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true<br>
&gt;     +       for DTB in ${KERNEL_DEVICETREE}; do<br>
&gt;     +               for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do<br>
&gt;     +                       symlink_name=${type}&quot;-&quot;${KERNEL_IMAGE_SYMLINK_NAME}<br>
&gt;     +                       DTB_BASE_NAME=`basename ${DTB} | awk -F &quot;.&quot; &#39;{print $1}&#39;`<br>
&gt;     +                       DTB_SYMLINK_NAME=`echo ${symlink_name} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     +                       update-alternatives --install /${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.dtb ${DTB_BASE_NAME}.dtb /boot/devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true<br>
&gt;     +               done<br>
&gt;             done<br>
&gt;      }<br>
&gt;<br>
&gt;      pkg_postrm_kernel-devicetree () {<br>
&gt;             cd /${KERNEL_IMAGEDEST}<br>
&gt;     -       for DTB in ${KERNEL_DEVICETREE}<br>
&gt;     -       do<br>
&gt;     -               DTB_BASE_NAME=`basename ${DTB} | awk -F &quot;.&quot; &#39;{print $1}&#39;`<br>
&gt;     -               DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     -               update-alternatives --remove ${DTB_BASE_NAME}.dtb /boot/devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true<br>
&gt;     +       for DTB in ${KERNEL_DEVICETREE}; do<br>
&gt;     +               for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do<br>
&gt;     +                       symlink_name=${type}&quot;-&quot;${KERNEL_IMAGE_SYMLINK_NAME}<br>
&gt;     +                       DTB_BASE_NAME=`basename ${DTB} | awk -F &quot;.&quot; &#39;{print $1}&#39;`<br>
&gt;     +                       DTB_SYMLINK_NAME=`echo ${symlink_name} | sed &quot;s/${MACHINE}/${DTB_BASE_NAME}/g&quot;`<br>
&gt;     +                       update-alternatives --remove ${DTB_BASE_NAME}.dtb /boot/devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true<br>
&gt;     +               done<br>
&gt;             done<br>
&gt;      }<br>
&gt;     diff --git a/scripts/lib/bsp/substrate/target/arch/mips/conf/machine/machine.conf b/scripts/lib/bsp/substrate/target/arch/mips/conf/machine/machine.conf<br>
&gt;     index b319d62..e4a6f30 100644<br>
&gt;     --- a/scripts/lib/bsp/substrate/target/arch/mips/conf/machine/machine.conf<br>
&gt;     +++ b/scripts/lib/bsp/substrate/target/arch/mips/conf/machine/machine.conf<br>
&gt;     @@ -9,7 +9,7 @@ require conf/machine/include/tune-mips32.inc<br>
&gt;      MACHINE_FEATURES = &quot;screen keyboard pci usbhost ext2 ext3 serial&quot;<br>
&gt;<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;      KERNEL_IMAGE_STRIP_EXTRA_SECTIONS  = &quot;.comment&quot;<br>
&gt;<br>
&gt;      {{ if kernel_choice == &quot;custom&quot;: preferred_kernel = &quot;linux-yocto-custom&quot; }}<br>
&gt;     diff --git a/scripts/lib/bsp/substrate/target/arch/mips64/conf/machine/machine.conf b/scripts/lib/bsp/substrate/target/arch/mips64/conf/machine/machine.conf<br>
&gt;     index 3afc5e0..2c2d8af 100644<br>
&gt;     --- a/scripts/lib/bsp/substrate/target/arch/mips64/conf/machine/machine.conf<br>
&gt;     +++ b/scripts/lib/bsp/substrate/target/arch/mips64/conf/machine/machine.conf<br>
&gt;     @@ -9,7 +9,7 @@ require conf/machine/include/tune-mips64.inc<br>
&gt;      MACHINE_FEATURES = &quot;pci ext2 ext3 serial&quot;<br>
&gt;<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Again, why can&#39;t vmlinux just bein in KERNEL_IMAGETYPES ?<br>
&gt;<br>
<br>
</div></div>Discussed above.<br></blockquote><div><br></div><div>Thanks for the quick follow up!</div><div><br></div><div>Cheers,</div><div><br></div><div>Bruce</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks,<br>
Zhe<br>
<span class=""><br>
&gt; Bruce<br>
&gt;<br>
&gt;<br>
&gt;      KERNEL_IMAGE_STRIP_EXTRA_SECTIONS  = &quot;.comment&quot;<br>
&gt;<br>
&gt;      {{ if kernel_choice == &quot;custom&quot;: preferred_kernel = &quot;linux-yocto-custom&quot; }}<br>
&gt;     diff --git a/scripts/lib/bsp/substrate/target/arch/qemu/conf/machine/machine.conf b/scripts/lib/bsp/substrate/target/arch/qemu/conf/machine/machine.conf<br>
&gt;     index 67e1cbd..7a0a4d3 100644<br>
&gt;     --- a/scripts/lib/bsp/substrate/target/arch/qemu/conf/machine/machine.conf<br>
&gt;     +++ b/scripts/lib/bsp/substrate/target/arch/qemu/conf/machine/machine.conf<br>
&gt;     @@ -69,6 +69,6 @@ SERIAL_CONSOLE = &quot;115200 ttyS0&quot;<br>
&gt;<br>
&gt;      {{ if qemuarch == &quot;mips&quot; or qemuarch == &quot;mips64&quot;: }}<br>
&gt;      KERNEL_IMAGETYPE = &quot;vmlinux&quot;<br>
&gt;     -KERNEL_ALT_IMAGETYPE = &quot;vmlinux.bin&quot;<br>
&gt;     +KERNEL_IMAGETYPES = &quot;vmlinux.bin&quot;<br>
&gt;      SERIAL_CONSOLE = &quot;115200 ttyS0&quot;<br>
&gt;      MACHINE_EXTRA_RRECOMMENDS = &quot; kernel-modules&quot;<br>
&gt;     --<br>
&gt;     1.9.1<br>
&gt;<br>
&gt;     --<br>
&gt;     _______________________________________________<br>
&gt;     Openembedded-core mailing list<br>
</span>&gt;     <a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a> &lt;mailto:<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a>&gt;<br>
<div class="HOEnZb"><div class="h5">&gt;     <a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; &quot;Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end&quot;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">&quot;Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end&quot;</div>
</div></div>