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