The kernel source packages are architecture specific. By that, we also
have to encode the architecture in the KERNEL_NAME, if that is not
already implicitly the case (e.g. when building a kernel for a specific
machine).
For the kernel recipes which are generic (like mainline and cip), we
simply extend the PN with -${DISTRO_ARCH}, so bitbake can find the
dependency and instanciate an architecture specific variant.
By that, we also need to adapt the default in test_per_kernel, which
explicitly builds the module for the kernel that corresponds to the
multiconfig target.
RECIPE-API-CHANGELOG.md | 3 +++
doc/user_manual.md | 13 ++++++++++++-
meta-isar/conf/machine/beagleplay.conf | 2 +-
meta-isar/conf/machine/de0-nano-soc.conf | 2 +-
meta-isar/conf/machine/hikey.conf | 2 +-
meta-isar/conf/machine/qemuamd64-cip.conf | 2 +-
meta-isar/conf/machine/sifive-fu540.conf | 2 +-
meta-isar/conf/machine/stm32mp15x.conf | 2 +-
.../recipes-kernel/linux/
linux-cip_4.4.166-cip29.bb | 2 ++
.../recipes-kernel/linux/
linux-mainline_6.12.85.bb | 2 ++
testsuite/citest.py | 2 +-
11 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index 2db05169..15b47cce 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -1175,6 +1175,9 @@ DPKG_ARCH ?= "${DISTRO_ARCH}"
Firmware packages are an exception because they are built for only one architecture.
+**Note**: This rule also applies to kernel packages. Set `KERNEL_NAME` to an
+architecture- or machine-specific name, as appropriate.
+
### Add Hyper-V machine support
A new machine `hyper-v` has been introduced for building images
diff --git a/doc/user_manual.md b/doc/user_manual.md
index dcc3f560..cb47c157 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -628,11 +628,22 @@ For example, in your machine configuration:
```bitbake
KERNEL_NAME = "armmp"
-KERNEL_NAMES = "armmp mainline"
+KERNEL_NAMES = "armmp mainline-arm64"
```
When `KERNEL_NAMES` is set, recipes inheriting the `per-kernel` class will generate variants for each listed kernel. Installation of each must be explicitly handled in the image.
+Kernel source packages contain architecture-specific content. Therefore, builds
+for multiple architectures must publish source packages with distinct names.
+For a kernel built for only one target, the name may remain unchanged.
+
+Generic kernel recipes can append `${DISTRO_ARCH}` to `PN`, to provide the
+kernel for all architectures.
+
+```
+PN .= "-${DISTRO_ARCH}"
+```
+
---
## Add a New Image
diff --git a/meta-isar/conf/machine/beagleplay.conf b/meta-isar/conf/machine/beagleplay.conf
index d030256d..8cefd939 100644
--- a/meta-isar/conf/machine/beagleplay.conf
+++ b/meta-isar/conf/machine/beagleplay.conf
@@ -5,7 +5,7 @@
DISTRO_ARCH ?= "arm64"
-KERNEL_NAME ?= "mainline"
+KERNEL_NAME ?= "mainline-${DISTRO_ARCH}"
IMAGE_FSTYPES ?= "wic"
WKS_FILE ?= "
beagleplay.wks.in"
diff --git a/meta-isar/conf/machine/de0-nano-soc.conf b/meta-isar/conf/machine/de0-nano-soc.conf
index 78f841df..7059822a 100644
--- a/meta-isar/conf/machine/de0-nano-soc.conf
+++ b/meta-isar/conf/machine/de0-nano-soc.conf
@@ -5,7 +5,7 @@
DISTRO_ARCH ?= "armhf"
-KERNEL_NAME ?= "mainline"
+KERNEL_NAME ?= "mainline-${DISTRO_ARCH}"
U_BOOT_CONFIG:de0-nano-soc = "socfpga_de0_nano_soc_defconfig"
U_BOOT_BIN:de0-nano-soc = "u-boot-with-spl.sfp"
diff --git a/meta-isar/conf/machine/hikey.conf b/meta-isar/conf/machine/hikey.conf
index 019e1910..1e696b4d 100644
--- a/meta-isar/conf/machine/hikey.conf
+++ b/meta-isar/conf/machine/hikey.conf
@@ -5,7 +5,7 @@
DISTRO_ARCH = "arm64"
-KERNEL_NAME ?= "mainline"
+KERNEL_NAME ?= "mainline-${DISTRO_ARCH}"
IMAGE_FSTYPES = "wic"
WKS_FILE ?= "hikey"
diff --git a/meta-isar/conf/machine/qemuamd64-cip.conf b/meta-isar/conf/machine/qemuamd64-cip.conf
index e7eaa2d6..9d633362 100644
--- a/meta-isar/conf/machine/qemuamd64-cip.conf
+++ b/meta-isar/conf/machine/qemuamd64-cip.conf
@@ -5,4 +5,4 @@
include conf/machine/qemuamd64.conf
-KERNEL_NAME = "cip"
+KERNEL_NAME = "cip-${DISTRO_ARCH}"
diff --git a/meta-isar/conf/machine/sifive-fu540.conf b/meta-isar/conf/machine/sifive-fu540.conf
index c9bbc57b..07846f99 100644
--- a/meta-isar/conf/machine/sifive-fu540.conf
+++ b/meta-isar/conf/machine/sifive-fu540.conf
@@ -5,7 +5,7 @@
DISTRO_ARCH = "riscv64"
-KERNEL_NAME ?= "mainline"
+KERNEL_NAME ?= "mainline-${DISTRO_ARCH}"
IMAGE_FSTYPES ?= "wic"
WKS_FILE ?= "sifive-fu540"
diff --git a/meta-isar/conf/machine/stm32mp15x.conf b/meta-isar/conf/machine/stm32mp15x.conf
index 7aa410a5..aa453d8f 100644
--- a/meta-isar/conf/machine/stm32mp15x.conf
+++ b/meta-isar/conf/machine/stm32mp15x.conf
@@ -5,7 +5,7 @@
DISTRO_ARCH ?= "armhf"
-KERNEL_NAME ?= "mainline"
+KERNEL_NAME ?= "mainline-${DISTRO_ARCH}"
U_BOOT_CONFIG:stm32mp15x = "stm32mp15_trusted_defconfig"
U_BOOT_BIN:stm32mp15x = "u-boot.stm32"
diff --git a/meta-isar/recipes-kernel/linux/
linux-cip_4.4.166-cip29.bb b/meta-isar/recipes-kernel/linux/
linux-cip_4.4.166-cip29.bb
index e2775c8d..bb196b5a 100644
--- a/meta-isar/recipes-kernel/linux/
linux-cip_4.4.166-cip29.bb
+++ b/meta-isar/recipes-kernel/linux/
linux-cip_4.4.166-cip29.bb
@@ -5,6 +5,8 @@
#
# SPDX-License-Identifier: MIT
+PN .= "-${DISTRO_ARCH}"
+
inherit linux-kernel
SRC_URI += " \
diff --git a/meta-isar/recipes-kernel/linux/
linux-mainline_6.12.85.bb b/meta-isar/recipes-kernel/linux/
linux-mainline_6.12.85.bb
index 11b90127..13c694b0 100644
--- a/meta-isar/recipes-kernel/linux/
linux-mainline_6.12.85.bb
+++ b/meta-isar/recipes-kernel/linux/
linux-mainline_6.12.85.bb
@@ -5,4 +5,6 @@
#
# SPDX-License-Identifier: MIT
+PN .= "-${DISTRO_ARCH}"
+
require recipes-kernel/linux/linux-mainline.inc
diff --git a/testsuite/citest.py b/testsuite/citest.py
index f5d54904..c2ac144a 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -627,7 +627,7 @@ class KernelTests(CIBaseTest):
"""Test per-kernel recipe variants for external kernel modules."""
targets = ['mc:qemuarm64-bookworm:isar-image-ci']
- kernel_names = self.params.get('kernel_names', default='mainline')
+ kernel_names = self.params.get('kernel_names', default='mainline-arm64')
kernel_names = [k.strip() for k in kernel_names.split(',') if k.strip()]
modules = [f"example-module-{k}" for k in kernel_names]
modules.append('example-module-${KERNEL_NAME}')
--
2.55.0