summaryrefslogtreecommitdiff
path: root/upstream-layers/openembedded-core/meta/classes-recipe/kernel-uboot.bbclass
blob: 62974baaf06d6dea3eb059fec6812916f8a6200e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#
# 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"
}