[OE-core] [PATCH RFC 1/1] kernel.bbclass: Add kernel_version_sanity_check function

Bruce Ashfield bruce.ashfield at gmail.com
Thu Aug 25 14:54:35 UTC 2016


On Wed, Aug 17, 2016 at 1:25 AM, California Sullivan <
california.l.sullivan at intel.com> wrote:

> The kernel being built should match what the recipe claims it is
> building. This function ensures that happens for anyone using
> LINUX_VERSION as they should. As it will likely break outside kernels
> not using LINUX_VERSION, only enable the function for linux-yocto for
> now.
>
> Signed-off-by: California Sullivan <california.l.sullivan at intel.com>
> ---
> I'm not absolutely sure this is the correct path to solve the issue.
> This patch relies on LINUX_VERSION being set which isn't a guarantee.
> There is probably a more general solution that I'm not thinking of.
>

I can't say that I know of all the options either, but I can ask questions
and perhaps
others will have more ideas.


>
>  meta/classes/kernel.bbclass               | 21 +++++++++++++++++++++
>  meta/recipes-kernel/linux/linux-yocto.inc |  1 +
>  2 files changed, 22 insertions(+)
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index db42744..ac2611f 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -330,6 +330,27 @@ kernel_do_install() {
>  }
>  do_install[prefuncs] += "package_get_auto_pr"
>
> +# Must be ran some time after do_kernel_checkout or else Makefile won't
> be in ${S}/Makefile
> +do_kernel_version_sanity_check() {
> +       # The Makefile determines the kernel version shown at runtime
> +       # Don't use KERNEL_VERSION because the headers it grabs the
> version from aren't generated until do_compile
>
+       VERSION=$(grep "^VERSION =" ${S}/Makefile | sed s/.*=\ //)
> +       PATCHLEVEL=$(grep "^PATCHLEVEL =" ${S}/Makefile | sed s/.*=\ //)
> +       SUBLEVEL=$(grep "^SUBLEVEL =" ${S}/Makefile | sed s/.*=\ //)
>

I was also trying to think of a way to avoid duplicating code that is
yanking out version
numbers, but yes if we depend on utsrelease, we also have to do some level
of
building .. but that can actually be pretty lightweight.

Have you tried just invoking the prepare1 target in the kernel build ? That
should
generate the utsrelease, and not much more.


> +
> +       # If SUBLEVEL is zero or doesn't exist we ignore it as
> VERSION.PATCHLEVEL is normal
> +       if [ -n "${SUBLEVEL}" ] && [ "${SUBLEVEL}" != "0" ]; then
> +               if [ "${VERSION}.${PATCHLEVEL}.${SUBLEVEL}" !=
> "${LINUX_VERSION}" ]; then
> +                       bbfatal "LINUX_VERSION (${LINUX_VERSION}) does not
> match kernel being built (${VERSION}.${PATCHLEVEL}.${SUBLEVEL}).\nTo fix
> this correct the LINUX_VERSION variable in your kernel recipe."
>

I know that I use LINUX_VERSION in the linux-yocto recipes, but it isn't
something
enforced or widespread (as far as I know). Since this is kernel.bbclass
versus kernel-yocto.bbclass
should this be checking against PV versus LINUX_VERSION ? Alternatively,
this could just
move to kernel-yocto.bbclass as we try and make it more general.

Bruce



> +               fi
> +       else
> +               if [ "${VERSION}.${PATCHLEVEL}" != "${LINUX_VERSION}" ];
> then
> +                       bbfatal "LINUX_VERSION (${LINUX_VERSION}) does not
> match kernel being built (${VERSION}.${PATCHLEVEL}).\nTo fix this correct
> the LINUX_VERSION variable in your kernel recipe."
> +               fi
> +       fi
> +       exit 0
> +}
> +
>  addtask shared_workdir after do_compile before do_compile_kernelmodules
>  addtask shared_workdir_setscene
>
> diff --git a/meta/recipes-kernel/linux/linux-yocto.inc
> b/meta/recipes-kernel/linux/linux-yocto.inc
> index 98a48ec..d979662 100644
> --- a/meta/recipes-kernel/linux/linux-yocto.inc
> +++ b/meta/recipes-kernel/linux/linux-yocto.inc
> @@ -55,6 +55,7 @@ do_install_append(){
>  }
>
>  # extra tasks
> +addtask kernel_version_sanity_check after do_kernel_checkout before
> do_compile
>  addtask kernel_link_images after do_compile before do_install
>  addtask validate_branches before do_patch after do_kernel_checkout
>  addtask kernel_configcheck after do_configure before do_compile
> --
> 2.5.5
>
> --
> _______________________________________________
> 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/20160825/efd9e502/attachment-0002.html>


More information about the Openembedded-core mailing list