<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 14, 2015 at 2:06 PM, Haris Okanovic <span dir="ltr"><<a href="mailto:haris.okanovic@ni.com" target="_blank">haris.okanovic@ni.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Gratian Crisan <<a href="mailto:gratian.crisan@ni.com">gratian.crisan@ni.com</a>><br>
<br>
Templetize kernel package name:<br>
<br>
Add a "weak" variable KERNEL_PACKAGE_NAME used as the base name for kernel<br>
packages. It defaults to the old hard-coded name 'kernel' but it can be<br>
redefined by recipes that provide additional kernel packages in order<br>
to avoid build conflicts.<br>
<br>
Change hard-coded 'kernel' references to KERNEL_PACKAGE_NAME in<br>
kernel bbclass-es.<br>
<br>
Build alternate kernels from WORKDIR instead of STAGING_KERNEL_DIR:<br>
<br>
Prior to this change, kernel recipes would all fetch source to<br>
STAGING_KERNEL_DIR as defined by bitbake/distro confs. This broke<br>
parallel builds when more than one kernel recipes are defined in<br>
the distribution, since they all attempted to fetch() and patch()<br>
in a shared source dir.<br>
<br>
With this change, alternate kernel recipes fetch source into their<br>
${WORKDIR} so that they may build in parallel to each other and the<br>
default kernel recipe, which still fetches to STAGING_KERNEL_DIR.<br></blockquote><div><br><br></div><div>But what's the system level use case for this capability ? Honestly, it just<br></div><div>looks complicated .. and I'm not seeing exactly multiple kernels are being<br></div><div>built in parallel in a single build. We've been forcing everything explicitly<br></div><div>to be in a single, shared location .. and I see that this is both complicating<br></div><div>and a possible source of errors.<br><br></div><div>It's probably that I'm just misunderstanding the point of the change.<br><br></div><div>If I had to guess, you are building recovery, or kexec/kdump kernels along<br></div><div>side the main kernel ?<br></div><div><br></div><div>Cheers,<br><br></div><div>Bruce<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Testing:<br>
<br>
Built linux-yocto-4.1.13 for qemux86 and verified it produced kernel<br>
image and modules packages. Added kernel recipe with non-default<br>
KERNEL_PACKAGE_NAME and verified it produces kernel image and modules<br>
packages with alternate name next to default kernel.<br>
<br>
Signed-off-by: Gratian Crisan <<a href="mailto:gratian.crisan@ni.com">gratian.crisan@ni.com</a>><br>
Signed-off-by: Haris Okanovic <<a href="mailto:haris.okanovic@ni.com">haris.okanovic@ni.com</a>><br>
Coauthored-by: Haris Okanovic <<a href="mailto:haris.okanovic@ni.com">haris.okanovic@ni.com</a>><br>
Coauthored-by: Josh Hernstrom <<a href="mailto:josh.hernstrom@ni.com">josh.hernstrom@ni.com</a>><br>
Natinst-ReviewBoard-ID: 120348<br>
Natinst-ReviewBoard-ID: 120447<br>
---<br>
meta/classes/kernel-module-split.bbclass | 9 ++--<br>
meta/classes/kernel.bbclass | 71 ++++++++++++++++++--------------<br>
meta/conf/documentation.conf | 1 +<br>
meta/recipes-kernel/linux/linux-dtb.inc | 2 +-<br>
4 files changed, 49 insertions(+), 34 deletions(-)<br>
<br>
diff --git a/meta/classes/kernel-module-split.bbclass b/meta/classes/kernel-module-split.bbclass<br>
index e1a70e6..7415ec8 100644<br>
--- a/meta/classes/kernel-module-split.bbclass<br>
+++ b/meta/classes/kernel-module-split.bbclass<br>
@@ -28,7 +28,7 @@ do_install_append() {<br>
<br>
PACKAGESPLITFUNCS_prepend = "split_kernel_module_packages "<br>
<br>
-KERNEL_MODULES_META_PACKAGE ?= "kernel-modules"<br>
+KERNEL_MODULES_META_PACKAGE ?= "${KERNEL_PACKAGE_NAME}-modules"<br>
<br>
python split_kernel_module_packages () {<br>
import re<br>
@@ -179,14 +179,17 @@ python split_kernel_module_packages () {<br>
# Avoid automatic -dev recommendations for modules ending with -dev.<br>
d.setVarFlag('RRECOMMENDS_' + pkg, 'nodeprrecs', 1)<br>
<br>
+ kernel_package_name = d.getVar("KERNEL_PACKAGE_NAME", True)<br>
+ kernel_version = d.getVar("KERNEL_VERSION", True)<br>
+<br>
module_deps = parse_depmod()<br>
module_regex = '^(.*)\.k?o$'<br>
- module_pattern = 'kernel-module-%s'<br>
+ module_pattern = '%s-module-%%s' % kernel_package_name<br>
<br>
postinst = d.getVar('pkg_postinst_modules', True)<br>
postrm = d.getVar('pkg_postrm_modules', True)<br>
<br>
- modules = do_split_packages(d, root='/lib/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='kernel-%s' % (d.getVar("KERNEL_VERSION", True)))<br>
+ modules = do_split_packages(d, root='/lib/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='%s-%s' % (kernel_package_name, kernel_version))<br>
if modules:<br>
metapkg = d.getVar('KERNEL_MODULES_META_PACKAGE', True)<br>
d.appendVar('RDEPENDS_' + metapkg, ' '+' '.join(modules))<br>
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass<br>
index b75a462..cc27364 100644<br>
--- a/meta/classes/kernel.bbclass<br>
+++ b/meta/classes/kernel.bbclass<br>
@@ -3,7 +3,6 @@ inherit linux-kernel-base kernel-module-split<br>
PROVIDES += "virtual/kernel"<br>
DEPENDS += "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}gcc kmod-native depmodwrapper-cross bc-native"<br>
<br>
-S = "${STAGING_KERNEL_DIR}"<br>
B = "${WORKDIR}/build"<br>
KBUILD_OUTPUT = "${B}"<br>
OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"<br>
@@ -11,6 +10,7 @@ OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"<br>
# we include gcc above, we dont need virtual/libc<br>
INHIBIT_DEFAULT_DEPS = "1"<br>
<br>
+KERNEL_PACKAGE_NAME ??= "kernel"<br>
KERNEL_IMAGETYPE ?= "zImage"<br>
INITRAMFS_IMAGE ?= ""<br>
INITRAMFS_TASK ?= ""<br>
@@ -34,6 +34,17 @@ python __anonymous () {<br>
image_task = d.getVar('INITRAMFS_TASK', True)<br>
if image_task:<br>
d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')<br>
+<br>
+ # The default kernel recipe fetches it's source to<br>
+ # STAGING_KERNEL_DIR as defined by bitbake/distro confs.<br>
+ # Alternate kernel recipes (E.g. debug kernels) fetch source into<br>
+ # their work dir so that they may build in parallel.<br>
+ if d.getVar("KERNEL_PACKAGE_NAME", True) == "kernel":<br>
+ d.setVar("S", d.getVar("STAGING_KERNEL_DIR", True))<br>
+ else:<br>
+ workdir = d.getVar("WORKDIR", True)<br>
+ kernelSourceDir = os.path.join(workdir, 'kernel-source')<br>
+ d.setVar("S", kernelSourceDir)<br>
}<br>
<br>
# Here we pull in all various kernel image types which we support.<br>
@@ -79,9 +90,9 @@ base_do_unpack_append () {<br>
<br>
inherit kernel-arch deploy<br>
<br>
-PACKAGES_DYNAMIC += "^kernel-module-.*"<br>
-PACKAGES_DYNAMIC += "^kernel-image-.*"<br>
-PACKAGES_DYNAMIC += "^kernel-firmware-.*"<br>
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-module-.*"<br>
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-image-.*"<br>
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-firmware-.*"<br>
<br>
export OS = "${TARGET_OS}"<br>
export CROSS_COMPILE = "${TARGET_PREFIX}"<br>
@@ -270,9 +281,9 @@ do_shared_workdir_setscene () {<br>
<br>
emit_depmod_pkgdata() {<br>
# Stash data for depmod<br>
- install -d ${PKGDESTWORK}/kernel-depmod/<br>
- echo "${KERNEL_VERSION}" > ${PKGDESTWORK}/kernel-depmod/kernel-abiversion<br>
- cp ${B}/System.map ${PKGDESTWORK}/kernel-depmod/System.map-${KERNEL_VERSION}<br>
+ install -d ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/<br>
+ echo "${KERNEL_VERSION}" > ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/${KERNEL_PACKAGE_NAME}-abiversion<br>
+ cp ${B}/System.map ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/System.map-${KERNEL_VERSION}<br>
}<br>
<br>
PACKAGEFUNCS += "emit_depmod_pkgdata"<br>
@@ -287,7 +298,7 @@ do_shared_workdir () {<br>
# Store the kernel version in sysroots for module-base.bbclass<br>
#<br>
<br>
- echo "${KERNEL_VERSION}" > $kerneldir/kernel-abiversion<br>
+ echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion<br>
<br>
# Copy files required for module builds<br>
cp System.map $kerneldir/System.map-${KERNEL_VERSION}<br>
@@ -361,28 +372,28 @@ EXPORT_FUNCTIONS do_compile do_install do_configure<br>
<br>
# kernel-base becomes kernel-${KERNEL_VERSION}<br>
# kernel-image becomes kernel-image-${KERNEL_VERISON}<br>
-PACKAGES = "kernel kernel-base kernel-vmlinux kernel-image kernel-dev kernel-modules"<br>
+PACKAGES = "${KERNEL_PACKAGE_NAME} ${KERNEL_PACKAGE_NAME}-base ${KERNEL_PACKAGE_NAME}-vmlinux ${KERNEL_PACKAGE_NAME}-image ${KERNEL_PACKAGE_NAME}-dev ${KERNEL_PACKAGE_NAME}-modules"<br>
FILES_${PN} = ""<br>
-FILES_kernel-base = "/lib/modules/${KERNEL_VERSION}/modules.order /lib/modules/${KERNEL_VERSION}/modules.builtin"<br>
-FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"<br>
-FILES_kernel-dev = "/boot/System.map* /boot/Module.symvers* /boot/config* ${KERNEL_SRC_PATH} /lib/modules/${KERNEL_VERSION}/build"<br>
-FILES_kernel-vmlinux = "/boot/vmlinux*"<br>
-FILES_kernel-modules = ""<br>
-RDEPENDS_kernel = "kernel-base"<br>
+FILES_${KERNEL_PACKAGE_NAME}-base = "/lib/modules/${KERNEL_VERSION}/modules.order /lib/modules/${KERNEL_VERSION}/modules.builtin"<br>
+FILES_${KERNEL_PACKAGE_NAME}-image = "/boot/${KERNEL_IMAGETYPE}*"<br>
+FILES_${KERNEL_PACKAGE_NAME}-dev = "/boot/System.map* /boot/Module.symvers* /boot/config* ${KERNEL_SRC_PATH} /lib/modules/${KERNEL_VERSION}/build"<br>
+FILES_${KERNEL_PACKAGE_NAME}-vmlinux = "/boot/vmlinux*"<br>
+FILES_${KERNEL_PACKAGE_NAME}-modules = ""<br>
+RDEPENDS_${KERNEL_PACKAGE_NAME} = "${KERNEL_PACKAGE_NAME}-base"<br>
# Allow machines to override this dependency if kernel image files are<br>
# not wanted in images as standard<br>
-RDEPENDS_kernel-base ?= "kernel-image"<br>
-PKG_kernel-image = "kernel-image-${@legitimize_package_name('${KERNEL_VERSION}')}"<br>
-RDEPENDS_kernel-image += "${@base_conditional('KERNEL_IMAGETYPE', 'vmlinux', 'kernel-vmlinux', '', d)}"<br>
-PKG_kernel-base = "kernel-${@legitimize_package_name('${KERNEL_VERSION}')}"<br>
-RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"<br>
-ALLOW_EMPTY_kernel = "1"<br>
-ALLOW_EMPTY_kernel-base = "1"<br>
-ALLOW_EMPTY_kernel-image = "1"<br>
-ALLOW_EMPTY_kernel-modules = "1"<br>
-DESCRIPTION_kernel-modules = "Kernel modules meta package"<br>
-<br>
-pkg_postinst_kernel-base () {<br>
+RDEPENDS_${KERNEL_PACKAGE_NAME}-base ?= "${KERNEL_PACKAGE_NAME}-image"<br>
+PKG_${KERNEL_PACKAGE_NAME}-image = "${KERNEL_PACKAGE_NAME}-image-${@legitimize_package_name('${KERNEL_VERSION}')}"<br>
+RDEPENDS_${KERNEL_PACKAGE_NAME}-image += "${@base_conditional('KERNEL_IMAGETYPE', 'vmlinux', '${KERNEL_PACKAGE_NAME}-vmlinux', '', d)}"<br>
+PKG_${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-${@legitimize_package_name('${KERNEL_VERSION}')}"<br>
+RPROVIDES_${KERNEL_PACKAGE_NAME}-base += "${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION}"<br>
+ALLOW_EMPTY_${KERNEL_PACKAGE_NAME} = "1"<br>
+ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-base = "1"<br>
+ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-image = "1"<br>
+ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-modules = "1"<br>
+DESCRIPTION_${KERNEL_PACKAGE_NAME}-modules = "Kernel modules meta package"<br>
+<br>
+pkg_postinst_${KERNEL_PACKAGE_NAME}-base () {<br>
if [ ! -e "$D/lib/modules/${KERNEL_VERSION}" ]; then<br>
mkdir -p $D/lib/modules/${KERNEL_VERSION}<br>
fi<br>
@@ -393,18 +404,18 @@ pkg_postinst_kernel-base () {<br>
fi<br>
}<br>
<br>
-pkg_postinst_kernel-image () {<br>
+pkg_postinst_${KERNEL_PACKAGE_NAME}-image () {<br>
update-alternatives --install /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE} /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true<br>
}<br>
<br>
-pkg_postrm_kernel-image () {<br>
+pkg_postrm_${KERNEL_PACKAGE_NAME}-image () {<br>
update-alternatives --remove ${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE}-${KERNEL_VERSION} || true<br>
}<br>
<br>
PACKAGESPLITFUNCS_prepend = "split_kernel_packages "<br>
<br>
python split_kernel_packages () {<br>
- do_split_packages(d, root='/lib/firmware', file_regex='^(.*)\.(bin|fw|cis|dsp)$', output_pattern='kernel-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')<br>
+ do_split_packages(d, root='/lib/firmware', file_regex='^(.*)\.(bin|fw|cis|dsp)$', output_pattern='${KERNEL_PACKAGE_NAME}-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')<br>
}<br>
<br>
do_strip() {<br>
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf<br>
index 1b5c071..fb5e03f 100644<br>
--- a/meta/conf/documentation.conf<br>
+++ b/meta/conf/documentation.conf<br>
@@ -250,6 +250,7 @@ KERNEL_FEATURES[doc] = "Includes additional metadata from the Yocto Project kern<br>
KERNEL_IMAGETYPE[doc] = "The type of kernel to build for a device, usually set by the machine configuration files and defaults to 'zImage'."<br>
KERNEL_MODULE_AUTOLOAD[doc] = "Lists kernel modules that need to be auto-loaded during boot"<br>
KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system expects to find module_conf_* values that specify configuration for each of the modules"<br>
+KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults to 'kernel'."<br>
KERNEL_PATH[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."<br>
KERNEL_SRC[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."<br>
KFEATURE_DESCRIPTION[doc] = "Provides a short description of a configuration fragment. You use this variable in the .scc file that describes a configuration fragment file."<br>
diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc<br>
index 772adcb..c27a3cb 100644<br>
--- a/meta/recipes-kernel/linux/linux-dtb.inc<br>
+++ b/meta/recipes-kernel/linux/linux-dtb.inc<br>
@@ -2,7 +2,7 @@<br>
FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/devicetree*"<br>
<br>
python __anonymous () {<br>
- d.appendVar("PACKAGES", " kernel-devicetree")<br>
+ d.appendVar("PACKAGES", " ${KERNEL_PACKAGE_NAME}-devicetree")<br>
}<br>
<br>
normalize_dtb () {<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.6.2<br>
<br>
--<br>
_______________________________________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>
<a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">"Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end"</div>
</div></div>