diff mbox series

kernel.bbclass: introduce KERNEL_LOCALVERSION

Message ID 20230530170949.12045-1-liu.ming50@gmail.com
State Accepted, archived
Commit 229435a52f36ddec5f85fb6d5ccd42044b688397
Headers show
Series kernel.bbclass: introduce KERNEL_LOCALVERSION | expand

Commit Message

Ming Liu May 30, 2023, 5:09 p.m. UTC
From: Ming Liu <liu.ming50@gmail.com>

Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
to append a string to the name of the local version of the kernel
image.

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
---
 meta/classes-recipe/kernel.bbclass | 10 +++++-----
 meta/conf/documentation.conf       |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

Comments

Bruce Ashfield May 30, 2023, 5:21 p.m. UTC | #1
On Tue, May 30, 2023 at 1:10 PM Ming Liu <liu.ming50@gmail.com> wrote:
>
> From: Ming Liu <liu.ming50@gmail.com>
>
> Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
> to append a string to the name of the local version of the kernel
> image.
>
> Signed-off-by: Ming Liu <liu.ming50@gmail.com>
> ---
>  meta/classes-recipe/kernel.bbclass | 10 +++++-----
>  meta/conf/documentation.conf       |  1 +
>  2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
> index e634eabd49..3dd139eda9 100644
> --- a/meta/classes-recipe/kernel.bbclass
> +++ b/meta/classes-recipe/kernel.bbclass
> @@ -616,6 +616,7 @@ do_shared_workdir () {
>  # We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
>  SYSROOT_DIRS = ""
>
> +KERNEL_LOCALVERSION ??= ""
>  KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
>
>  python check_oldest_kernel() {
> @@ -633,11 +634,10 @@ check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
>  do_configure[prefuncs] += "check_oldest_kernel"
>
>  kernel_do_configure() {
> -       # fixes extra + in /lib/modules/2.6.37+
> -       # $ scripts/setlocalversion . => +
> -       # $ make kernelversion => 2.6.37
> -       # $ make kernelrelease => 2.6.37+

Those comments are still valid.

> -       touch ${B}/.scmversion ${S}/.scmversion
> +       if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
> +               echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
> +               echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
> +       fi

You've confirmed that the result is the same as the touches previously
did when that variable isn't set ?

Bruce

>
>         if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
>                 mv "${S}/.config" "${B}/.config"
> diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
> index a27d7a53c3..66b8e2f24f 100644
> --- a/meta/conf/documentation.conf
> +++ b/meta/conf/documentation.conf
> @@ -253,6 +253,7 @@ KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system
>  KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults to 'kernel'."
>  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)."
>  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)."
> +KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the local version of the kernel image."
>  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."
>  KMACHINE[doc] = "The machine as known by the kernel."
>  KTYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
> --
> 2.25.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#181939): https://lists.openembedded.org/g/openembedded-core/message/181939
> Mute This Topic: https://lists.openembedded.org/mt/99224358/1050810
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [bruce.ashfield@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Ming Liu May 30, 2023, 7:58 p.m. UTC | #2
Hi, Bruce:

Please see my answers as below:

> You've confirmed that the result is the same as the touches previously
did when that variable isn't set ?

Yes, I have verified that on a qemuarm64 machine.

> Those comments are still valid

I think after we introduce KERNEL_LOCALVERSION, then we generate
the .scmversion on purpose, not as a workaround or fix so those comments
not valid any more?

the best,
thank you


Bruce Ashfield <bruce.ashfield@gmail.com> 於 2023年5月30日 週二 下午7:21寫道:

> On Tue, May 30, 2023 at 1:10 PM Ming Liu <liu.ming50@gmail.com> wrote:
> >
> > From: Ming Liu <liu.ming50@gmail.com>
> >
> > Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
> > to append a string to the name of the local version of the kernel
> > image.
> >
> > Signed-off-by: Ming Liu <liu.ming50@gmail.com>
> > ---
> >  meta/classes-recipe/kernel.bbclass | 10 +++++-----
> >  meta/conf/documentation.conf       |  1 +
> >  2 files changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/meta/classes-recipe/kernel.bbclass
> b/meta/classes-recipe/kernel.bbclass
> > index e634eabd49..3dd139eda9 100644
> > --- a/meta/classes-recipe/kernel.bbclass
> > +++ b/meta/classes-recipe/kernel.bbclass
> > @@ -616,6 +616,7 @@ do_shared_workdir () {
> >  # We don't need to stage anything, not the modules/firmware since those
> would clash with linux-firmware
> >  SYSROOT_DIRS = ""
> >
> > +KERNEL_LOCALVERSION ??= ""
> >  KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig
> || oe_runmake -C ${S} O=${B} oldnoconfig"
> >
> >  python check_oldest_kernel() {
> > @@ -633,11 +634,10 @@ check_oldest_kernel[vardepsexclude] +=
> "OLDEST_KERNEL KERNEL_VERSION"
> >  do_configure[prefuncs] += "check_oldest_kernel"
> >
> >  kernel_do_configure() {
> > -       # fixes extra + in /lib/modules/2.6.37+
> > -       # $ scripts/setlocalversion . => +
> > -       # $ make kernelversion => 2.6.37
> > -       # $ make kernelrelease => 2.6.37+
>
> Those comments are still valid.
>
> > -       touch ${B}/.scmversion ${S}/.scmversion
> > +       if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
> > +               echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
> > +               echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
> > +       fi
>
> You've confirmed that the result is the same as the touches previously
> did when that variable isn't set ?
>
> Bruce
>
> >
> >         if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f
> "${B}/.config" ]; then
> >                 mv "${S}/.config" "${B}/.config"
> > diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
> > index a27d7a53c3..66b8e2f24f 100644
> > --- a/meta/conf/documentation.conf
> > +++ b/meta/conf/documentation.conf
> > @@ -253,6 +253,7 @@ KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules
> for which the build system
> >  KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults
> to 'kernel'."
> >  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)."
> >  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)."
> > +KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the local
> version of the kernel image."
> >  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."
> >  KMACHINE[doc] = "The machine as known by the kernel."
> >  KTYPE[doc] = "Defines the kernel type to be used in assembling the
> configuration."
> > --
> > 2.25.1
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#181939):
> https://lists.openembedded.org/g/openembedded-core/message/181939
> > Mute This Topic: https://lists.openembedded.org/mt/99224358/1050810
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> bruce.ashfield@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>
>
> --
> - Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end
> - "Use the force Harry" - Gandalf, Star Trek II
>
Bruce Ashfield May 30, 2023, 8:09 p.m. UTC | #3
On Tue, May 30, 2023 at 3:58 PM Ming Liu <liu.ming50@gmail.com> wrote:
>
> Hi, Bruce:
>
> Please see my answers as below:
>
> > You've confirmed that the result is the same as the touches previously did when that variable isn't set ?
>
> Yes, I have verified that on a qemuarm64 machine.
>
> > Those comments are still valid
>
> I think after we introduce KERNEL_LOCALVERSION, then we generate the .scmversion on purpose, not as a workaround or fix so those comments not valid any more?
>

They are definitely still valid.  The files need to exist, or the +
gets added. Other layers and kernel recipes have been touching and
using those files in their own way, the kernel.bbclass was just a
default to ensure if they didn't handle it, that those noise wouldn't
be generated.

That variable is completely optional, so we are not always generating
it on purpose. Also CONFIG_LOCALVERSION is used by linux-yocto and
other recipes, so the default of empty to ensure that nothing is added
by kbuild is the case, and also makes them valid.

Bruce


> the best,
> thank you
>
>
> Bruce Ashfield <bruce.ashfield@gmail.com> 於 2023年5月30日 週二 下午7:21寫道:
>>
>> On Tue, May 30, 2023 at 1:10 PM Ming Liu <liu.ming50@gmail.com> wrote:
>> >
>> > From: Ming Liu <liu.ming50@gmail.com>
>> >
>> > Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
>> > to append a string to the name of the local version of the kernel
>> > image.
>> >
>> > Signed-off-by: Ming Liu <liu.ming50@gmail.com>
>> > ---
>> >  meta/classes-recipe/kernel.bbclass | 10 +++++-----
>> >  meta/conf/documentation.conf       |  1 +
>> >  2 files changed, 6 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
>> > index e634eabd49..3dd139eda9 100644
>> > --- a/meta/classes-recipe/kernel.bbclass
>> > +++ b/meta/classes-recipe/kernel.bbclass
>> > @@ -616,6 +616,7 @@ do_shared_workdir () {
>> >  # We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
>> >  SYSROOT_DIRS = ""
>> >
>> > +KERNEL_LOCALVERSION ??= ""
>> >  KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
>> >
>> >  python check_oldest_kernel() {
>> > @@ -633,11 +634,10 @@ check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
>> >  do_configure[prefuncs] += "check_oldest_kernel"
>> >
>> >  kernel_do_configure() {
>> > -       # fixes extra + in /lib/modules/2.6.37+
>> > -       # $ scripts/setlocalversion . => +
>> > -       # $ make kernelversion => 2.6.37
>> > -       # $ make kernelrelease => 2.6.37+
>>
>> Those comments are still valid.
>>
>> > -       touch ${B}/.scmversion ${S}/.scmversion
>> > +       if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
>> > +               echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
>> > +               echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
>> > +       fi
>>
>> You've confirmed that the result is the same as the touches previously
>> did when that variable isn't set ?
>>
>> Bruce
>>
>> >
>> >         if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
>> >                 mv "${S}/.config" "${B}/.config"
>> > diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
>> > index a27d7a53c3..66b8e2f24f 100644
>> > --- a/meta/conf/documentation.conf
>> > +++ b/meta/conf/documentation.conf
>> > @@ -253,6 +253,7 @@ KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system
>> >  KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults to 'kernel'."
>> >  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)."
>> >  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)."
>> > +KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the local version of the kernel image."
>> >  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."
>> >  KMACHINE[doc] = "The machine as known by the kernel."
>> >  KTYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
>> > --
>> > 2.25.1
>> >
>> >
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> > Links: You receive all messages sent to this group.
>> > View/Reply Online (#181939): https://lists.openembedded.org/g/openembedded-core/message/181939
>> > Mute This Topic: https://lists.openembedded.org/mt/99224358/1050810
>> > Group Owner: openembedded-core+owner@lists.openembedded.org
>> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [bruce.ashfield@gmail.com]
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> >
>>
>>
>> --
>> - Thou shalt not follow the NULL pointer, for chaos and madness await
>> thee at its end
>> - "Use the force Harry" - Gandalf, Star Trek II
Ming Liu May 30, 2023, 8:11 p.m. UTC | #4
Hi, Bruce:

OK, thanks for the explanation, that makes sense, will add them back in V2.

the best,
thank you

Bruce Ashfield <bruce.ashfield@gmail.com> 於 2023年5月30日 週二 下午10:09寫道:

> On Tue, May 30, 2023 at 3:58 PM Ming Liu <liu.ming50@gmail.com> wrote:
> >
> > Hi, Bruce:
> >
> > Please see my answers as below:
> >
> > > You've confirmed that the result is the same as the touches previously
> did when that variable isn't set ?
> >
> > Yes, I have verified that on a qemuarm64 machine.
> >
> > > Those comments are still valid
> >
> > I think after we introduce KERNEL_LOCALVERSION, then we generate the
> .scmversion on purpose, not as a workaround or fix so those comments not
> valid any more?
> >
>
> They are definitely still valid.  The files need to exist, or the +
> gets added. Other layers and kernel recipes have been touching and
> using those files in their own way, the kernel.bbclass was just a
> default to ensure if they didn't handle it, that those noise wouldn't
> be generated.
>
> That variable is completely optional, so we are not always generating
> it on purpose. Also CONFIG_LOCALVERSION is used by linux-yocto and
> other recipes, so the default of empty to ensure that nothing is added
> by kbuild is the case, and also makes them valid.
>
> Bruce
>
>
> > the best,
> > thank you
> >
> >
> > Bruce Ashfield <bruce.ashfield@gmail.com> 於 2023年5月30日 週二 下午7:21寫道:
> >>
> >> On Tue, May 30, 2023 at 1:10 PM Ming Liu <liu.ming50@gmail.com> wrote:
> >> >
> >> > From: Ming Liu <liu.ming50@gmail.com>
> >> >
> >> > Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
> >> > to append a string to the name of the local version of the kernel
> >> > image.
> >> >
> >> > Signed-off-by: Ming Liu <liu.ming50@gmail.com>
> >> > ---
> >> >  meta/classes-recipe/kernel.bbclass | 10 +++++-----
> >> >  meta/conf/documentation.conf       |  1 +
> >> >  2 files changed, 6 insertions(+), 5 deletions(-)
> >> >
> >> > diff --git a/meta/classes-recipe/kernel.bbclass
> b/meta/classes-recipe/kernel.bbclass
> >> > index e634eabd49..3dd139eda9 100644
> >> > --- a/meta/classes-recipe/kernel.bbclass
> >> > +++ b/meta/classes-recipe/kernel.bbclass
> >> > @@ -616,6 +616,7 @@ do_shared_workdir () {
> >> >  # We don't need to stage anything, not the modules/firmware since
> those would clash with linux-firmware
> >> >  SYSROOT_DIRS = ""
> >> >
> >> > +KERNEL_LOCALVERSION ??= ""
> >> >  KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B}
> olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
> >> >
> >> >  python check_oldest_kernel() {
> >> > @@ -633,11 +634,10 @@ check_oldest_kernel[vardepsexclude] +=
> "OLDEST_KERNEL KERNEL_VERSION"
> >> >  do_configure[prefuncs] += "check_oldest_kernel"
> >> >
> >> >  kernel_do_configure() {
> >> > -       # fixes extra + in /lib/modules/2.6.37+
> >> > -       # $ scripts/setlocalversion . => +
> >> > -       # $ make kernelversion => 2.6.37
> >> > -       # $ make kernelrelease => 2.6.37+
> >>
> >> Those comments are still valid.
> >>
> >> > -       touch ${B}/.scmversion ${S}/.scmversion
> >> > +       if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
> >> > +               echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
> >> > +               echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
> >> > +       fi
> >>
> >> You've confirmed that the result is the same as the touches previously
> >> did when that variable isn't set ?
> >>
> >> Bruce
> >>
> >> >
> >> >         if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f
> "${B}/.config" ]; then
> >> >                 mv "${S}/.config" "${B}/.config"
> >> > diff --git a/meta/conf/documentation.conf
> b/meta/conf/documentation.conf
> >> > index a27d7a53c3..66b8e2f24f 100644
> >> > --- a/meta/conf/documentation.conf
> >> > +++ b/meta/conf/documentation.conf
> >> > @@ -253,6 +253,7 @@ KERNEL_MODULE_PROBECONF[doc] = "Lists kernel
> modules for which the build system
> >> >  KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages.
> Defaults to 'kernel'."
> >> >  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)."
> >> >  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)."
> >> > +KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the
> local version of the kernel image."
> >> >  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."
> >> >  KMACHINE[doc] = "The machine as known by the kernel."
> >> >  KTYPE[doc] = "Defines the kernel type to be used in assembling the
> configuration."
> >> > --
> >> > 2.25.1
> >> >
> >> >
> >> > -=-=-=-=-=-=-=-=-=-=-=-
> >> > Links: You receive all messages sent to this group.
> >> > View/Reply Online (#181939):
> https://lists.openembedded.org/g/openembedded-core/message/181939
> >> > Mute This Topic: https://lists.openembedded.org/mt/99224358/1050810
> >> > Group Owner: openembedded-core+owner@lists.openembedded.org
> >> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
> [bruce.ashfield@gmail.com]
> >> > -=-=-=-=-=-=-=-=-=-=-=-
> >> >
> >>
> >>
> >> --
> >> - Thou shalt not follow the NULL pointer, for chaos and madness await
> >> thee at its end
> >> - "Use the force Harry" - Gandalf, Star Trek II
>
>
>
> --
> - Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end
> - "Use the force Harry" - Gandalf, Star Trek II
>
Michael Opdenacker June 21, 2023, 4:03 p.m. UTC | #5
Greetings,

On 30.05.23 at 19:09, Ming Liu wrote:
> From: Ming Liu <liu.ming50@gmail.com>
>
> Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
> to append a string to the name of the local version of the kernel
> image.


How is this supposed to be used?

I added the following to my conf/local.conf file:
KERNEL_LOCALVERSION = "no-networking"

But when I run "uname -a" on the qemux86-64 target, I get:
Linux qemux86-64 6.1.33-yocto-standard #1 SMP PREEMPT_DYNAMIC Thu Jun 15 
03:08:03 UTC 2023 x86_64 GNU/Linux

So, my string is not there!

I'm using the latest Poky master branch for testing.
Thanks in advance
Cheers
Michael.
Bruce Ashfield June 21, 2023, 4:17 p.m. UTC | #6
On Wed, Jun 21, 2023 at 12:03 PM Michael Opdenacker via
lists.openembedded.org
<michael.opdenacker=bootlin.com@lists.openembedded.org> wrote:
>
> Greetings,
>
> On 30.05.23 at 19:09, Ming Liu wrote:
> > From: Ming Liu <liu.ming50@gmail.com>
> >
> > Just like UBOOT_LOCALVERSION, an end user can set KERNEL_LOCALVERSION
> > to append a string to the name of the local version of the kernel
> > image.
>
>
> How is this supposed to be used?
>
> I added the following to my conf/local.conf file:
> KERNEL_LOCALVERSION = "no-networking"
>
> But when I run "uname -a" on the qemux86-64 target, I get:
> Linux qemux86-64 6.1.33-yocto-standard #1 SMP PREEMPT_DYNAMIC Thu Jun 15
> 03:08:03 UTC 2023 x86_64 GNU/Linux
>
> So, my string is not there!

linux-yocto uses a different mechanism for setting this (and will
continue to use that existing mechanism).

So this would work in absence of a kernel recipe using CONFIG_LOCALVERSION.

Bruce

>
> I'm using the latest Poky master branch for testing.
> Thanks in advance
> Cheers
> Michael.
>
> --
> Michael Opdenacker, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#183186): https://lists.openembedded.org/g/openembedded-core/message/183186
> Mute This Topic: https://lists.openembedded.org/mt/99224358/1050810
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [bruce.ashfield@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Michael Opdenacker June 21, 2023, 4:32 p.m. UTC | #7
Hi Bruce,

Thanks for your help.

On 21.06.23 at 18:17, Bruce Ashfield wrote:
> linux-yocto uses a different mechanism for setting this (and will
> continue to use that existing mechanism).
>
> So this would work in absence of a kernel recipe using CONFIG_LOCALVERSION.


That's good to know from a documentation perspective :)

I'm using "core-image-minimal". Is there another standard image I can 
build that wouldn't use linux-yocto then (if I understood correctly)?

I want to make sure people know how to use this variable, because 
without further information, I expected that information to be used by 
linux-yocto.
Thanks
Michael.
Bruce Ashfield June 21, 2023, 4:52 p.m. UTC | #8
On Wed, Jun 21, 2023 at 12:32 PM Michael Opdenacker
<michael.opdenacker@bootlin.com> wrote:
>
> Hi Bruce,
>
> Thanks for your help.
>
> On 21.06.23 at 18:17, Bruce Ashfield wrote:
> > linux-yocto uses a different mechanism for setting this (and will
> > continue to use that existing mechanism).
> >
> > So this would work in absence of a kernel recipe using CONFIG_LOCALVERSION.
>
>
> That's good to know from a documentation perspective :)
>
> I'm using "core-image-minimal". Is there another standard image I can
> build that wouldn't use linux-yocto then (if I understood correctly)?

There isn't, since all of the core images use the reference kernels in
various flavours.

>
> I want to make sure people know how to use this variable, because
> without further information, I expected that information to be used by
> linux-yocto.

It really isn't a variable that most people will use. Most kernel
recipes that have needed
to set a local version have already been doing it a different way.

Bruce


> Thanks
> Michael.
>
> --
> Michael Opdenacker, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
Michael Opdenacker June 21, 2023, 4:55 p.m. UTC | #9
On 21.06.23 at 18:52, Bruce Ashfield wrote:
> It really isn't a variable that most people will use. Most kernel
> recipes that have needed
> to set a local version have already been doing it a different way.


So, we wouldn't document this new variable?

Would you have details about this different way? It seems that the 
manual doesn't explain how... (see 
https://docs.yoctoproject.org/kernel-dev/index.html)
Thanks
Michael.
Bruce Ashfield June 21, 2023, 5:04 p.m. UTC | #10
On Wed, Jun 21, 2023 at 12:55 PM Michael Opdenacker
<michael.opdenacker@bootlin.com> wrote:
>
>
> On 21.06.23 at 18:52, Bruce Ashfield wrote:
> > It really isn't a variable that most people will use. Most kernel
> > recipes that have needed
> > to set a local version have already been doing it a different way.
>
>
> So, we wouldn't document this new variable?
>

I'd document it simply by saying that if a kernel recipe is not
already setting a localversion, this mechanism is available. kernel
configurations (defconfigs, fragments, variables) can all set this
value, and we wouldn't want that variable to clobber them all.

We have plenty of kernel variables and build flows that are not
directly tested by kernel/linux-yocto, some of them have other tests,
others don't.

> Would you have details about this different way? It seems that the
> manual doesn't explain how... (see
> https://docs.yoctoproject.org/kernel-dev/index.html)

linux-yocto has done this for probably the better part of a decade (it
was moved to a task in 2017 and existed long before then).

do_set_localversion() {
        cd ${S}

        if [ ! -z "${LINUX_VERSION_EXTENSION}" ]; then
                echo "# Global settings from linux recipe" >> ${B}/.config
                echo
"CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config
        fi
}

which is a task.

So if you do a deltask on set_localversion, you could test that variable.

Bruce

> Thanks
> Michael.
>
> --
> Michael Opdenacker, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
diff mbox series

Patch

diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
index e634eabd49..3dd139eda9 100644
--- a/meta/classes-recipe/kernel.bbclass
+++ b/meta/classes-recipe/kernel.bbclass
@@ -616,6 +616,7 @@  do_shared_workdir () {
 # We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
 SYSROOT_DIRS = ""
 
+KERNEL_LOCALVERSION ??= ""
 KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
 
 python check_oldest_kernel() {
@@ -633,11 +634,10 @@  check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
 do_configure[prefuncs] += "check_oldest_kernel"
 
 kernel_do_configure() {
-	# fixes extra + in /lib/modules/2.6.37+
-	# $ scripts/setlocalversion . => +
-	# $ make kernelversion => 2.6.37
-	# $ make kernelrelease => 2.6.37+
-	touch ${B}/.scmversion ${S}/.scmversion
+	if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
+		echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
+		echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
+	fi
 
 	if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
 		mv "${S}/.config" "${B}/.config"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index a27d7a53c3..66b8e2f24f 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -253,6 +253,7 @@  KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system
 KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults to 'kernel'."
 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)."
 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)."
+KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the local version of the kernel image."
 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."
 KMACHINE[doc] = "The machine as known by the kernel."
 KTYPE[doc] = "Defines the kernel type to be used in assembling the configuration."