summaryrefslogtreecommitdiffstats
path: root/meta-ti-bsp
diff options
context:
space:
mode:
authorRyan Eatmon <reatmon@ti.com>2025-07-17 14:36:17 -0500
committerRyan Eatmon <reatmon@ti.com>2025-07-17 14:36:17 -0500
commit7fdba41984b636028b09fd8e333ac9f905e1aa03 (patch)
tree13ca0ab359bb51708042684e6dfca0dfe0a674a4 /meta-ti-bsp
parent29c547bfb72d7b6386c89a1e526f703c80df3b49 (diff)
downloadmeta-ti-master-wip.tar.gz
linux-ti-*: Fix support for building legacy HS platformsmaster-wip
The legacy HS platforms (am335x-hs-evm, am437x-hs-evm, and am57xx-hs-evm) are not using the new fitImage flow, but the kernels all include the kernel.bbclass which disallows the old fitImage flow. Copy in the last version of the kernel.bbclass and name it kernel_legacyhs.bbclass, and update the machine configs to defined a variable to use as the KERNEL_BASE_CLASS to inherit. Signed-off-by: Ryan Eatmon <reatmon@ti.com>
Diffstat (limited to 'meta-ti-bsp')
-rw-r--r--meta-ti-bsp/classes/kernel_legacyhs.bbclass870
-rw-r--r--meta-ti-bsp/conf/machine/am335x-hs-evm.conf1
-rw-r--r--meta-ti-bsp/conf/machine/am437x-hs-evm.conf1
-rw-r--r--meta-ti-bsp/conf/machine/am57xx-hs-evm.conf1
-rw-r--r--meta-ti-bsp/conf/machine/include/ti-soc.inc3
-rw-r--r--meta-ti-bsp/recipes-kernel/linux/linux-ti-mainline_git.bb2
-rw-r--r--meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.1.bb2
-rw-r--r--meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb2
-rw-r--r--meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.6.bb2
9 files changed, 880 insertions, 4 deletions
diff --git a/meta-ti-bsp/classes/kernel_legacyhs.bbclass b/meta-ti-bsp/classes/kernel_legacyhs.bbclass
new file mode 100644
index 00000000..f2b79b1a
--- /dev/null
+++ b/meta-ti-bsp/classes/kernel_legacyhs.bbclass
@@ -0,0 +1,870 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7inherit linux-kernel-base kernel-module-split
8
9COMPATIBLE_HOST = ".*-linux"
10
11KERNEL_PACKAGE_NAME ??= "kernel"
12KERNEL_DEPLOYSUBDIR ??= "${@ "" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else d.getVar("KERNEL_PACKAGE_NAME") }"
13
14PROVIDES += "virtual/kernel"
15DEPENDS += "virtual/cross-binutils virtual/cross-cc kmod-native bc-native bison-native"
16DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lzo", "lzop-native", "", d)}"
17DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lz4", "lz4-native", "", d)}"
18DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.zst", "zstd-native", "", d)}"
19PACKAGE_WRITE_DEPS += "depmodwrapper-cross"
20
21do_deploy[depends] += "depmodwrapper-cross:do_populate_sysroot gzip-native:do_populate_sysroot"
22do_clean[depends] += "make-mod-scripts:do_clean"
23
24# CPE entries from NVD use linux_kernel, but the raw CVE entries from the kernel CNA have
25# vendor: linux and product: linux. Note that multiple distributions use "linux" as a product
26# name, so we need to fill vendor to avoid false positives
27CVE_PRODUCT ?= "linux_kernel linux:linux"
28
29S = "${STAGING_KERNEL_DIR}"
30B = "${WORKDIR}/build"
31KBUILD_OUTPUT = "${B}"
32OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
33
34# we include gcc above, we dont need virtual/libc
35INHIBIT_DEFAULT_DEPS = "1"
36
37KERNEL_IMAGETYPE ?= "zImage"
38INITRAMFS_IMAGE ?= ""
39INITRAMFS_TASK ?= ""
40INITRAMFS_IMAGE_BUNDLE ?= ""
41INITRAMFS_DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR_IMAGE}"
42INITRAMFS_MULTICONFIG ?= ""
43
44# KERNEL_VERSION is extracted from source code. It is evaluated as
45# None for the first parsing, since the code has not been fetched.
46# After the code is fetched, it will be evaluated as real version
47# number and cause kernel to be rebuilt. To avoid this, make
48# KERNEL_VERSION_NAME and KERNEL_VERSION_PKG_NAME depend on
49# LINUX_VERSION which is a constant.
50KERNEL_VERSION_NAME = "${@d.getVar('KERNEL_VERSION') or ""}"
51KERNEL_VERSION_NAME[vardepvalue] = "${LINUX_VERSION}"
52KERNEL_VERSION_PKG_NAME = "${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
53KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}"
54
55python __anonymous () {
56 pn = d.getVar("PN")
57 kpn = d.getVar("KERNEL_PACKAGE_NAME")
58
59 # XXX Remove this after bug 11905 is resolved
60 # FILES:${KERNEL_PACKAGE_NAME}-dev doesn't expand correctly
61 if kpn == pn:
62 bb.warn("Some packages (E.g. *-dev) might be missing due to "
63 "bug 11905 (variable KERNEL_PACKAGE_NAME == PN)")
64
65 # The default kernel recipe builds in a shared location defined by
66 # bitbake/distro confs: STAGING_KERNEL_DIR and STAGING_KERNEL_BUILDDIR.
67 # Set these variables to directories under ${WORKDIR} in alternate
68 # kernel recipes (I.e. where KERNEL_PACKAGE_NAME != kernel) so that they
69 # may build in parallel with the default kernel without clobbering.
70 if kpn != "kernel":
71 workdir = d.getVar("WORKDIR")
72 sourceDir = os.path.join(workdir, 'kernel-source')
73 artifactsDir = os.path.join(workdir, 'kernel-build-artifacts')
74 d.setVar("STAGING_KERNEL_DIR", sourceDir)
75 d.setVar("STAGING_KERNEL_BUILDDIR", artifactsDir)
76
77 # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES
78 type = d.getVar('KERNEL_IMAGETYPE') or ""
79 alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or ""
80 types = d.getVar('KERNEL_IMAGETYPES') or ""
81 if type not in types.split():
82 types = (type + ' ' + types).strip()
83 if alttype not in types.split():
84 types = (alttype + ' ' + types).strip()
85 d.setVar('KERNEL_IMAGETYPES', types)
86
87 # KERNEL_IMAGETYPES may contain a mixture of image types supported directly
88 # by the kernel build system and types which are created by post-processing
89 # the output of the kernel build system (e.g. compressing vmlinux ->
90 # vmlinux.gz in kernel_legacyhs_do_transform_kernel()).
91 # KERNEL_IMAGETYPE_FOR_MAKE should contain only image types supported
92 # directly by the kernel build system.
93 if not d.getVar('KERNEL_IMAGETYPE_FOR_MAKE'):
94 typeformake = set()
95 for type in types.split():
96 if type == 'vmlinux.gz':
97 type = 'vmlinux'
98 typeformake.add(type)
99
100 d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', ' '.join(sorted(typeformake)))
101
102 kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel"
103 imagedest = d.getVar('KERNEL_IMAGEDEST')
104
105 for type in types.split():
106 if bb.data.inherits_class('nopackages', d):
107 continue
108 typelower = type.lower()
109 d.appendVar('PACKAGES', ' %s-image-%s' % (kname, typelower))
110 d.setVar('FILES:' + kname + '-image-' + typelower, '/' + imagedest + '/' + type + '-${KERNEL_VERSION_NAME}' + ' /' + imagedest + '/' + type)
111 d.appendVar('RDEPENDS:%s-image' % kname, ' %s-image-%s (= ${EXTENDPKGV})' % (kname, typelower))
112 splitmods = d.getVar("KERNEL_SPLIT_MODULES")
113 if splitmods != '1':
114 d.appendVar('RDEPENDS:%s-image' % kname, ' %s-modules (= ${EXTENDPKGV})' % kname)
115 d.appendVar('RDEPENDS:%s-image-%s' % (kname, typelower), ' %s-modules-${KERNEL_VERSION_PKG_NAME} (= ${EXTENDPKGV})' % kname)
116 d.setVar('PKG:%s-modules' % kname, '%s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
117 d.appendVar('RPROVIDES:%s-modules' % kname, ' %s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
118
119 d.setVar('PKG:%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
120 d.setVar('ALLOW_EMPTY:%s-image-%s' % (kname, typelower), '1')
121
122 if d.getVar('KERNEL_IMAGETYPE_SYMLINK') == '1':
123 d.prependVar('pkg_postinst:%s-image-%s' % (kname,typelower), """set +e
124if [ -n "$D" ]; then
125 ln -sf %s-${KERNEL_VERSION} $D/${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
126else
127 ln -sf %s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
128 if [ $? -ne 0 ]; then
129 echo "Filesystem on ${KERNEL_IMAGEDEST}/ doesn't support symlinks, falling back to copied image (%s)."
130 install -m 0644 ${KERNEL_IMAGEDEST}/%s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s
131 fi
132fi
133set -e
134""" % (type, type, type, type, type, type, type))
135 d.setVar('pkg_postrm:%s-image-%s' % (kname,typelower), """set +e
136if [ -f "${KERNEL_IMAGEDEST}/%s" -o -L "${KERNEL_IMAGEDEST}/%s" ]; then
137 rm -f ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
138fi
139set -e
140""" % (type, type, type))
141
142
143 image = d.getVar('INITRAMFS_IMAGE')
144 # If the INTIRAMFS_IMAGE is set but the INITRAMFS_IMAGE_BUNDLE is set to 0,
145 # the do_bundle_initramfs does nothing, but the INITRAMFS_IMAGE is built
146 # standalone for use by wic and other tools.
147 if image:
148 if d.getVar('INITRAMFS_MULTICONFIG'):
149 d.appendVarFlag('do_bundle_initramfs', 'mcdepends', ' mc:${BB_CURRENT_MC}:${INITRAMFS_MULTICONFIG}:${INITRAMFS_IMAGE}:do_image_complete')
150 else:
151 d.appendVarFlag('do_bundle_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
152 if image and bb.utils.to_boolean(d.getVar('INITRAMFS_IMAGE_BUNDLE')):
153 bb.build.addtask('do_transform_bundled_initramfs', 'do_deploy', 'do_bundle_initramfs', d)
154
155 # NOTE: setting INITRAMFS_TASK is for backward compatibility
156 # The preferred method is to set INITRAMFS_IMAGE, because
157 # this INITRAMFS_TASK has circular dependency problems
158 # if the initramfs requires kernel modules
159 image_task = d.getVar('INITRAMFS_TASK')
160 if image_task:
161 d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')
162}
163
164# Here we pull in all various kernel image types which we support.
165#
166# In case you're wondering why kernel.bbclass inherits the other image
167# types instead of the other way around, the reason for that is to
168# maintain compatibility with various currently existing meta-layers.
169# By pulling in the various kernel image types here, we retain the
170# original behavior of kernel.bbclass, so no meta-layers should get
171# broken.
172#
173# KERNEL_CLASSES by default pulls in kernel-uimage.bbclass, since this
174# used to be the default behavior when only uImage was supported. This
175# variable can be appended by users who implement support for new kernel
176# image types.
177
178KERNEL_CLASSES ?= " kernel-uimage "
179inherit_defer ${KERNEL_CLASSES}
180
181# Old style kernels may set ${S} = ${WORKDIR}/git for example
182# We need to move these over to STAGING_KERNEL_DIR. We can't just
183# create the symlink in advance as the git fetcher can't cope with
184# the symlink.
185do_unpack[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
186do_clean[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
187python do_symlink_kernsrc () {
188 s = d.getVar("S")
189 kernsrc = d.getVar("STAGING_KERNEL_DIR")
190 if s != kernsrc:
191 bb.utils.mkdirhier(kernsrc)
192 bb.utils.remove(kernsrc, recurse=True)
193 if s[-1] == '/':
194 # drop trailing slash, so that os.symlink(kernsrc, s) doesn't use s as
195 # directory name and fail
196 s = s[:-1]
197 if d.getVar("EXTERNALSRC"):
198 # With EXTERNALSRC S will not be wiped so we can symlink to it
199 os.symlink(s, kernsrc)
200 else:
201 import shutil
202 shutil.move(s, kernsrc)
203 os.symlink(kernsrc, s)
204}
205# do_patch is normally ordered before do_configure, but
206# externalsrc.bbclass deletes do_patch, breaking the dependency of
207# do_configure on do_symlink_kernsrc.
208addtask symlink_kernsrc before do_patch do_configure after do_unpack
209
210inherit kernel-arch deploy
211
212PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-module-.*"
213PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-image-.*"
214PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-firmware-.*"
215
216export OS = "${TARGET_OS}"
217export CROSS_COMPILE = "${TARGET_PREFIX}"
218
219KERNEL_RELEASE ?= "${KERNEL_VERSION}"
220
221# The directory where built kernel lies in the kernel tree
222KERNEL_OUTPUT_DIR ?= "arch/${ARCH}/boot"
223KERNEL_IMAGEDEST ?= "boot"
224KERNEL_DTBDEST ?= "${KERNEL_IMAGEDEST}"
225KERNEL_DTBVENDORED ?= "0"
226
227#
228# configuration
229#
230KERNEL_VERSION = "${@get_kernelversion_headers('${B}')}"
231
232# kernels are generally machine specific
233PACKAGE_ARCH = "${MACHINE_ARCH}"
234
235# U-Boot support
236UBOOT_ENTRYPOINT ?= "0x20008000"
237UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
238
239# Some Linux kernel configurations need additional parameters on the command line
240KERNEL_EXTRA_ARGS ?= ""
241
242EXTRA_OEMAKE += ' CC="${KERNEL_CC}" LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" STRIP="${KERNEL_STRIP}"'
243EXTRA_OEMAKE += ' HOSTCC="${BUILD_CC}" HOSTCFLAGS="${BUILD_CFLAGS}" HOSTLDFLAGS="${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}"'
244EXTRA_OEMAKE += ' HOSTCXX="${BUILD_CXX}" HOSTCXXFLAGS="${BUILD_CXXFLAGS}"'
245# Only for newer kernels (5.19+), native pkg-config variables are set for older kernels when building kernel and modules
246EXTRA_OEMAKE += ' HOSTPKG_CONFIG="pkg-config-native"'
247
248KERNEL_ALT_IMAGETYPE ??= ""
249
250copy_initramfs() {
251 echo "Copying initramfs into ./usr ..."
252 # In case the directory is not created yet from the first pass compile:
253 mkdir -p ${B}/usr
254 # Find and use the first initramfs image archive type we find
255 rm -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
256 for img in cpio cpio.gz cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst; do
257 if [ -e "${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img" ]; then
258 cp ${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/.
259 case $img in
260 *gz)
261 echo "gzip decompressing image"
262 gunzip -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
263 break
264 ;;
265 *lz4)
266 echo "lz4 decompressing image"
267 lz4 -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
268 break
269 ;;
270 *lzo)
271 echo "lzo decompressing image"
272 lzop -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
273 break
274 ;;
275 *lzma)
276 echo "lzma decompressing image"
277 lzma -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
278 break
279 ;;
280 *xz)
281 echo "xz decompressing image"
282 xz -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
283 break
284 ;;
285 *zst)
286 echo "zst decompressing image"
287 zstd -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
288 break
289 ;;
290 esac
291 break
292 fi
293 done
294 # Verify that the above loop found a initramfs, fail otherwise
295 [ -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio ] && echo "Finished copy of initramfs into ./usr" || die "Could not find any ${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.cpio{.gz|.lz4|.lzo|.lzma|.xz|.zst) for bundling; INITRAMFS_IMAGE_NAME might be wrong."
296}
297
298do_bundle_initramfs () {
299 if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
300 echo "Creating a kernel image with a bundled initramfs..."
301 copy_initramfs
302 # Backing up kernel image relies on its type(regular file or symbolic link)
303 tmp_path=""
304 for imageType in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
305 if [ -h ${KERNEL_OUTPUT_DIR}/$imageType ] ; then
306 linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$imageType`
307 realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$imageType`
308 mv -f $realpath $realpath.bak
309 tmp_path=$tmp_path" "$imageType"#"$linkpath"#"$realpath
310 elif [ -f ${KERNEL_OUTPUT_DIR}/$imageType ]; then
311 mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.bak
312 tmp_path=$tmp_path" "$imageType"##"
313 fi
314 done
315 use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
316 kernel_legacyhs_do_compile
317 # Restoring kernel image
318 for tp in $tmp_path ; do
319 imageType=`echo $tp|cut -d "#" -f 1`
320 linkpath=`echo $tp|cut -d "#" -f 2`
321 realpath=`echo $tp|cut -d "#" -f 3`
322 if [ -n "$realpath" ]; then
323 mv -f $realpath $realpath.initramfs
324 mv -f $realpath.bak $realpath
325 ln -sf $linkpath.initramfs ${B}/${KERNEL_OUTPUT_DIR}/$imageType.initramfs
326 else
327 mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.initramfs
328 mv -f ${KERNEL_OUTPUT_DIR}/$imageType.bak ${KERNEL_OUTPUT_DIR}/$imageType
329 fi
330 done
331 fi
332}
333do_bundle_initramfs[dirs] = "${B}"
334
335kernel_legacyhs_do_transform_bundled_initramfs() {
336 # vmlinux.gz is not built by kernel
337 if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
338 gzip -9cn < ${KERNEL_OUTPUT_DIR}/vmlinux.initramfs > ${KERNEL_OUTPUT_DIR}/vmlinux.gz.initramfs
339 fi
340}
341do_transform_bundled_initramfs[dirs] = "${B}"
342
343python do_package:prepend () {
344 d.setVar('STRIP', d.getVar('KERNEL_STRIP').strip())
345}
346
347python do_devshell:prepend () {
348 os.environ["LDFLAGS"] = ''
349}
350
351addtask bundle_initramfs after do_install before do_deploy
352
353KERNEL_DEBUG_TIMESTAMPS ??= "0"
354
355kernel_legacyhs_do_compile() {
356 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
357
358 # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
359 export PKG_CONFIG_DIR="${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig"
360 export PKG_CONFIG_PATH="$PKG_CONFIG_DIR:${STAGING_DATADIR_NATIVE}/pkgconfig"
361 export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
362 export PKG_CONFIG_SYSROOT_DIR=""
363
364 if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
365 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
366 # be set....
367 if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
368 # The source directory is not necessarily a git repository, so we
369 # specify the git-dir to ensure that git does not query a
370 # repository in any parent directory.
371 SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
372 fi
373
374 ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
375 export KBUILD_BUILD_TIMESTAMP="$ts"
376 export KCONFIG_NOTIMESTAMP=1
377 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
378 else
379 ts=`LC_ALL=C date`
380 export KBUILD_BUILD_TIMESTAMP="$ts"
381 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
382 fi
383 # The $use_alternate_initrd is only set from
384 # do_bundle_initramfs() This variable is specifically for the
385 # case where we are making a second pass at the kernel
386 # compilation and we want to force the kernel build to use a
387 # different initramfs image. The way to do that in the kernel
388 # is to specify:
389 # make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
390 if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
391 # The old style way of copying an prebuilt image and building it
392 # is turned on via INTIRAMFS_TASK != ""
393 copy_initramfs
394 use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
395 fi
396 for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
397 oe_runmake ${PARALLEL_MAKE} ${typeformake} ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
398 done
399}
400
401kernel_legacyhs_do_transform_kernel() {
402 # vmlinux.gz is not built by kernel
403 if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
404 mkdir -p "${KERNEL_OUTPUT_DIR}"
405 gzip -9cn < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz"
406 fi
407}
408do_transform_kernel[dirs] = "${B}"
409addtask transform_kernel after do_compile before do_install
410
411do_compile_kernelmodules() {
412 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
413
414 # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
415 export PKG_CONFIG_DIR="${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig"
416 export PKG_CONFIG_PATH="$PKG_CONFIG_DIR:${STAGING_DATADIR_NATIVE}/pkgconfig"
417 export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
418 export PKG_CONFIG_SYSROOT_DIR=""
419
420 if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
421 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
422 # be set....
423 if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
424 # The source directory is not necessarily a git repository, so we
425 # specify the git-dir to ensure that git does not query a
426 # repository in any parent directory.
427 SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
428 fi
429
430 ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
431 export KBUILD_BUILD_TIMESTAMP="$ts"
432 export KCONFIG_NOTIMESTAMP=1
433 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
434 else
435 ts=`LC_ALL=C date`
436 export KBUILD_BUILD_TIMESTAMP="$ts"
437 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
438 fi
439 if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
440 oe_runmake -C ${B} ${PARALLEL_MAKE} modules ${KERNEL_EXTRA_ARGS}
441
442 # Module.symvers gets updated during the
443 # building of the kernel modules. We need to
444 # update this in the shared workdir since some
445 # external kernel modules has a dependency on
446 # other kernel modules and will look at this
447 # file to do symbol lookups
448 cp ${B}/Module.symvers ${STAGING_KERNEL_BUILDDIR}/
449 # 5.10+ kernels have module.lds that we need to copy for external module builds
450 if [ -e "${B}/scripts/module.lds" ]; then
451 install -Dm 0644 ${B}/scripts/module.lds ${STAGING_KERNEL_BUILDDIR}/scripts/module.lds
452 fi
453 else
454 bbnote "no modules to compile"
455 fi
456}
457addtask compile_kernelmodules after do_compile before do_strip
458
459kernel_legacyhs_do_install() {
460 #
461 # First install the modules
462 #
463 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
464 if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
465 oe_runmake DEPMOD=echo MODLIB=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION} INSTALL_FW_PATH=${D}${nonarch_base_libdir}/firmware modules_install
466 rm -f "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
467 rm -f "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/source"
468 # Remove empty module directories to prevent QA issues
469 [ -d "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel" ] && find "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel" -type d -empty -delete
470 else
471 bbnote "no modules to install"
472 fi
473
474 #
475 # Install various kernel output (zImage, map file, config, module support files)
476 #
477 install -d ${D}/${KERNEL_IMAGEDEST}
478
479 #
480 # When including an initramfs bundle inside a FIT image, the fitImage is created after the install task
481 # by do_assemble_fitimage_initramfs.
482 # This happens after the generation of the initramfs bundle (done by do_bundle_initramfs).
483 # So, at the level of the install task we should not try to install the fitImage. fitImage is still not
484 # generated yet.
485 # After the generation of the fitImage, the deploy task copies the fitImage from the build directory to
486 # the deploy folder.
487 #
488
489 for imageType in ${KERNEL_IMAGETYPES} ; do
490 if [ $imageType != "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then
491 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION}
492 fi
493 done
494
495 install -m 0644 System.map ${D}/${KERNEL_IMAGEDEST}/System.map-${KERNEL_VERSION}
496 install -m 0644 .config ${D}/${KERNEL_IMAGEDEST}/config-${KERNEL_VERSION}
497 install -m 0644 vmlinux ${D}/${KERNEL_IMAGEDEST}/vmlinux-${KERNEL_VERSION}
498 ! [ -e Module.symvers ] || install -m 0644 Module.symvers ${D}/${KERNEL_IMAGEDEST}/Module.symvers-${KERNEL_VERSION}
499}
500
501# Must be ran no earlier than after do_kernel_checkout or else Makefile won't be in ${S}/Makefile
502do_kernel_version_sanity_check() {
503 if [ "x${KERNEL_VERSION_SANITY_SKIP}" = "x1" ]; then
504 exit 0
505 fi
506
507 # The Makefile determines the kernel version shown at runtime
508 # Don't use KERNEL_VERSION because the headers it grabs the version from aren't generated until do_compile
509 VERSION=$(grep "^VERSION =" ${S}/Makefile | sed s/.*=\ *//)
510 PATCHLEVEL=$(grep "^PATCHLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
511 SUBLEVEL=$(grep "^SUBLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
512 EXTRAVERSION=$(grep "^EXTRAVERSION =" ${S}/Makefile | sed s/.*=\ *//)
513
514 # Build a string for regex and a plain version string
515 reg="^${VERSION}\.${PATCHLEVEL}"
516 vers="${VERSION}.${PATCHLEVEL}"
517 if [ -n "${SUBLEVEL}" ]; then
518 # Ignoring a SUBLEVEL of zero is fine
519 if [ "${SUBLEVEL}" = "0" ]; then
520 reg="${reg}(\.${SUBLEVEL})?"
521 else
522 reg="${reg}\.${SUBLEVEL}"
523 vers="${vers}.${SUBLEVEL}"
524 fi
525 fi
526 vers="${vers}${EXTRAVERSION}"
527 reg="${reg}${EXTRAVERSION}"
528
529 if [ -z `echo ${PV} | grep -E "${reg}"` ]; then
530 bbfatal "Package Version (${PV}) does not match of kernel being built (${vers}). Please update the PV variable to match the kernel source or set KERNEL_VERSION_SANITY_SKIP=\"1\" in your recipe."
531 fi
532 exit 0
533}
534
535addtask shared_workdir after do_compile before do_compile_kernelmodules
536addtask shared_workdir_setscene
537
538do_shared_workdir_setscene () {
539 exit 1
540}
541
542emit_depmod_pkgdata() {
543 # Stash data for depmod
544 install -d ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/
545 echo "${KERNEL_VERSION}" > ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/${KERNEL_PACKAGE_NAME}-abiversion
546 cp ${B}/System.map ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/System.map-${KERNEL_VERSION}
547}
548
549PACKAGEFUNCS += "emit_depmod_pkgdata"
550
551do_shared_workdir[cleandirs] += " ${STAGING_KERNEL_BUILDDIR}"
552do_shared_workdir () {
553 cd ${B}
554
555 kerneldir=${STAGING_KERNEL_BUILDDIR}
556 install -d $kerneldir
557
558 #
559 # Store the kernel version in sysroots for module-base.bbclass
560 #
561
562 echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion
563 echo "${KERNEL_LOCALVERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-localversion
564
565 # Copy files required for module builds
566 cp System.map $kerneldir/System.map-${KERNEL_VERSION}
567 ! [ -e Module.symvers ] || cp Module.symvers $kerneldir/
568 cp .config $kerneldir/
569 mkdir -p $kerneldir/include/config
570 cp include/config/kernel.release $kerneldir/include/config/kernel.release
571 if [ -e certs/signing_key.x509 ]; then
572 # The signing_key.* files are stored in the certs/ dir in
573 # newer Linux kernels
574 mkdir -p $kerneldir/certs
575 cp certs/signing_key.* $kerneldir/certs/
576 elif [ -e signing_key.priv ]; then
577 cp signing_key.* $kerneldir/
578 fi
579
580 # We can also copy over all the generated files and avoid special cases
581 # like version.h, but we've opted to keep this small until file creep starts
582 # to happen
583 if [ -e include/linux/version.h ]; then
584 mkdir -p $kerneldir/include/linux
585 cp include/linux/version.h $kerneldir/include/linux/version.h
586 fi
587
588 # As of Linux kernel version 3.0.1, the clean target removes
589 # arch/powerpc/lib/crtsavres.o which is present in
590 # KBUILD_LDFLAGS_MODULE, making it required to build external modules.
591 if [ ${ARCH} = "powerpc" ]; then
592 if [ -e arch/powerpc/lib/crtsavres.o ]; then
593 mkdir -p $kerneldir/arch/powerpc/lib/
594 cp arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
595 fi
596 fi
597
598 if [ -d include/generated ]; then
599 mkdir -p $kerneldir/include/generated/
600 cp -fR include/generated/* $kerneldir/include/generated/
601 fi
602
603 if [ -d arch/${ARCH}/include/generated ]; then
604 mkdir -p $kerneldir/arch/${ARCH}/include/generated/
605 cp -fR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
606 fi
607
608 if (grep -q -i -e '^CONFIG_UNWINDER_ORC=y$' $kerneldir/.config); then
609 # With CONFIG_UNWINDER_ORC (the default in 4.14), objtool is required for
610 # out-of-tree modules to be able to generate object files.
611 if [ -x tools/objtool/objtool ]; then
612 mkdir -p ${kerneldir}/tools/objtool
613 cp tools/objtool/objtool ${kerneldir}/tools/objtool/
614 fi
615 fi
616
617 # When building with CONFIG_MODVERSIONS=y and CONFIG_RANDSTRUCT=y we need
618 # to copy the build assets generated for the randstruct seed to
619 # STAGING_KERNEL_BUILDDIR, otherwise the out-of-tree modules build will
620 # generate those assets which will result in a different
621 # RANDSTRUCT_HASHED_SEED
622 if [ -d scripts/basic ]; then
623 mkdir -p ${kerneldir}/scripts
624 cp -r scripts/basic ${kerneldir}/scripts
625 fi
626
627 if [ -d scripts/gcc-plugins ]; then
628 mkdir -p ${kerneldir}/scripts
629 cp -r scripts/gcc-plugins ${kerneldir}/scripts
630 fi
631
632}
633
634# We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
635SYSROOT_DIRS = ""
636
637KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
638
639python check_oldest_kernel() {
640 oldest_kernel = d.getVar('OLDEST_KERNEL')
641 kernel_version = d.getVar('KERNEL_VERSION')
642 tclibc = d.getVar('TCLIBC')
643 if tclibc == 'glibc':
644 kernel_version = kernel_version.split('-', 1)[0]
645 if oldest_kernel and kernel_version:
646 if bb.utils.vercmp_string(kernel_version, oldest_kernel) < 0:
647 bb.warn('%s: OLDEST_KERNEL is "%s" but the version of the kernel you are building is "%s" - therefore %s as built may not be compatible with this kernel. Either set OLDEST_KERNEL to an older version, or build a newer kernel.' % (d.getVar('PN'), oldest_kernel, kernel_version, tclibc))
648}
649
650check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
651do_compile[postfuncs] += "check_oldest_kernel"
652
653KERNEL_LOCALVERSION ??= ""
654
655# 6.3+ requires the variable LOCALVERSION to be set to not get a "+" in
656# the local version. Having it empty means nothing will be added, and any
657# value will be appended to the local kernel version. This replaces the
658# use of .scmversion file for setting a localversion without using
659# the CONFIG_LOCALVERSION option.
660#
661# Note: This class saves the value of localversion to a file
662# so other recipes like make-mod-scripts can restore it via the
663# helper function get_kernellocalversion_file
664export LOCALVERSION = "${KERNEL_LOCALVERSION}"
665
666kernel_legacyhs_do_configure() {
667 # fixes extra + in /lib/modules/2.6.37+
668 # $ scripts/setlocalversion . => +
669 # $ make kernelversion => 2.6.37
670 # $ make kernelrelease => 2.6.37+
671 # See kernel-arch.bbclass for post v6.3 removal of the extra
672 # + in localversion. .scmversion is no longer used, and the
673 # variable LOCALVERSION must be used
674 if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
675 echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
676 echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
677 fi
678
679 if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
680 mv "${S}/.config" "${B}/.config"
681 fi
682
683 # Copy defconfig to .config if .config does not exist. This allows
684 # recipes to manage the .config themselves in do_configure:prepend().
685 if [ -f "${UNPACKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
686 cp "${UNPACKDIR}/defconfig" "${B}/.config"
687 fi
688
689 ${KERNEL_CONFIG_COMMAND}
690}
691
692inherit cml1 pkgconfig
693
694EXPORT_FUNCTIONS do_compile do_transform_kernel do_transform_bundled_initramfs do_install do_configure
695
696# kernel-base becomes kernel-${KERNEL_VERSION}
697# kernel-image becomes kernel-image-${KERNEL_VERSION}
698PACKAGES = "${KERNEL_PACKAGE_NAME} ${KERNEL_PACKAGE_NAME}-base ${KERNEL_PACKAGE_NAME}-vmlinux ${KERNEL_PACKAGE_NAME}-image ${KERNEL_PACKAGE_NAME}-dev ${KERNEL_PACKAGE_NAME}-modules ${KERNEL_PACKAGE_NAME}-dbg"
699FILES:${PN} = ""
700FILES:${KERNEL_PACKAGE_NAME}-base = "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.order ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo"
701FILES:${KERNEL_PACKAGE_NAME}-image = ""
702FILES:${KERNEL_PACKAGE_NAME}-dev = "/${KERNEL_IMAGEDEST}/System.map* /${KERNEL_IMAGEDEST}/Module.symvers* /${KERNEL_IMAGEDEST}/config* ${KERNEL_SRC_PATH} ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
703FILES:${KERNEL_PACKAGE_NAME}-vmlinux = "/${KERNEL_IMAGEDEST}/vmlinux-${KERNEL_VERSION_NAME}"
704FILES:${KERNEL_PACKAGE_NAME}-modules = ""
705FILES:${KERNEL_PACKAGE_NAME}-dbg = "/usr/lib/debug /usr/src/debug"
706RDEPENDS:${KERNEL_PACKAGE_NAME} = "${KERNEL_PACKAGE_NAME}-base (= ${EXTENDPKGV})"
707# Allow machines to override this dependency if kernel image files are
708# not wanted in images as standard
709RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base ?= "${KERNEL_PACKAGE_NAME}-image (= ${EXTENDPKGV})"
710PKG:${KERNEL_PACKAGE_NAME}-image = "${KERNEL_PACKAGE_NAME}-image-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
711RPROVIDES:${KERNEL_PACKAGE_NAME}-image += "${KERNEL_PACKAGE_NAME}-image"
712RDEPENDS:${KERNEL_PACKAGE_NAME}-image += "${@oe.utils.conditional('KERNEL_IMAGETYPE', 'vmlinux', '${KERNEL_PACKAGE_NAME}-vmlinux (= ${EXTENDPKGV})', '', d)}"
713PKG:${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
714RPROVIDES:${KERNEL_PACKAGE_NAME}-base += "${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION} ${KERNEL_PACKAGE_NAME}-base"
715ALLOW_EMPTY:${KERNEL_PACKAGE_NAME} = "1"
716ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-base = "1"
717ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-image = "1"
718ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-modules = "1"
719DESCRIPTION:${KERNEL_PACKAGE_NAME}-modules = "Kernel modules meta package"
720
721pkg_postinst:${KERNEL_PACKAGE_NAME}-base () {
722 if [ ! -e "$D/lib/modules/${KERNEL_VERSION}" ]; then
723 mkdir -p $D/lib/modules/${KERNEL_VERSION}
724 fi
725 if [ -n "$D" ]; then
726 depmodwrapper -a -b $D ${KERNEL_VERSION} ${KERNEL_PACKAGE_NAME}
727 else
728 depmod -a ${KERNEL_VERSION}
729 fi
730}
731
732PACKAGESPLITFUNCS =+ "split_kernel_packages"
733
734python split_kernel_packages () {
735 do_split_packages(d, root='${nonarch_base_libdir}/firmware', file_regex=r'^(.*)\.(bin|fw|cis|csp|dsp)$', output_pattern='${KERNEL_PACKAGE_NAME}-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')
736}
737
738# Many scripts want to look in arch/$arch/boot for the bootable
739# image. This poses a problem for vmlinux and vmlinuz based
740# booting. This task arranges to have vmlinux and vmlinuz appear
741# in the normalized directory location.
742do_kernel_link_images() {
743 if [ ! -d "${B}/arch/${ARCH}/boot" ]; then
744 mkdir ${B}/arch/${ARCH}/boot
745 fi
746 cd ${B}/arch/${ARCH}/boot
747 ln -sf ../../../vmlinux
748 if [ -f ../../../vmlinuz ]; then
749 ln -sf ../../../vmlinuz
750 fi
751 if [ -f ../../../vmlinuz.bin ]; then
752 ln -sf ../../../vmlinuz.bin
753 fi
754 if [ -f ../../../vmlinux.64 ]; then
755 ln -sf ../../../vmlinux.64
756 fi
757}
758addtask kernel_link_images after do_compile before do_strip
759
760python do_strip() {
761 import shutil
762
763 strip = d.getVar('KERNEL_STRIP')
764 extra_sections = d.getVar('KERNEL_IMAGE_STRIP_EXTRA_SECTIONS')
765 kernel_image = d.getVar('B') + "/" + d.getVar('KERNEL_OUTPUT_DIR') + "/vmlinux"
766
767 if (extra_sections and kernel_image.find(d.getVar('KERNEL_IMAGEDEST') + '/vmlinux') != -1):
768 kernel_image_stripped = kernel_image + ".stripped"
769 shutil.copy2(kernel_image, kernel_image_stripped)
770 oe.package.runstrip((kernel_image_stripped, 8, strip, extra_sections))
771 bb.debug(1, "KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping sections: " + \
772 extra_sections)
773}
774do_strip[dirs] = "${B}"
775
776addtask strip before do_sizecheck after do_kernel_link_images
777
778# Support checking the kernel size since some kernels need to reside in partitions
779# with a fixed length or there is a limit in transferring the kernel to memory.
780# If more than one image type is enabled, warn on any that don't fit but only fail
781# if none fit.
782do_sizecheck() {
783 if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
784 invalid=`echo ${KERNEL_IMAGE_MAXSIZE} | sed 's/[0-9]//g'`
785 if [ -n "$invalid" ]; then
786 die "Invalid KERNEL_IMAGE_MAXSIZE: ${KERNEL_IMAGE_MAXSIZE}, should be an integer (The unit is Kbytes)"
787 fi
788 at_least_one_fits=
789 for imageType in ${KERNEL_IMAGETYPES} ; do
790 size=`du -ks ${B}/${KERNEL_OUTPUT_DIR}/$imageType | awk '{print $1}'`
791 if [ $size -gt ${KERNEL_IMAGE_MAXSIZE} ]; then
792 bbwarn "This kernel $imageType (size=$size(K) > ${KERNEL_IMAGE_MAXSIZE}(K)) is too big for your device."
793 else
794 at_least_one_fits=y
795 fi
796 done
797 if [ -z "$at_least_one_fits" ]; then
798 die "All kernel images are too big for your device. Please reduce the size of the kernel by making more of it modular."
799 fi
800 fi
801}
802do_sizecheck[dirs] = "${B}"
803
804addtask sizecheck before do_install after do_strip
805
806inherit kernel-artifact-names
807
808kernel_legacyhs_do_deploy() {
809 deployDir="${DEPLOYDIR}"
810 if [ -n "${KERNEL_DEPLOYSUBDIR}" ]; then
811 deployDir="${DEPLOYDIR}/${KERNEL_DEPLOYSUBDIR}"
812 mkdir "$deployDir"
813 fi
814
815 for imageType in ${KERNEL_IMAGETYPES} ; do
816 baseName=$imageType-${KERNEL_IMAGE_NAME}
817
818 if [ -s ${KERNEL_OUTPUT_DIR}/$imageType.stripped ] ; then
819 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.stripped $deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
820 else
821 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType $deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
822 fi
823 if [ -n "${KERNEL_IMAGE_LINK_NAME}" ] ; then
824 ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
825 fi
826 if [ "${KERNEL_IMAGETYPE_SYMLINK}" = "1" ] ; then
827 ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType
828 fi
829 done
830
831 if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
832 mkdir -p ${D}${root_prefix}/lib
833 if [ -n "${SOURCE_DATE_EPOCH}" ]; then
834 TAR_ARGS="--sort=name --clamp-mtime --mtime=@${SOURCE_DATE_EPOCH}"
835 else
836 TAR_ARGS=""
837 fi
838 TAR_ARGS="$TAR_ARGS --owner=0 --group=0"
839 tar $TAR_ARGS -cv -C ${D}${root_prefix} lib | gzip -9n > $deployDir/modules-${MODULE_TARBALL_NAME}.tgz
840
841 if [ -n "${MODULE_TARBALL_LINK_NAME}" ] ; then
842 ln -sf modules-${MODULE_TARBALL_NAME}.tgz $deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
843 fi
844 fi
845
846 if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
847 for imageType in ${KERNEL_IMAGETYPES} ; do
848 if [ "$imageType" = "fitImage" ] ; then
849 continue
850 fi
851 initramfsBaseName=$imageType-${INITRAMFS_NAME}
852 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$initramfsBaseName${KERNEL_IMAGE_BIN_EXT}
853 if [ -n "${INITRAMFS_LINK_NAME}" ] ; then
854 ln -sf $initramfsBaseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${INITRAMFS_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
855 fi
856 done
857 fi
858}
859
860# We deploy to filenames that include PKGV and PKGR, read the saved data to
861# ensure we get the right values for both
862do_deploy[prefuncs] += "read_subpackage_metadata"
863
864addtask deploy after do_populate_sysroot do_packagedata
865
866EXPORT_FUNCTIONS do_deploy
867
868# Add using Device Tree support
869inherit kernel-devicetree
870
diff --git a/meta-ti-bsp/conf/machine/am335x-hs-evm.conf b/meta-ti-bsp/conf/machine/am335x-hs-evm.conf
index 652496c2..562befe9 100644
--- a/meta-ti-bsp/conf/machine/am335x-hs-evm.conf
+++ b/meta-ti-bsp/conf/machine/am335x-hs-evm.conf
@@ -11,6 +11,7 @@ UBOOT_CONFIG[uart] = "am335x_hs_evm_uart_config"
11UBOOT_CONFIG[mmc] = "am335x_hs_evm_config" 11UBOOT_CONFIG[mmc] = "am335x_hs_evm_config"
12 12
13# FIT image for legacy secure devices 13# FIT image for legacy secure devices
14KERNEL_BASE_CLASS = "kernel_legacyhs"
14KERNEL_CLASSES += " kernel-fitimage-legacyhs" 15KERNEL_CLASSES += " kernel-fitimage-legacyhs"
15KERNEL_IMAGETYPES += " fitImage" 16KERNEL_IMAGETYPES += " fitImage"
16 17
diff --git a/meta-ti-bsp/conf/machine/am437x-hs-evm.conf b/meta-ti-bsp/conf/machine/am437x-hs-evm.conf
index fde38d39..35b8d0a4 100644
--- a/meta-ti-bsp/conf/machine/am437x-hs-evm.conf
+++ b/meta-ti-bsp/conf/machine/am437x-hs-evm.conf
@@ -12,6 +12,7 @@ OPTEEFLAVOR = "am43xx"
12EXTRA_IMAGEDEPENDS += "optee-os" 12EXTRA_IMAGEDEPENDS += "optee-os"
13 13
14# FIT image for legacy secure devices 14# FIT image for legacy secure devices
15KERNEL_BASE_CLASS = "kernel_legacyhs"
15KERNEL_CLASSES += " kernel-fitimage-legacyhs" 16KERNEL_CLASSES += " kernel-fitimage-legacyhs"
16KERNEL_IMAGETYPES += " fitImage" 17KERNEL_IMAGETYPES += " fitImage"
17 18
diff --git a/meta-ti-bsp/conf/machine/am57xx-hs-evm.conf b/meta-ti-bsp/conf/machine/am57xx-hs-evm.conf
index fcdc5c0b..e06c9728 100644
--- a/meta-ti-bsp/conf/machine/am57xx-hs-evm.conf
+++ b/meta-ti-bsp/conf/machine/am57xx-hs-evm.conf
@@ -13,6 +13,7 @@ OPTEEPAGER = "y"
13EXTRA_IMAGEDEPENDS += "optee-os" 13EXTRA_IMAGEDEPENDS += "optee-os"
14 14
15# FIT image for legacy secure devices 15# FIT image for legacy secure devices
16KERNEL_BASE_CLASS = "kernel_legacyhs"
16KERNEL_CLASSES += " kernel-fitimage-legacyhs" 17KERNEL_CLASSES += " kernel-fitimage-legacyhs"
17KERNEL_IMAGETYPES += " fitImage" 18KERNEL_IMAGETYPES += " fitImage"
18 19
diff --git a/meta-ti-bsp/conf/machine/include/ti-soc.inc b/meta-ti-bsp/conf/machine/include/ti-soc.inc
index e3a50fdd..56ea9e47 100644
--- a/meta-ti-bsp/conf/machine/include/ti-soc.inc
+++ b/meta-ti-bsp/conf/machine/include/ti-soc.inc
@@ -11,3 +11,6 @@ UBOOT_RD_ENTRYPOINT = "0x84000000"
11 11
12# TI platforms all use devicetrees with overlays 12# TI platforms all use devicetrees with overlays
13MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-devicetree" 13MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-devicetree"
14
15# All machines should start off pointing at the default base kernel class
16KERNEL_BASE_CLASS = "kernel"
diff --git a/meta-ti-bsp/recipes-kernel/linux/linux-ti-mainline_git.bb b/meta-ti-bsp/recipes-kernel/linux/linux-ti-mainline_git.bb
index 4c740678..51723fc0 100644
--- a/meta-ti-bsp/recipes-kernel/linux/linux-ti-mainline_git.bb
+++ b/meta-ti-bsp/recipes-kernel/linux/linux-ti-mainline_git.bb
@@ -3,7 +3,7 @@ SUMMARY = "Mainline Linux kernel for TI devices"
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
5 5
6inherit kernel 6inherit ${KERNEL_BASE_CLASS}
7 7
8require recipes-kernel/linux/ti-kernel.inc 8require recipes-kernel/linux/ti-kernel.inc
9 9
diff --git a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.1.bb b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.1.bb
index 39ff24ed..c1d5f87e 100644
--- a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.1.bb
+++ b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.1.bb
@@ -3,7 +3,7 @@ SUMMARY = "Linux kernel for TI devices"
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
5 5
6inherit kernel 6inherit ${KERNEL_BASE_CLASS}
7 7
8require recipes-kernel/linux/setup-defconfig.inc 8require recipes-kernel/linux/setup-defconfig.inc
9require recipes-kernel/linux/ti-kernel.inc 9require recipes-kernel/linux/ti-kernel.inc
diff --git a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb
index e58eadcb..f5caad62 100644
--- a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb
+++ b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb
@@ -3,7 +3,7 @@ SUMMARY = "Linux kernel for TI devices"
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
5 5
6inherit kernel 6inherit ${KERNEL_BASE_CLASS}
7 7
8require recipes-kernel/linux/setup-defconfig.inc 8require recipes-kernel/linux/setup-defconfig.inc
9require recipes-kernel/linux/ti-kernel.inc 9require recipes-kernel/linux/ti-kernel.inc
diff --git a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.6.bb b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.6.bb
index a2eb3978..d550a031 100644
--- a/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.6.bb
+++ b/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.6.bb
@@ -3,7 +3,7 @@ SUMMARY = "Linux kernel for TI devices"
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 4LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
5 5
6inherit kernel 6inherit ${KERNEL_BASE_CLASS}
7 7
8require recipes-kernel/linux/setup-defconfig.inc 8require recipes-kernel/linux/setup-defconfig.inc
9require recipes-kernel/linux/ti-kernel.inc 9require recipes-kernel/linux/ti-kernel.inc