summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Ashfield <bruce.ashfield@gmail.com>2024-02-22 11:35:45 +0100
committerSteve Sakoman <steve@sakoman.com>2024-03-01 05:19:54 -1000
commit26f23535eef1f3314c42cd00cda0c6da7cdaf9af (patch)
tree23dbb577e2732eafb663b553fd95484b09386e62
parent2b7c113459a602c91badaa7543d02811feac0151 (diff)
downloadpoky-26f23535eef1f3314c42cd00cda0c6da7cdaf9af.tar.gz
kernel: make LOCALVERSION consistent between recipes
The initial fix for localversion setting in 6.3+ broke older recipes and also broke recipes setting localversion in a kernel recipe, as make-mod-scripts (and other locations) can trigger a regeneration of files and don't have access to the variable. Moving the setting of this variable to the global namespace doesn't make sense, so we follow the example of the kernel-abiversion and save a kernel-localversion to the build artifacts. Recipes that may regenerate scripts/dynamic files, must depend on the do_shared_workedir of the kernel and use the helper function to read the file storing the localversion. (From OE-Core rev: cca0971a7d92d823cc0c2b16cf14a7b2ed8ecb61) Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> cherry-picked from master b378eec156998eea55ba61e59103cb34fab0d07c Signed-off-by: Andreas Helbech Kleist <andreaskleist@gmail.com> Acked-by: Ryan Eatmon <reatmon@ti.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--meta/classes/kernel-arch.bbclass8
-rw-r--r--meta/classes/kernel.bbclass14
-rw-r--r--meta/classes/kernelsrc.bbclass1
-rw-r--r--meta/classes/linux-kernel-base.bbclass11
-rw-r--r--meta/classes/module-base.bbclass1
-rw-r--r--meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb3
6 files changed, 30 insertions, 8 deletions
diff --git a/meta/classes/kernel-arch.bbclass b/meta/classes/kernel-arch.bbclass
index 0a79dea0af..62c8211621 100644
--- a/meta/classes/kernel-arch.bbclass
+++ b/meta/classes/kernel-arch.bbclass
@@ -65,11 +65,3 @@ KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} -fuse-ld=bfd ${DE
65KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}" 65KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
66KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}" 66KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
67TOOLCHAIN ?= "gcc" 67TOOLCHAIN ?= "gcc"
68
69# 6.3+ requires the variable LOCALVERSION to be set to not get a "+" in
70# the local version. Having it empty means nothing will be added, and any
71# value will be appended to the local kernel version. This replaces the
72# use of .scmversion file for setting a localversion without using
73# the CONFIG_LOCALVERSION option.
74KERNEL_LOCALVERSION ??= ""
75export LOCALVERSION ?= "${KERNEL_LOCALVERSION}"
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 940f1a3cf4..96e41b5192 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -541,6 +541,7 @@ do_shared_workdir () {
541 # 541 #
542 542
543 echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion 543 echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion
544 echo "${KERNEL_LOCALVERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-localversion
544 545
545 # Copy files required for module builds 546 # Copy files required for module builds
546 cp System.map $kerneldir/System.map-${KERNEL_VERSION} 547 cp System.map $kerneldir/System.map-${KERNEL_VERSION}
@@ -630,6 +631,19 @@ python check_oldest_kernel() {
630check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION" 631check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
631do_configure[prefuncs] += "check_oldest_kernel" 632do_configure[prefuncs] += "check_oldest_kernel"
632 633
634KERNEL_LOCALVERSION ??= ""
635
636# 6.3+ requires the variable LOCALVERSION to be set to not get a "+" in
637# the local version. Having it empty means nothing will be added, and any
638# value will be appended to the local kernel version. This replaces the
639# use of .scmversion file for setting a localversion without using
640# the CONFIG_LOCALVERSION option.
641#
642# Note: This class saves the value of localversion to a file
643# so other recipes like make-mod-scripts can restore it via the
644# helper function get_kernellocalversion_file
645export LOCALVERSION="${KERNEL_LOCALVERSION}"
646
633kernel_do_configure() { 647kernel_do_configure() {
634 # fixes extra + in /lib/modules/2.6.37+ 648 # fixes extra + in /lib/modules/2.6.37+
635 # $ scripts/setlocalversion . => + 649 # $ scripts/setlocalversion . => +
diff --git a/meta/classes/kernelsrc.bbclass b/meta/classes/kernelsrc.bbclass
index a951ba3325..a79bf18b09 100644
--- a/meta/classes/kernelsrc.bbclass
+++ b/meta/classes/kernelsrc.bbclass
@@ -5,6 +5,7 @@ do_patch[depends] += "virtual/kernel:do_shared_workdir"
5do_patch[noexec] = "1" 5do_patch[noexec] = "1"
6do_package[depends] += "virtual/kernel:do_populate_sysroot" 6do_package[depends] += "virtual/kernel:do_populate_sysroot"
7KERNEL_VERSION = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}" 7KERNEL_VERSION = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}"
8LOCAL_VERSION = "${@get_kernellocalversion_file("${STAGING_KERNEL_BUILDDIR}")}"
8 9
9inherit linux-kernel-base 10inherit linux-kernel-base
10 11
diff --git a/meta/classes/linux-kernel-base.bbclass b/meta/classes/linux-kernel-base.bbclass
index 73a6fe36d9..0e2a4a4abe 100644
--- a/meta/classes/linux-kernel-base.bbclass
+++ b/meta/classes/linux-kernel-base.bbclass
@@ -33,6 +33,17 @@ def get_kernelversion_file(p):
33 except IOError: 33 except IOError:
34 return None 34 return None
35 35
36def get_kernellocalversion_file(p):
37 fn = p + '/kernel-localversion'
38
39 try:
40 with open(fn, 'r') as f:
41 return f.readlines()[0].strip()
42 except IOError:
43 return ""
44
45 return ""
46
36def linux_module_packages(s, d): 47def linux_module_packages(s, d):
37 suffix = "" 48 suffix = ""
38 return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split())) 49 return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split()))
diff --git a/meta/classes/module-base.bbclass b/meta/classes/module-base.bbclass
index 27bd69ff33..5b2fde8144 100644
--- a/meta/classes/module-base.bbclass
+++ b/meta/classes/module-base.bbclass
@@ -14,6 +14,7 @@ export CROSS_COMPILE = "${TARGET_PREFIX}"
14export KBUILD_OUTPUT = "${STAGING_KERNEL_BUILDDIR}" 14export KBUILD_OUTPUT = "${STAGING_KERNEL_BUILDDIR}"
15 15
16export KERNEL_VERSION = "${@oe.utils.read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}" 16export KERNEL_VERSION = "${@oe.utils.read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}"
17export LOCALVERSION = "${@oe.utils.read_file('${STAGING_KERNEL_BUILDDIR}/kernel-localversion')}"
17KERNEL_OBJECT_SUFFIX = ".ko" 18KERNEL_OBJECT_SUFFIX = ".ko"
18 19
19# kernel modules are generally machine specific 20# kernel modules are generally machine specific
diff --git a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
index f6f47cfff5..8727d003f9 100644
--- a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
+++ b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
@@ -21,6 +21,9 @@ DEPENDS += "gmp-native"
21EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}"" 21EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}""
22EXTRA_OEMAKE += " HOSTCXX="${BUILD_CXX} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CROSS_COMPILE=${TARGET_PREFIX}" 22EXTRA_OEMAKE += " HOSTCXX="${BUILD_CXX} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CROSS_COMPILE=${TARGET_PREFIX}"
23 23
24KERNEL_LOCALVERSION = "${@get_kernellocalversion_file("${STAGING_KERNEL_BUILDDIR}")}"
25export LOCALVERSION="${KERNEL_LOCALVERSION}"
26
24# Build some host tools under work-shared. CC, LD, and AR are probably 27# Build some host tools under work-shared. CC, LD, and AR are probably
25# not used, but this is the historical way of invoking "make scripts". 28# not used, but this is the historical way of invoking "make scripts".
26# 29#