mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-04 16:10:04 +00:00
The integration of the FIT image-related build steps into the kernel recipe has proven to be not very good. The new implementation with kernel-fit-image.bbclass fixes some design issues: * sstate does not work well when a fitImage contains an initramfs. The kernel is rebuilt from scratch if the build runs from an empty TMPDIR. * A fitImage kernel is not available as a package, but all other kernel image types are. * The task dependencies in the kernel are very complex and difficult to debug if something goes wrong. As a separate, downstream recipe, this is now much easier. The long storry about this issue is here: [YOCTO #12912] (From OE-Core rev: deb6bc3bea30dadabdb580a7a58a3b2e277af400) Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
#
|
|
# Copyright OpenEmbedded Contributors
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
|
|
# fitImage kernel compression algorithm
|
|
FIT_KERNEL_COMP_ALG ?= "gzip"
|
|
FIT_KERNEL_COMP_ALG_EXTENSION ?= ".gz"
|
|
|
|
# Kernel image type passed to mkimage (i.e. kernel kernel_noload...)
|
|
UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
|
|
|
|
uboot_prep_kimage() {
|
|
output_dir=$1
|
|
# For backward compatibility with kernel-fitimage.bbclass and kernel-uboot.bbclass
|
|
# support calling without parameter as well
|
|
if [ -z "$output_dir" ]; then
|
|
output_dir='.'
|
|
fi
|
|
|
|
linux_bin=$output_dir/linux.bin
|
|
if [ -e "arch/${ARCH}/boot/compressed/vmlinux" ]; then
|
|
vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
|
|
linux_suffix=""
|
|
linux_comp="none"
|
|
elif [ -e "arch/${ARCH}/boot/vmlinuz.bin" ]; then
|
|
rm -f "$linux_bin"
|
|
cp -l "arch/${ARCH}/boot/vmlinuz.bin" "$linux_bin"
|
|
vmlinux_path=""
|
|
linux_suffix=""
|
|
linux_comp="none"
|
|
else
|
|
vmlinux_path="vmlinux"
|
|
# Use vmlinux.initramfs for $linux_bin when INITRAMFS_IMAGE_BUNDLE set
|
|
# As per the implementation in kernel.bbclass.
|
|
# See do_bundle_initramfs function
|
|
if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ] && [ -e vmlinux.initramfs ]; then
|
|
vmlinux_path="vmlinux.initramfs"
|
|
fi
|
|
linux_suffix="${FIT_KERNEL_COMP_ALG_EXTENSION}"
|
|
linux_comp="${FIT_KERNEL_COMP_ALG}"
|
|
fi
|
|
|
|
[ -n "$vmlinux_path" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "$vmlinux_path" "$linux_bin"
|
|
|
|
if [ "$linux_comp" != "none" ] ; then
|
|
if [ "$linux_comp" = "gzip" ] ; then
|
|
gzip -9 "$linux_bin"
|
|
elif [ "$linux_comp" = "lzo" ] ; then
|
|
lzop -9 "$linux_bin"
|
|
elif [ "$linux_comp" = "lzma" ] ; then
|
|
xz --format=lzma -f -6 "$linux_bin"
|
|
fi
|
|
mv -f "$linux_bin$linux_suffix" "$linux_bin"
|
|
fi
|
|
|
|
printf "$linux_comp" > "$output_dir/linux_comp"
|
|
}
|