On Wed, Jun 21, 2017 at 8:00 AM, Heghedus Razvan <razvan.heghe...@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.heghe...@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@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"
-- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core