[OE-core] [PATCH 1/2] kernel: add package version in dependencies for kernel packages

Bruce Ashfield bruce.ashfield at gmail.com
Mon Jun 26 15:50:54 UTC 2017


On Wed, Jun 21, 2017 at 8:00 AM, Heghedus Razvan <razvan.heghedus at ni.com>
wrote:

> Make all dependencies from kernel family packages which depend
> on another kernel related package to depend on the same version.
> This creates a consistent state where kernel, kernel images and
> kernel modules have the same version, making a kernel upgrade
> leading to upgrades of the image and modules.
>
> The upgrade works only if the KERNEL_VERSION_PKG_NAME remains
> the same for the newer versions.
>
> Signed-off-by: Heghedus Razvan <razvan.heghedus at ni.com>
> ---
>  meta/classes/kernel-module-split.bbclass  |  7 ++++---
>  meta/classes/kernel.bbclass               | 15 +++++++++------
>  meta/recipes-kernel/linux/linux-yocto.inc |  4 ++++
>  3 files changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/meta/classes/kernel-module-split.bbclass
> b/meta/classes/kernel-module-split.bbclass
> index 5e10dcf735..e247e66901 100644
> --- a/meta/classes/kernel-module-split.bbclass
> +++ b/meta/classes/kernel-module-split.bbclass
> @@ -33,7 +33,7 @@ PACKAGESPLITFUNCS_prepend =
> "split_kernel_module_packages "
>  KERNEL_MODULES_META_PACKAGE ?= "kernel-modules"
>
>  KERNEL_MODULE_PACKAGE_PREFIX ?= ""
> -KERNEL_MODULE_PACKAGE_SUFFIX ?= "-${KERNEL_VERSION}"
> +KERNEL_MODULE_PACKAGE_SUFFIX ?= "-${KERNEL_VERSION_PKG_NAME}"
>  KERNEL_MODULE_PROVIDE_VIRTUAL ?= "1"
>
>  python split_kernel_module_packages () {
> @@ -114,6 +114,7 @@ python split_kernel_module_packages () {
>              for dep in vals["depends"].split(","):
>                  on = legitimize_package_name(dep)
>                  dependency_pkg = format % on
> +                dependency_pkg += ' ${@get_full_package_version(d)}'
>                  modinfo_deps.append(dependency_pkg)
>          for dep in modinfo_deps:
>              if not dep in rdepends:
> @@ -138,10 +139,10 @@ python split_kernel_module_packages () {
>      postinst = d.getVar('pkg_postinst_modules')
>      postrm = d.getVar('pkg_postrm_modules')
>
> -    modules = do_split_packages(d, root='${nonarch_base_libdir}/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")))
> +    modules = do_split_packages(d, root='${nonarch_base_libdir}/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 %s' %
> (d.getVar("KERNEL_VERSION_PKG_NAME"), get_full_package_version(d)))
>      if modules:
>          metapkg = d.getVar('KERNEL_MODULES_META_PACKAGE')
> -        d.appendVar('RDEPENDS_' + metapkg, ' '+' '.join(modules))
> +        d.appendVar('RDEPENDS_' + metapkg, ' '+' '.join(['{0}
> {1}'.format(module, get_full_package_version(d)) for module in modules]))
>
>      # If modules-load.d and modprobe.d are empty at this point, remove
> them to
>      # avoid warnings. removedirs only raises an OSError if an empty
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 7a134d5c29..605c101e62 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -55,7 +55,7 @@ python __anonymous () {
>
>          d.setVar('FILES_kernel-image-' + typelower, '/' + imagedest + '/'
> + type + '-${KERNEL_VERSION_NAME}')
>
> -        d.appendVar('RDEPENDS_kernel-image', ' ' + 'kernel-image-' +
> typelower)
> +        d.appendVar('RDEPENDS_kernel-image', ' ' + 'kernel-image-' +
> typelower + ' ${@get_full_package_version(d)}')
>
>          d.setVar('PKG_kernel-image-' + typelower, 'kernel-image-' +
> typelower + '-${KERNEL_VERSION_PKG_NAME}')
>
> @@ -493,14 +493,17 @@ FILES_kernel-image = ""
>  FILES_kernel-dev = "/boot/System.map* /boot/Module.symvers* /boot/config*
> ${KERNEL_SRC_PATH} ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
>  FILES_kernel-vmlinux = "/boot/vmlinux-${KERNEL_VERSION_NAME}"
>  FILES_kernel-modules = ""
> -RDEPENDS_kernel = "kernel-base"
> +RDEPENDS_kernel = "kernel-base ${@get_full_package_version(d)}"
>

Is that really supposed to be a space, between kernel-base and the package
version
call ? I guess so, since I see the same thing below in the
RDEPENDS_kernel-base
line below .. but it just reads strange to me.  i.e. if that's a RDEPENDS,
where is the
package get_full_package_version(d) created ?

Are you trying to set a generic versionless RDEPENDS and a versioned one
that doesn't
contain 'kernel-' in the name ?


>  # Allow machines to override this dependency if kernel image files are
>  # not wanted in images as standard
> -RDEPENDS_kernel-base ?= "kernel-image"
> -PKG_kernel-image = "kernel-image-${@legitimize_package_name('${KERNEL_
> VERSION}')}"
> +RDEPENDS_kernel-base ?= "kernel-image ${@get_full_package_version(d)}"
> +PKG_kernel-image = "kernel-image-${KERNEL_VERSION_PKG_NAME}"
>  RDEPENDS_kernel-image += "${@base_conditional('KERNEL_IMAGETYPE',
> 'vmlinux', 'kernel-vmlinux', '', d)}"
> -PKG_kernel-base = "kernel-${@legitimize_package_
> name('${KERNEL_VERSION}')}"
> -RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
> +PKG_kernel-base = "kernel-${KERNEL_VERSION_PKG_NAME}"
> +RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION_PKG_NAME}"
> +PKG_kernel-vmlinux = "kernel-vmlinux-${KERNEL_VERSION_PKG_NAME}"
>
+PKG_kernel-modules = "kernel-modules-${KERNEL_VERSION_PKG_NAME}"
> +PKG_kernel-dev = "kernel-dev-${KERNEL_VERSION_PKG_NAME}"
>  ALLOW_EMPTY_kernel = "1"
>  ALLOW_EMPTY_kernel-base = "1"
>  ALLOW_EMPTY_kernel-image = "1"
> diff --git a/meta/recipes-kernel/linux/linux-yocto.inc
> b/meta/recipes-kernel/linux/linux-yocto.inc
> index 637506a2a8..c3d1284ad2 100644
> --- a/meta/recipes-kernel/linux/linux-yocto.inc
> +++ b/meta/recipes-kernel/linux/linux-yocto.inc
> @@ -67,3 +67,7 @@ do_install_append(){
>  addtask kernel_version_sanity_check after do_kernel_metadata
> do_kernel_checkout before do_compile
>  addtask validate_branches before do_patch after do_kernel_checkout
>  addtask kernel_configcheck after do_configure before do_compile
> +
> +def get_full_package_version(d):
> +    return "(= " + d.getVar("PKGV") + "-" + d.getVar("PKGR") + ")"
>

This doesn't belong in linux-yocto.inc, since it is called in
kernel.bbclass. It needs to be in the base
class and have a namespace that indicates it is specific to the kernel.

Bruce


> +
> --
> 2.13.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20170626/5178eb3e/attachment-0002.html>


More information about the Openembedded-core mailing list