[OE-core] [PATCH v3] kernel.bbclass: do not deploy fitImage; kernel-fitimage.bbclass does that.

Leon Woestenberg leon at sidebranch.com
Tue Sep 18 09:40:21 UTC 2018


Hi Alex,

Adding Marek Vasut, original author of kernel-fitimage.bbclass.

> I guess the reason that the deployment happens in kernel.bbclass is so
> you only have all the symlinking logic in one place

The deployment happens in both kernel.bbclass and kernel-fitimage.bbclass.
That was exactly one of the bugs I wanted to solve. I am not sure what the
intention was, though.

Marek: can you comment of the exact purpose of the deploy task in
kernel-fitimage.bbclass?
Which class should deploy the FIT images themselves?

Whilst cleaning things up, my understanding was that
kernel_do_deploy_append() in kernel-fitimage.bbclass deploys the fitImages,
along with the .its file etc.
Maybe I was mistaken.

I have several other fixed piled up; for example initramfs's supposed to
get bundled inside the kernel get also packed into the FIT; this takes
double the amount of space in the FIT image...

Regards,

Leon.




On Tue, Sep 18, 2018 at 8:10 AM Alex Kiernan <alex.kiernan at gmail.com> wrote:

> Thanks Leon
>
> I guess the reason that the deployment happens in kernel.bbclass is so
> you only have all the symlinking logic in one place.
>
> Are in agreement that this change should be reverted and the
> "fitImage" deployed here:
>
>
> http://git.openembedded.org/openembedded-core/tree/meta/classes/kernel-fitimage.bbclass#n495
>
> is the one which we should remove?
> On Mon, Sep 17, 2018 at 7:05 PM Leon Woestenberg <leon at sidebranch.com>
> wrote:
> >
> > Hi Alex,
> >
> > I expected it to be kernel-fitimage.bbclass’s responsibility to deploy
> the fitImage.
> >
> > Regards, Leon
> >
> >
> >
> >
> > On 16 Sep 2018, at 16:22, Alex Kiernan <alex.kiernan at gmail.com> wrote:
> >
> > On Sun, Sep 16, 2018 at 11:41 AM Alex Kiernan <alex.kiernan at gmail.com>
> wrote:
> >
> >
> > Hi Leon
> >
> >
> > On Sun, Sep 16, 2018 at 10:18 AM Leon Woestenberg <leon at sidebranch.com>
> wrote:
> >
> >
> > Hi Alex,
> >
> >
> > On 15 Sep 2018, at 19:45, Alex Kiernan <alex.kiernan at gmail.com> wrote:
> >
> >
> > On Mon, Sep 10, 2018 at 10:57 PM Leon Woestenberg <leon at sidebranch.com>
> wrote:
> >
> >
> > kernel-fitimage.bbclass replaces an occurance of "fitImage" in
> >
> > KERNEL_IMAGETYPE_FOR_MAKE by an image type that is buildable for the
> >
> > architecture (such as zImage). The kernel-fitimage.bbclass packs that
> >
> > image as sub-image in a flattened image tree image (fitImage) and
> >
> > deploys this fitImage along with the image tree source file (.its).
> >
> >
> > kernel-fitimage.bbclass does not alter KERNEL_IMAGETYPES, which thus
> >
> > also contains "fitImage", which kernel.bbclass will also deploy
> >
> > redundantly with different naming.
> >
> >
> > The result is a dual deployment with slightly different naming,
> >
> > each with a set of symlinks.
> >
> >
> > The solution chosen is to have fitImage deployment be handled by
> >
> > kernel-fitimage.bbclass, and have kernel.bbclass ignore fitImage
> >
> > types during deployment.
> >
> >
> > Signed-off-by: Leon Woestenberg <leon at sidebranch.com>
> >
> >
> > This looks completely plausible, but the two "FIT" images that are
> >
> > installed aren't identical... after this I end up with no FIT image
> >
> > and only a bare image in the deploy dir.
> >
> >
> > What was in your KERNEL_IMAGETYPES? Did it at least contain “fitImage”??
> >
> >
> >
> > Yes, in fact only fitImage (and no initramfs).
> >
> >
> > Digging into it, the logic between the two classes is a bit odd... in
> >
> > the case of a non initramfs build, the fitImage is actually installed
> >
> > here.
> >
> >
> > If ‘here’ means kernel-fitimage, then I’ld say ALL versions of a FIT
> image containing AT LEAST a Linux kernel are installed by kernel-fitimage.
> >
> >
> > The one that's installed in kernel-fitimage is the bare
> >
> > linux.bin, but named fitImage-...
> >
> >
> > which is totally broken. If you want the bare kernel binary (which
> naming depends on architecture, so it should NOT be hard-coded to linux.bin
> anyway), you would need to specify that type *also* in KERNEL_IMAGETYPES,
> next to “fitImage”.
> >
> >
> > Totally agree...
> >
> >
> >
> > I'll send a patch reverting this and removing the other one as I'd
> >
> > agree that it appears to have no purpose (and if you did want it, I
> >
> > guess you could list it in KERNEL_IMAGETYPES).
> >
> >
> > I’m sorry I cannot follow what this and the other one is, and it. Let’s
> first understand all cases correctly.
> >
> >
> >
> > Sorry I've not described it well... the code in
> >
> > kernel-fitimage.bbclass that inserts the kernel into the its happens
> >
> > here
> http://git.openembedded.org/openembedded-core/tree/meta/classes/kernel-fitimage.bbclass#n371
> >
> >
> > fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin
> "${linux_comp}"
> >
> >
> > inside fitimage_emit_section_kernel we create a kernel section which
> >
> > has `data = /incbin/("${3}");` so linux.bin is our bare image.
> >
> >
> > Then we have the installation of fitImage-linux-bin that happens here
> >
> >
> http://git.openembedded.org/openembedded-core/tree/meta/classes/kernel-fitimage.bbclass#n495
> >
> >
> > echo "Copying linux.bin file..."
> >
> > install -m 0644 ${B}/linux.bin
> >
> > ${DEPLOYDIR}/fitImage-linux.bin-${KERNEL_FIT_NAME}.bin
> >
> > ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}.bin
> >
> > ${DEPLOYDIR}/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}
> >
> >
> > i.e. the bare linux.bin file which we used to pack into the FIT image,
> >
> > not a fitImage.
> >
> >
> > The output FIT image from kernel-fitimage.bbclass is created here
> >
> >
> http://git.openembedded.org/openembedded-core/tree/meta/classes/kernel-fitimage.bbclass#n450
> >
> >
> > uboot-mkimage \
> >
> > ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}')
> else ''} \
> >
> >  -f ${1} \
> >
> >  arch/${ARCH}/boot/${2}
> >
> >
> > i.e. in arch/${ARCH}/boot/${2}
> >
> >
> > It's that image which is then picked up by kernel.bbclass to install
> >
> > into deploydir (because KERNEL_OUTPUT_DIR ?= "arch/${ARCH}/boot"):
> >
> >
> > for imageType in ${KERNEL_IMAGETYPES} ; do
> >
> >  # kernel-fitimage class deploys fitImages, skip here
> >
> >  if [ "$imageType" != "fitImage" ]; then
> >
> >    base_name=${imageType}-${KERNEL_IMAGE_NAME}
> >
> >    install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType}
> >
> > $deployDir/${base_name}.bin
> >
> >  fi
> >
> > done
> >
> >
> > Only it's doesn't because of the filter against fitImage.
> >
> >
> >
> > To check I'm not seeing some strange artefact of our BSP or
> > linux-ti-staging (or any other layer we're using):
> >
> > $ git clone git://git.yoctoproject.org/poky
> > $ cd poky
> > $ . oe-init-build-env
> > $ cat << EOF >> conf/local.conf
> > MACHINE = "beaglebone-yocto"
> > KERNEL_CLASSES += " kernel-fitimage"
> > KERNEL_IMAGETYPES = "fitImage"
> > EOF
> > $ bitbake linux-yocto
> >
> > The FIT images we then have:
> >
> > $ find tmp/deploy/images/beaglebone-yocto -name 'fit*.bin' -type f
> >
> tmp/deploy/images/beaglebone-yocto/fitImage-linux.bin--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916134100.bin
> >
> > And what is:
> >
> > $ bitbake u-boot-mkimage-native -caddto_recipe_sysroot
> > $ oe-run-native u-boot-mkimage-native mkimage -l
> >
> tmp/deploy/images/beaglebone-yocto/fitImage-linux.bin--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916134100.bin
> > Running bitbake -e u-boot-mkimage-native
> > GP Header: Size a0e1 LoadAddr a0e1
> >
> > Revert c2d00e2f83cdf3d2923660448756ed29296a06a6 and try again:
> >
> > $ git revert c2d00e2f83cdf3d2923660448756ed29296a06a6
> > $ bitbake linux-yocto
> >
> > This time there's two images:
> >
> > $ find tmp/deploy/images/beaglebone-yocto -name 'fit*.bin' -type f
> >
> tmp/deploy/images/beaglebone-yocto/fitImage--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916141923.bin
> >
> tmp/deploy/images/beaglebone-yocto/fitImage-linux.bin--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916141923.bin
> >
> > And what they are:
> >
> > $ oe-run-native u-boot-mkimage-native mkimage -l
> >
> tmp/deploy/images/beaglebone-yocto/fitImage--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916141923.bin
> > Running bitbake -e u-boot-mkimage-native
> > FIT description: U-Boot fitImage for Poky (Yocto Project Reference
> > Distro)/4.18.3+gitAUTOINC+7341720391_eba03655e8/beaglebone-yocto
> > Created:         Sun Sep 16 14:14:47 2018
> > Image 0 (kernel at 1)
> >  Description:  Linux kernel
> >  Created:      Sun Sep 16 14:14:47 2018
> >  Type:         Kernel Image
> >  Compression:  uncompressed
> >  Data Size:    6381368 Bytes = 6231.80 KiB = 6.09 MiB
> >  Architecture: ARM
> >  OS:           Linux
> >  Load Address: 0x80008000
> >  Entry Point:  0x80008000
> >  Hash algo:    sha1
> >  Hash value:   909137524ffd28b5b0ac51ea39c648b09902dc18
> > Image 1 (fdt at am335x-bone.dtb)
> >  Description:  Flattened Device Tree blob
> >  Created:      Sun Sep 16 14:14:47 2018
> >  Type:         Flat Device Tree
> >  Compression:  uncompressed
> >  Data Size:    33030 Bytes = 32.26 KiB = 0.03 MiB
> >  Architecture: ARM
> >  Hash algo:    sha1
> >  Hash value:   0fece12f15fc5ac6c452d9308cd374c2c0cfea47
> > Image 2 (fdt at am335x-boneblack.dtb)
> >  Description:  Flattened Device Tree blob
> >  Created:      Sun Sep 16 14:14:47 2018
> >  Type:         Flat Device Tree
> >  Compression:  uncompressed
> >  Data Size:    34782 Bytes = 33.97 KiB = 0.03 MiB
> >  Architecture: ARM
> >  Hash algo:    sha1
> >  Hash value:   337f6843020cb8fbaf119b43fd748222d32e72df
> > Image 3 (fdt at am335x-bonegreen.dtb)
> >  Description:  Flattened Device Tree blob
> >  Created:      Sun Sep 16 14:14:47 2018
> >  Type:         Flat Device Tree
> >  Compression:  uncompressed
> >  Data Size:    33286 Bytes = 32.51 KiB = 0.03 MiB
> >  Architecture: ARM
> >  Hash algo:    sha1
> >  Hash value:   4974e8b1656cd7f52829ac3c01f6747bece87cbc
> > Default Configuration: 'conf at am335x-bone.dtb'
> > Configuration 0 (conf at am335x-bone.dtb)
> >  Description:  1 Linux kernel, FDT blob
> >  Kernel:       kernel at 1
> >  FDT:          fdt at am335x-bone.dtb
> >  Hash algo:    sha1
> >  Hash value:   unavailable
> > Configuration 1 (conf at am335x-boneblack.dtb)
> >  Description:  0 Linux kernel, FDT blob
> >  Kernel:       kernel at 1
> >  FDT:          fdt at am335x-boneblack.dtb
> >  Hash algo:    sha1
> >  Hash value:   unavailable
> > Configuration 2 (conf at am335x-bonegreen.dtb)
> >  Description:  0 Linux kernel, FDT blob
> >  Kernel:       kernel at 1
> >  FDT:          fdt at am335x-bonegreen.dtb
> >  Hash algo:    sha1
> >  Hash value:   unavailable
> > $ oe-run-native u-boot-mkimage-native mkimage -l
> >
> tmp/deploy/images/beaglebone-yocto/fitImage-linux.bin--4.18.3+git0+7341720391_eba03655e8-r0-beaglebone-yocto-20180916141923.bin
> > Running bitbake -e u-boot-mkimage-native
> > GP Header: Size a0e1 LoadAddr a0e1
> >
> > --
> > Alex Kiernan
>
>
>
> --
> Alex Kiernan
>


-- 
Leon Woestenberg
leon at sidebranch.com
T: +31 40 711 42 76
M: +31 6 472 30 372

Sidebranch
Embedded Systems
Eindhoven, The Netherlands
http://www.sidebranch.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20180918/81ac2852/attachment-0002.html>


More information about the Openembedded-core mailing list