linux-custom: support vendor directories via HEADERS_INSTALL_EXTRA

Message ID 20240810215838.2098472-1-cedric.hombourger@siemens.com
State Accepted, archived
Headers show
Series linux-custom: support vendor directories via HEADERS_INSTALL_EXTRA | expand

Commit Message

Cedric Hombourger Aug. 10, 2024, 9:58 p.m. UTC
Some vendor kernels come with additional directories to be included in the
linux-headers package in order to support building of their out-of-tree
drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories relative
to ${S} in any kernel recipes that includes linux-custom.inc

Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
---
 RECIPE-API-CHANGELOG.md                              | 12 ++++++++++++
 .../linux/files/debian/isar/install.tmpl             |  6 ++++++
 meta/recipes-kernel/linux/linux-custom.inc           | 12 ++++++++++++
 3 files changed, 30 insertions(+)

Comments

Jan Kiszka Aug. 11, 2024, 8:10 a.m. UTC | #1
On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
> Some vendor kernels come with additional directories to be included in the
> linux-headers package in order to support building of their out-of-tree
> drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories relative
> to ${S} in any kernel recipes that includes linux-custom.inc
> 

Does this affect more than the legacy Nvidia Jetpack 5 kernel? I worked
with a lot of vendor kernels but didn't have the need elsewhere so far.

Note that we also didn't merge (or even propose?) the ccache
optimization for that horrible and now (JP6) removed kernel overlay of
Nvidia. And for the header topic, we resolve it in the downstream recipe
- a 3-liner by now.

Jan

> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> ---
>  RECIPE-API-CHANGELOG.md                              | 12 ++++++++++++
>  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
>  meta/recipes-kernel/linux/linux-custom.inc           | 12 ++++++++++++
>  3 files changed, 30 insertions(+)
> 
> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> index 65cd98b3..21c558d2 100644
> --- a/RECIPE-API-CHANGELOG.md
> +++ b/RECIPE-API-CHANGELOG.md
> @@ -634,3 +634,15 @@ into kernel kbuild package.
>  
>  When downloading from debian snapshot mirrors, rate limits might apply.
>  To limit the amount of parallel fetching to n kB / s, you can set `ISAR_APT_DL_LIMIT="<n>`.
> +
> +### Custom directories in vendor kernels
> +
> +Some vendor kernels come with additional directories to be included in the
> +linux-headers package in order to support building of their out-of-tree
> +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of directories relative
> +to ${S} in any kernel recipes that includes `linux-custom.inc`. A l4t kernel
> +recipe would use the following setting:
> +
> +```
> +HEADERS_INSTALL_EXTRA += "nvidia"
> +```
> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> index 00011517..0a7bdd66 100644
> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> @@ -193,6 +193,12 @@ kernel_headers() {
>      (cd ${S}; find arch/${ARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>      (cd ${S}; find $(find arch/${ARCH} -name include -o -name scripts -type d) -type f) >>${src_hdr_files}
>  
> +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +        for d in ${HEADERS_INSTALL_EXTRA}; do
> +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> +        done
> +    fi
> +
>      if [ -n "${CONFIG_MODULES}" ]; then
>          echo Module.symvers >> ${obj_hdr_files}
>      fi
> diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
> index 6aa70fd3..7e312b75 100644
> --- a/meta/recipes-kernel/linux/linux-custom.inc
> +++ b/meta/recipes-kernel/linux/linux-custom.inc
> @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
>  
>  KERNEL_DEFCONFIG ??= ""
>  
> +HEADERS_INSTALL_EXTRA ??= ""
> +
>  # Add our template meta-data to the sources
>  FILESPATH:append := ":${FILE_DIRNAME}/files"
>  SRC_URI += "file://debian"
> @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
>      KAFLAGS                       \
>      DISTRIBUTOR                   \
>      KERNEL_EXTRA_BUILDARGS        \
> +    HEADERS_INSTALL_EXTRA         \
>  "
>  
>  inherit dpkg
> @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
>  
>  	# produce a changelog for our kernel build
>  	deb_add_changelog
> +
> +	# make sure user-specified directories do exist in ${S}
> +	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +		for d in ${HEADERS_INSTALL_EXTRA}; do
> +			[ -d ${S}/${d} ] || {
> +				bbfatal "HEADERS_INSTALL_EXTRA: '${d}' not found in \${S}!"
> +			}
> +		done
> +	fi
>  }
>  
>  # build directory for our "full" kernel build
Cedric Hombourger Aug. 11, 2024, 8:35 a.m. UTC | #2
On Sun, 2024-08-11 at 10:10 +0200, Jan Kiszka wrote:
> On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
> > Some vendor kernels come with additional directories to be included
> > in the
> > linux-headers package in order to support building of their out-of-
> > tree
> > drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
> > relative
> > to ${S} in any kernel recipes that includes linux-custom.inc
> > 
> 
> Does this affect more than the legacy Nvidia Jetpack 5 kernel? I
> worked
> with a lot of vendor kernels but didn't have the need elsewhere so
> far.

Same story with QCOM kernel. While for Nvidia, Claudius had chosen to
ship a copy of Isar's install.tmpl, for QCOM I had patched debian/rules
to ship additional files into linux-headers. Neither approaches are IMO
satisfactory.

Are there concerns about adding a new user-visible variable in linux-
custom? Or was the question about this being proposed to address a
single corner-case or multiple vendor kernels?

> 
> Note that we also didn't merge (or even propose?) the ccache
> optimization for that horrible and now (JP6) removed kernel overlay
> of
> Nvidia. And for the header topic, we resolve it in the downstream
> recipe
> - a 3-liner by now.
> 
> Jan
> 
> > Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> > ---
> >  RECIPE-API-CHANGELOG.md                              | 12
> > ++++++++++++
> >  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
> >  meta/recipes-kernel/linux/linux-custom.inc           | 12
> > ++++++++++++
> >  3 files changed, 30 insertions(+)
> > 
> > diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> > index 65cd98b3..21c558d2 100644
> > --- a/RECIPE-API-CHANGELOG.md
> > +++ b/RECIPE-API-CHANGELOG.md
> > @@ -634,3 +634,15 @@ into kernel kbuild package.
> >  
> >  When downloading from debian snapshot mirrors, rate limits might
> > apply.
> >  To limit the amount of parallel fetching to n kB / s, you can set
> > `ISAR_APT_DL_LIMIT="<n>`.
> > +
> > +### Custom directories in vendor kernels
> > +
> > +Some vendor kernels come with additional directories to be
> > included in the
> > +linux-headers package in order to support building of their out-
> > of-tree
> > +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of
> > directories relative
> > +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
> > l4t kernel
> > +recipe would use the following setting:
> > +
> > +```
> > +HEADERS_INSTALL_EXTRA += "nvidia"
> > +```
> > diff --git a/meta/recipes-
> > kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-
> > kernel/linux/files/debian/isar/install.tmpl
> > index 00011517..0a7bdd66 100644
> > --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > @@ -193,6 +193,12 @@ kernel_headers() {
> >      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> > Kbuild.platforms -o -name Platform) >>${src_hdr_files}
> >      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> > scripts -type d) -type f) >>${src_hdr_files}
> >  
> > +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > +        for d in ${HEADERS_INSTALL_EXTRA}; do
> > +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> > +        done
> > +    fi
> > +
> >      if [ -n "${CONFIG_MODULES}" ]; then
> >          echo Module.symvers >> ${obj_hdr_files}
> >      fi
> > diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> > b/meta/recipes-kernel/linux/linux-custom.inc
> > index 6aa70fd3..7e312b75 100644
> > --- a/meta/recipes-kernel/linux/linux-custom.inc
> > +++ b/meta/recipes-kernel/linux/linux-custom.inc
> > @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
> >  
> >  KERNEL_DEFCONFIG ??= ""
> >  
> > +HEADERS_INSTALL_EXTRA ??= ""
> > +
> >  # Add our template meta-data to the sources
> >  FILESPATH:append := ":${FILE_DIRNAME}/files"
> >  SRC_URI += "file://debian"
> > @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
> >      KAFLAGS                       \
> >      DISTRIBUTOR                   \
> >      KERNEL_EXTRA_BUILDARGS        \
> > +    HEADERS_INSTALL_EXTRA         \
> >  "
> >  
> >  inherit dpkg
> > @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
> >  
> >         # produce a changelog for our kernel build
> >         deb_add_changelog
> > +
> > +       # make sure user-specified directories do exist in ${S}
> > +       if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > +               for d in ${HEADERS_INSTALL_EXTRA}; do
> > +                       [ -d ${S}/${d} ] || {
> > +                               bbfatal "HEADERS_INSTALL_EXTRA:
> > '${d}' not found in \${S}!"
> > +                       }
> > +               done
> > +       fi
> >  }
> >  
> >  # build directory for our "full" kernel build
>
Jan Kiszka Aug. 11, 2024, 9:04 a.m. UTC | #3
On 11.08.24 10:35, Hombourger, Cedric (DI CTO FDS CES LX) wrote:
> On Sun, 2024-08-11 at 10:10 +0200, Jan Kiszka wrote:
>> On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
>>> Some vendor kernels come with additional directories to be included
>>> in the
>>> linux-headers package in order to support building of their out-of-
>>> tree
>>> drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
>>> relative
>>> to ${S} in any kernel recipes that includes linux-custom.inc
>>>
>>
>> Does this affect more than the legacy Nvidia Jetpack 5 kernel? I
>> worked
>> with a lot of vendor kernels but didn't have the need elsewhere so
>> far.
> 
> Same story with QCOM kernel. While for Nvidia, Claudius had chosen to
> ship a copy of Isar's install.tmpl, for QCOM I had patched debian/rules
> to ship additional files into linux-headers. Neither approaches are IMO
> satisfactory.
> 
> Are there concerns about adding a new user-visible variable in linux-
> custom? Or was the question about this being proposed to address a
> single corner-case or multiple vendor kernels?

The latter, because the Nvidia case is in phase-out now. If Qualcomm
needs longer to understand their mistakes, we apparently need this.

Is ccache fine with the QCOM kernel?

Jan

> 
>>
>> Note that we also didn't merge (or even propose?) the ccache
>> optimization for that horrible and now (JP6) removed kernel overlay
>> of
>> Nvidia. And for the header topic, we resolve it in the downstream
>> recipe
>> - a 3-liner by now.
>>
>> Jan
>>
>>> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
>>> ---
>>>  RECIPE-API-CHANGELOG.md                              | 12
>>> ++++++++++++
>>>  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
>>>  meta/recipes-kernel/linux/linux-custom.inc           | 12
>>> ++++++++++++
>>>  3 files changed, 30 insertions(+)
>>>
>>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
>>> index 65cd98b3..21c558d2 100644
>>> --- a/RECIPE-API-CHANGELOG.md
>>> +++ b/RECIPE-API-CHANGELOG.md
>>> @@ -634,3 +634,15 @@ into kernel kbuild package.
>>>  
>>>  When downloading from debian snapshot mirrors, rate limits might
>>> apply.
>>>  To limit the amount of parallel fetching to n kB / s, you can set
>>> `ISAR_APT_DL_LIMIT="<n>`.
>>> +
>>> +### Custom directories in vendor kernels
>>> +
>>> +Some vendor kernels come with additional directories to be
>>> included in the
>>> +linux-headers package in order to support building of their out-
>>> of-tree
>>> +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of
>>> directories relative
>>> +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
>>> l4t kernel
>>> +recipe would use the following setting:
>>> +
>>> +```
>>> +HEADERS_INSTALL_EXTRA += "nvidia"
>>> +```
>>> diff --git a/meta/recipes-
>>> kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-
>>> kernel/linux/files/debian/isar/install.tmpl
>>> index 00011517..0a7bdd66 100644
>>> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>>> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>>> @@ -193,6 +193,12 @@ kernel_headers() {
>>>      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
>>> Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>>>      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
>>> scripts -type d) -type f) >>${src_hdr_files}
>>>  
>>> +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
>>> +        for d in ${HEADERS_INSTALL_EXTRA}; do
>>> +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
>>> +        done
>>> +    fi
>>> +
>>>      if [ -n "${CONFIG_MODULES}" ]; then
>>>          echo Module.symvers >> ${obj_hdr_files}
>>>      fi
>>> diff --git a/meta/recipes-kernel/linux/linux-custom.inc
>>> b/meta/recipes-kernel/linux/linux-custom.inc
>>> index 6aa70fd3..7e312b75 100644
>>> --- a/meta/recipes-kernel/linux/linux-custom.inc
>>> +++ b/meta/recipes-kernel/linux/linux-custom.inc
>>> @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
>>>  
>>>  KERNEL_DEFCONFIG ??= ""
>>>  
>>> +HEADERS_INSTALL_EXTRA ??= ""
>>> +
>>>  # Add our template meta-data to the sources
>>>  FILESPATH:append := ":${FILE_DIRNAME}/files"
>>>  SRC_URI += "file://debian"
>>> @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
>>>      KAFLAGS                       \
>>>      DISTRIBUTOR                   \
>>>      KERNEL_EXTRA_BUILDARGS        \
>>> +    HEADERS_INSTALL_EXTRA         \
>>>  "
>>>  
>>>  inherit dpkg
>>> @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
>>>  
>>>         # produce a changelog for our kernel build
>>>         deb_add_changelog
>>> +
>>> +       # make sure user-specified directories do exist in ${S}
>>> +       if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
>>> +               for d in ${HEADERS_INSTALL_EXTRA}; do
>>> +                       [ -d ${S}/${d} ] || {
>>> +                               bbfatal "HEADERS_INSTALL_EXTRA:
>>> '${d}' not found in \${S}!"
>>> +                       }
>>> +               done
>>> +       fi
>>>  }
>>>  
>>>  # build directory for our "full" kernel build
>>
>
MOESSBAUER, Felix Aug. 12, 2024, 11:41 a.m. UTC | #4
On Sun, 2024-08-11 at 10:10 +0200, 'Jan Kiszka' via isar-users wrote:
> On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
> > Some vendor kernels come with additional directories to be included
> > in the
> > linux-headers package in order to support building of their out-of-
> > tree
> > drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
> > relative
> > to ${S} in any kernel recipes that includes linux-custom.inc
> > 
> 
> Does this affect more than the legacy Nvidia Jetpack 5 kernel? I
> worked
> with a lot of vendor kernels but didn't have the need elsewhere so
> far.
> 
> Note that we also didn't merge (or even propose?) the ccache
> optimization for that horrible and now (JP6) removed kernel overlay
> of

I proposed this patch in [1], but due to a lack of downstream consumers
(except for JP5) and the questionable issue it is solving, it was never
merged.

[1] https://groups.google.com/g/isar-users/c/dQqxKdA7d-4/m/xuFhLj7HEgAJ

Felix

> Nvidia. And for the header topic, we resolve it in the downstream
> recipe
> - a 3-liner by now.
> 
> Jan
> 
> > Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> > ---
> >  RECIPE-API-CHANGELOG.md                              | 12
> > ++++++++++++
> >  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
> >  meta/recipes-kernel/linux/linux-custom.inc           | 12
> > ++++++++++++
> >  3 files changed, 30 insertions(+)
> > 
> > diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> > index 65cd98b3..21c558d2 100644
> > --- a/RECIPE-API-CHANGELOG.md
> > +++ b/RECIPE-API-CHANGELOG.md
> > @@ -634,3 +634,15 @@ into kernel kbuild package.
> >  
> >  When downloading from debian snapshot mirrors, rate limits might
> > apply.
> >  To limit the amount of parallel fetching to n kB / s, you can set
> > `ISAR_APT_DL_LIMIT="<n>`.
> > +
> > +### Custom directories in vendor kernels
> > +
> > +Some vendor kernels come with additional directories to be
> > included in the
> > +linux-headers package in order to support building of their out-
> > of-tree
> > +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of
> > directories relative
> > +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
> > l4t kernel
> > +recipe would use the following setting:
> > +
> > +```
> > +HEADERS_INSTALL_EXTRA += "nvidia"
> > +```
> > diff --git a/meta/recipes-
> > kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-
> > kernel/linux/files/debian/isar/install.tmpl
> > index 00011517..0a7bdd66 100644
> > --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > @@ -193,6 +193,12 @@ kernel_headers() {
> >      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> > Kbuild.platforms -o -name Platform) >>${src_hdr_files}
> >      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> > scripts -type d) -type f) >>${src_hdr_files}
> >  
> > +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > +        for d in ${HEADERS_INSTALL_EXTRA}; do
> > +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> > +        done
> > +    fi
> > +
> >      if [ -n "${CONFIG_MODULES}" ]; then
> >          echo Module.symvers >> ${obj_hdr_files}
> >      fi
> > diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> > b/meta/recipes-kernel/linux/linux-custom.inc
> > index 6aa70fd3..7e312b75 100644
> > --- a/meta/recipes-kernel/linux/linux-custom.inc
> > +++ b/meta/recipes-kernel/linux/linux-custom.inc
> > @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
> >  
> >  KERNEL_DEFCONFIG ??= ""
> >  
> > +HEADERS_INSTALL_EXTRA ??= ""
> > +
> >  # Add our template meta-data to the sources
> >  FILESPATH:append := ":${FILE_DIRNAME}/files"
> >  SRC_URI += "file://debian"
> > @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
> >      KAFLAGS                       \
> >      DISTRIBUTOR                   \
> >      KERNEL_EXTRA_BUILDARGS        \
> > +    HEADERS_INSTALL_EXTRA         \
> >  "
> >  
> >  inherit dpkg
> > @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
> >  
> >         # produce a changelog for our kernel build
> >         deb_add_changelog
> > +
> > +       # make sure user-specified directories do exist in ${S}
> > +       if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > +               for d in ${HEADERS_INSTALL_EXTRA}; do
> > +                       [ -d ${S}/${d} ] || {
> > +                               bbfatal "HEADERS_INSTALL_EXTRA:
> > '${d}' not found in \${S}!"
> > +                       }
> > +               done
> > +       fi
> >  }
> >  
> >  # build directory for our "full" kernel build
> 
> -- 
> Siemens AG, Technology
> Linux Expert Center
>
Cedric Hombourger Aug. 12, 2024, 11:57 a.m. UTC | #5
On Mon, 2024-08-12 at 11:41 +0000, Moessbauer, Felix (T CED OES-DE)
wrote:
> On Sun, 2024-08-11 at 10:10 +0200, 'Jan Kiszka' via isar-users wrote:
> > On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
> > > Some vendor kernels come with additional directories to be
> > > included
> > > in the
> > > linux-headers package in order to support building of their out-
> > > of-
> > > tree
> > > drivers. HEADERS_INSTALL_EXTRA may be set to a list of
> > > directories
> > > relative
> > > to ${S} in any kernel recipes that includes linux-custom.inc
> > >
> >
> > Does this affect more than the legacy Nvidia Jetpack 5 kernel? I
> > worked
> > with a lot of vendor kernels but didn't have the need elsewhere so
> > far.
> >
> > Note that we also didn't merge (or even propose?) the ccache
> > optimization for that horrible and now (JP6) removed kernel overlay
> > of
>
> I proposed this patch in [1], but due to a lack of downstream
> consumers
> (except for JP5) and the questionable issue it is solving, it was
> never
> merged.

Thanks for sharing. I had a chance to look at our JP5 layer earlier
today (was away for the last two weeks) and I now see that it uses sed
to insert the "nvidia/include" directory to the list of directories to
ship with linux-headers.

No doubt that it works and is simple to maintain.

My concern is that it introduces a hidden contract between our kernel
recipe and linux-custom. That said chances are that changes to linux-
custom will cause a build failure for out-of-tree kernel modules if sed
did not manage to augment the list of directories to ship. We are
probably fine with that approach but I generally do not like such
hidden contracts. The other downside is that other layers may opt to go
with a different approach and I was hoping that we could get Isar to
offer a unified way to address this use-case even if the number of
users may be limited (and will hopefully remain limited as we would not
want vendor kernels to "pollute" kernel trees with extra folders.

>
> [1]
> https://groups.google.com/g/isar-users/c/dQqxKdA7d-4/m/xuFhLj7HEgAJ
>
> Felix
>
> > Nvidia. And for the header topic, we resolve it in the downstream
> > recipe
> > - a 3-liner by now.
> >
> > Jan
> >
> > > Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> > > ---
> > >  RECIPE-API-CHANGELOG.md                              | 12
> > > ++++++++++++
> > >  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
> > >  meta/recipes-kernel/linux/linux-custom.inc           | 12
> > > ++++++++++++
> > >  3 files changed, 30 insertions(+)
> > >
> > > diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> > > index 65cd98b3..21c558d2 100644
> > > --- a/RECIPE-API-CHANGELOG.md
> > > +++ b/RECIPE-API-CHANGELOG.md
> > > @@ -634,3 +634,15 @@ into kernel kbuild package.
> > >
> > >  When downloading from debian snapshot mirrors, rate limits might
> > > apply.
> > >  To limit the amount of parallel fetching to n kB / s, you can
> > > set
> > > `ISAR_APT_DL_LIMIT="<n>`.
> > > +
> > > +### Custom directories in vendor kernels
> > > +
> > > +Some vendor kernels come with additional directories to be
> > > included in the
> > > +linux-headers package in order to support building of their out-
> > > of-tree
> > > +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of
> > > directories relative
> > > +to ${S} in any kernel recipes that includes `linux-custom.inc`.
> > > A
> > > l4t kernel
> > > +recipe would use the following setting:
> > > +
> > > +```
> > > +HEADERS_INSTALL_EXTRA += "nvidia"
> > > +```
> > > diff --git a/meta/recipes-
> > > kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-
> > > kernel/linux/files/debian/isar/install.tmpl
> > > index 00011517..0a7bdd66 100644
> > > --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > > +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > > @@ -193,6 +193,12 @@ kernel_headers() {
> > >      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> > > Kbuild.platforms -o -name Platform) >>${src_hdr_files}
> > >      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> > > scripts -type d) -type f) >>${src_hdr_files}
> > >
> > > +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > > +        for d in ${HEADERS_INSTALL_EXTRA}; do
> > > +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> > > +        done
> > > +    fi
> > > +
> > >      if [ -n "${CONFIG_MODULES}" ]; then
> > >          echo Module.symvers >> ${obj_hdr_files}
> > >      fi
> > > diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> > > b/meta/recipes-kernel/linux/linux-custom.inc
> > > index 6aa70fd3..7e312b75 100644
> > > --- a/meta/recipes-kernel/linux/linux-custom.inc
> > > +++ b/meta/recipes-kernel/linux/linux-custom.inc
> > > @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
> > >
> > >  KERNEL_DEFCONFIG ??= ""
> > >
> > > +HEADERS_INSTALL_EXTRA ??= ""
> > > +
> > >  # Add our template meta-data to the sources
> > >  FILESPATH:append := ":${FILE_DIRNAME}/files"
> > >  SRC_URI += "file://debian"
> > > @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
> > >      KAFLAGS                       \
> > >      DISTRIBUTOR                   \
> > >      KERNEL_EXTRA_BUILDARGS        \
> > > +    HEADERS_INSTALL_EXTRA         \
> > >  "
> > >
> > >  inherit dpkg
> > > @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
> > >
> > >         # produce a changelog for our kernel build
> > >         deb_add_changelog
> > > +
> > > +       # make sure user-specified directories do exist in ${S}
> > > +       if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > > +               for d in ${HEADERS_INSTALL_EXTRA}; do
> > > +                       [ -d ${S}/${d} ] || {
> > > +                               bbfatal "HEADERS_INSTALL_EXTRA:
> > > '${d}' not found in \${S}!"
> > > +                       }
> > > +               done
> > > +       fi
> > >  }
> > >
> > >  # build directory for our "full" kernel build
> >
> > --
> > Siemens AG, Technology
> > Linux Expert Center
> >
>

--
Cedric Hombourger
Siemens AG
http://www.siemens.com/
Jan Kiszka Aug. 12, 2024, 12:14 p.m. UTC | #6
On 12.08.24 13:57, Hombourger, Cedric (DI CTO FDS CES LX) wrote:
> On Mon, 2024-08-12 at 11:41 +0000, Moessbauer, Felix (T CED OES-DE)
> wrote:
>> On Sun, 2024-08-11 at 10:10 +0200, 'Jan Kiszka' via isar-users wrote:
>>> On 10.08.24 23:58, 'Cedric Hombourger' via isar-users wrote:
>>>> Some vendor kernels come with additional directories to be
>>>> included
>>>> in the
>>>> linux-headers package in order to support building of their out-
>>>> of-
>>>> tree
>>>> drivers. HEADERS_INSTALL_EXTRA may be set to a list of
>>>> directories
>>>> relative
>>>> to ${S} in any kernel recipes that includes linux-custom.inc
>>>>
>>>
>>> Does this affect more than the legacy Nvidia Jetpack 5 kernel? I
>>> worked
>>> with a lot of vendor kernels but didn't have the need elsewhere so
>>> far.
>>>
>>> Note that we also didn't merge (or even propose?) the ccache
>>> optimization for that horrible and now (JP6) removed kernel overlay
>>> of
>>
>> I proposed this patch in [1], but due to a lack of downstream
>> consumers
>> (except for JP5) and the questionable issue it is solving, it was
>> never
>> merged.
> 
> Thanks for sharing. I had a chance to look at our JP5 layer earlier
> today (was away for the last two weeks) and I now see that it uses sed
> to insert the "nvidia/include" directory to the list of directories to
> ship with linux-headers.
> 
> No doubt that it works and is simple to maintain.
> 
> My concern is that it introduces a hidden contract between our kernel
> recipe and linux-custom. That said chances are that changes to linux-
> custom will cause a build failure for out-of-tree kernel modules if sed
> did not manage to augment the list of directories to ship. We are
> probably fine with that approach but I generally do not like such
> hidden contracts. The other downside is that other layers may opt to go
> with a different approach and I was hoping that we could get Isar to
> offer a unified way to address this use-case even if the number of
> users may be limited (and will hopefully remain limited as we would not
> want vendor kernels to "pollute" kernel trees with extra folders.
> 

I think Felix was referring to the ccache-related changes. Those are
orthogonal to the header installation.

Again my question: does the QCOM kernel have ccache issues as well?
Should we reconsider Felix' patch?

Jan
Uladzimir Bely Aug. 27, 2024, 3:48 p.m. UTC | #7
On Sat, 2024-08-10 at 23:58 +0200, 'Cedric Hombourger' via isar-users
wrote:
> Some vendor kernels come with additional directories to be included
> in the
> linux-headers package in order to support building of their out-of-
> tree
> drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
> relative
> to ${S} in any kernel recipes that includes linux-custom.inc
> 
> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> ---
>  RECIPE-API-CHANGELOG.md                              | 12
> ++++++++++++
>  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
>  meta/recipes-kernel/linux/linux-custom.inc           | 12
> ++++++++++++
>  3 files changed, 30 insertions(+)
> 
> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> index 65cd98b3..21c558d2 100644
> --- a/RECIPE-API-CHANGELOG.md
> +++ b/RECIPE-API-CHANGELOG.md
> @@ -634,3 +634,15 @@ into kernel kbuild package.
>  
>  When downloading from debian snapshot mirrors, rate limits might
> apply.
>  To limit the amount of parallel fetching to n kB / s, you can set
> `ISAR_APT_DL_LIMIT="<n>`.
> +
> +### Custom directories in vendor kernels
> +
> +Some vendor kernels come with additional directories to be included
> in the
> +linux-headers package in order to support building of their out-of-
> tree
> +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of directories
> relative
> +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
> l4t kernel
> +recipe would use the following setting:
> +
> +```
> +HEADERS_INSTALL_EXTRA += "nvidia"
> +```
> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> index 00011517..0a7bdd66 100644
> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> @@ -193,6 +193,12 @@ kernel_headers() {
>      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> scripts -type d) -type f) >>${src_hdr_files}
>  
> +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +        for d in ${HEADERS_INSTALL_EXTRA}; do
> +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> +        done
> +    fi
> +
>      if [ -n "${CONFIG_MODULES}" ]; then
>          echo Module.symvers >> ${obj_hdr_files}
>      fi
> diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> b/meta/recipes-kernel/linux/linux-custom.inc
> index 6aa70fd3..7e312b75 100644
> --- a/meta/recipes-kernel/linux/linux-custom.inc
> +++ b/meta/recipes-kernel/linux/linux-custom.inc
> @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
>  
>  KERNEL_DEFCONFIG ??= ""
>  
> +HEADERS_INSTALL_EXTRA ??= ""
> +
>  # Add our template meta-data to the sources
>  FILESPATH:append := ":${FILE_DIRNAME}/files"
>  SRC_URI += "file://debian"
> @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
>      KAFLAGS                       \
>      DISTRIBUTOR                   \
>      KERNEL_EXTRA_BUILDARGS        \
> +    HEADERS_INSTALL_EXTRA         \
>  "
>  
>  inherit dpkg
> @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
>  
>  	# produce a changelog for our kernel build
>  	deb_add_changelog
> +
> +	# make sure user-specified directories do exist in ${S}
> +	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +		for d in ${HEADERS_INSTALL_EXTRA}; do
> +			[ -d ${S}/${d} ] || {
> +				bbfatal "HEADERS_INSTALL_EXTRA:
> '${d}' not found in \${S}!"
> +			}
> +		done
> +	fi
>  }
>  
>  # build directory for our "full" kernel build
> -- 
> 2.39.2
> 

Hello all.

The patch is checked in CI and it passes OK, but it's still not clear
from a discussion if it's worth applying. Or should this new feature
leave on a downstrem side?
Jan Kiszka Aug. 27, 2024, 4:12 p.m. UTC | #8
On 27.08.24 17:48, Uladzimir Bely wrote:
> On Sat, 2024-08-10 at 23:58 +0200, 'Cedric Hombourger' via isar-users
> wrote:
>> Some vendor kernels come with additional directories to be included
>> in the
>> linux-headers package in order to support building of their out-of-
>> tree
>> drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
>> relative
>> to ${S} in any kernel recipes that includes linux-custom.inc
>>
>> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
>> ---
>>  RECIPE-API-CHANGELOG.md                              | 12
>> ++++++++++++
>>  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
>>  meta/recipes-kernel/linux/linux-custom.inc           | 12
>> ++++++++++++
>>  3 files changed, 30 insertions(+)
>>
>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
>> index 65cd98b3..21c558d2 100644
>> --- a/RECIPE-API-CHANGELOG.md
>> +++ b/RECIPE-API-CHANGELOG.md
>> @@ -634,3 +634,15 @@ into kernel kbuild package.
>>  
>>  When downloading from debian snapshot mirrors, rate limits might
>> apply.
>>  To limit the amount of parallel fetching to n kB / s, you can set
>> `ISAR_APT_DL_LIMIT="<n>`.
>> +
>> +### Custom directories in vendor kernels
>> +
>> +Some vendor kernels come with additional directories to be included
>> in the
>> +linux-headers package in order to support building of their out-of-
>> tree
>> +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of directories
>> relative
>> +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
>> l4t kernel
>> +recipe would use the following setting:
>> +
>> +```
>> +HEADERS_INSTALL_EXTRA += "nvidia"
>> +```
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> index 00011517..0a7bdd66 100644
>> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> @@ -193,6 +193,12 @@ kernel_headers() {
>>      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
>> Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>>      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
>> scripts -type d) -type f) >>${src_hdr_files}
>>  
>> +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
>> +        for d in ${HEADERS_INSTALL_EXTRA}; do
>> +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
>> +        done
>> +    fi
>> +
>>      if [ -n "${CONFIG_MODULES}" ]; then
>>          echo Module.symvers >> ${obj_hdr_files}
>>      fi
>> diff --git a/meta/recipes-kernel/linux/linux-custom.inc
>> b/meta/recipes-kernel/linux/linux-custom.inc
>> index 6aa70fd3..7e312b75 100644
>> --- a/meta/recipes-kernel/linux/linux-custom.inc
>> +++ b/meta/recipes-kernel/linux/linux-custom.inc
>> @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
>>  
>>  KERNEL_DEFCONFIG ??= ""
>>  
>> +HEADERS_INSTALL_EXTRA ??= ""
>> +
>>  # Add our template meta-data to the sources
>>  FILESPATH:append := ":${FILE_DIRNAME}/files"
>>  SRC_URI += "file://debian"
>> @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
>>      KAFLAGS                       \
>>      DISTRIBUTOR                   \
>>      KERNEL_EXTRA_BUILDARGS        \
>> +    HEADERS_INSTALL_EXTRA         \
>>  "
>>  
>>  inherit dpkg
>> @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
>>  
>>  	# produce a changelog for our kernel build
>>  	deb_add_changelog
>> +
>> +	# make sure user-specified directories do exist in ${S}
>> +	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
>> +		for d in ${HEADERS_INSTALL_EXTRA}; do
>> +			[ -d ${S}/${d} ] || {
>> +				bbfatal "HEADERS_INSTALL_EXTRA:
>> '${d}' not found in \${S}!"
>> +			}
>> +		done
>> +	fi
>>  }
>>  
>>  # build directory for our "full" kernel build
>> -- 
>> 2.39.2
>>
> 
> Hello all.
> 
> The patch is checked in CI and it passes OK, but it's still not clear
> from a discussion if it's worth applying. Or should this new feature
> leave on a downstrem side?
> 

I said in my reply that "we apparently need this", now that we have two
downstream kernels with this pain.

We then had some unfinished (IIRC) follow-up discussion around ccache,
but that should not delay this change.

Jan
Uladzimir Bely Aug. 27, 2024, 4:49 p.m. UTC | #9
On Tue, 2024-08-27 at 18:12 +0200, Jan Kiszka wrote:
> On 27.08.24 17:48, Uladzimir Bely wrote:
> > On Sat, 2024-08-10 at 23:58 +0200, 'Cedric Hombourger' via isar-
> > users
> > wrote:
> > > Some vendor kernels come with additional directories to be
> > > included
> > > in the
> > > linux-headers package in order to support building of their out-
> > > of-
> > > tree
> > > drivers. HEADERS_INSTALL_EXTRA may be set to a list of
> > > directories
> > > relative
> > > to ${S} in any kernel recipes that includes linux-custom.inc
> > > 
> > > Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> > > ---
> > >  RECIPE-API-CHANGELOG.md                              | 12
> > > ++++++++++++
> > >  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
> > >  meta/recipes-kernel/linux/linux-custom.inc           | 12
> > > ++++++++++++
> > >  3 files changed, 30 insertions(+)
> > > 
> > > diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> > > index 65cd98b3..21c558d2 100644
> > > --- a/RECIPE-API-CHANGELOG.md
> > > +++ b/RECIPE-API-CHANGELOG.md
> > > @@ -634,3 +634,15 @@ into kernel kbuild package.
> > >  
> > >  When downloading from debian snapshot mirrors, rate limits might
> > > apply.
> > >  To limit the amount of parallel fetching to n kB / s, you can
> > > set
> > > `ISAR_APT_DL_LIMIT="<n>`.
> > > +
> > > +### Custom directories in vendor kernels
> > > +
> > > +Some vendor kernels come with additional directories to be
> > > included
> > > in the
> > > +linux-headers package in order to support building of their out-
> > > of-
> > > tree
> > > +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of
> > > directories
> > > relative
> > > +to ${S} in any kernel recipes that includes `linux-custom.inc`.
> > > A
> > > l4t kernel
> > > +recipe would use the following setting:
> > > +
> > > +```
> > > +HEADERS_INSTALL_EXTRA += "nvidia"
> > > +```
> > > diff --git a/meta/recipes-
> > > kernel/linux/files/debian/isar/install.tmpl
> > > b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > > index 00011517..0a7bdd66 100644
> > > --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > > +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > > @@ -193,6 +193,12 @@ kernel_headers() {
> > >      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> > > Kbuild.platforms -o -name Platform) >>${src_hdr_files}
> > >      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> > > scripts -type d) -type f) >>${src_hdr_files}
> > >  
> > > +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > > +        for d in ${HEADERS_INSTALL_EXTRA}; do
> > > +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> > > +        done
> > > +    fi
> > > +
> > >      if [ -n "${CONFIG_MODULES}" ]; then
> > >          echo Module.symvers >> ${obj_hdr_files}
> > >      fi
> > > diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> > > b/meta/recipes-kernel/linux/linux-custom.inc
> > > index 6aa70fd3..7e312b75 100644
> > > --- a/meta/recipes-kernel/linux/linux-custom.inc
> > > +++ b/meta/recipes-kernel/linux/linux-custom.inc
> > > @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
> > >  
> > >  KERNEL_DEFCONFIG ??= ""
> > >  
> > > +HEADERS_INSTALL_EXTRA ??= ""
> > > +
> > >  # Add our template meta-data to the sources
> > >  FILESPATH:append := ":${FILE_DIRNAME}/files"
> > >  SRC_URI += "file://debian"
> > > @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
> > >      KAFLAGS                       \
> > >      DISTRIBUTOR                   \
> > >      KERNEL_EXTRA_BUILDARGS        \
> > > +    HEADERS_INSTALL_EXTRA         \
> > >  "
> > >  
> > >  inherit dpkg
> > > @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
> > >  
> > >  	# produce a changelog for our kernel build
> > >  	deb_add_changelog
> > > +
> > > +	# make sure user-specified directories do exist in ${S}
> > > +	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> > > +		for d in ${HEADERS_INSTALL_EXTRA}; do
> > > +			[ -d ${S}/${d} ] || {
> > > +				bbfatal "HEADERS_INSTALL_EXTRA:
> > > '${d}' not found in \${S}!"
> > > +			}
> > > +		done
> > > +	fi
> > >  }
> > >  
> > >  # build directory for our "full" kernel build
> > > -- 
> > > 2.39.2
> > > 
> > 
> > Hello all.
> > 
> > The patch is checked in CI and it passes OK, but it's still not
> > clear
> > from a discussion if it's worth applying. Or should this new
> > feature
> > leave on a downstrem side?
> > 
> 
> I said in my reply that "we apparently need this", now that we have
> two
> downstream kernels with this pain.
> 
> We then had some unfinished (IIRC) follow-up discussion around
> ccache,
> but that should not delay this change.
> 
> Jan
> 

OK, got you. Thanks for the answer.
Uladzimir Bely Aug. 27, 2024, 4:58 p.m. UTC | #10
On Sat, 2024-08-10 at 23:58 +0200, 'Cedric Hombourger' via isar-users
wrote:
> Some vendor kernels come with additional directories to be included
> in the
> linux-headers package in order to support building of their out-of-
> tree
> drivers. HEADERS_INSTALL_EXTRA may be set to a list of directories
> relative
> to ${S} in any kernel recipes that includes linux-custom.inc
> 
> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> ---
>  RECIPE-API-CHANGELOG.md                              | 12
> ++++++++++++
>  .../linux/files/debian/isar/install.tmpl             |  6 ++++++
>  meta/recipes-kernel/linux/linux-custom.inc           | 12
> ++++++++++++
>  3 files changed, 30 insertions(+)
> 
> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> index 65cd98b3..21c558d2 100644
> --- a/RECIPE-API-CHANGELOG.md
> +++ b/RECIPE-API-CHANGELOG.md
> @@ -634,3 +634,15 @@ into kernel kbuild package.
>  
>  When downloading from debian snapshot mirrors, rate limits might
> apply.
>  To limit the amount of parallel fetching to n kB / s, you can set
> `ISAR_APT_DL_LIMIT="<n>`.
> +
> +### Custom directories in vendor kernels
> +
> +Some vendor kernels come with additional directories to be included
> in the
> +linux-headers package in order to support building of their out-of-
> tree
> +drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of directories
> relative
> +to ${S} in any kernel recipes that includes `linux-custom.inc`. A
> l4t kernel
> +recipe would use the following setting:
> +
> +```
> +HEADERS_INSTALL_EXTRA += "nvidia"
> +```
> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> index 00011517..0a7bdd66 100644
> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> @@ -193,6 +193,12 @@ kernel_headers() {
>      (cd ${S}; find arch/${ARCH} -name module.lds -o -name
> Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>      (cd ${S}; find $(find arch/${ARCH} -name include -o -name
> scripts -type d) -type f) >>${src_hdr_files}
>  
> +    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +        for d in ${HEADERS_INSTALL_EXTRA}; do
> +            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
> +        done
> +    fi
> +
>      if [ -n "${CONFIG_MODULES}" ]; then
>          echo Module.symvers >> ${obj_hdr_files}
>      fi
> diff --git a/meta/recipes-kernel/linux/linux-custom.inc
> b/meta/recipes-kernel/linux/linux-custom.inc
> index 6aa70fd3..7e312b75 100644
> --- a/meta/recipes-kernel/linux/linux-custom.inc
> +++ b/meta/recipes-kernel/linux/linux-custom.inc
> @@ -48,6 +48,8 @@ LINUX_VERSION_EXTENSION ?= ""
>  
>  KERNEL_DEFCONFIG ??= ""
>  
> +HEADERS_INSTALL_EXTRA ??= ""
> +
>  # Add our template meta-data to the sources
>  FILESPATH:append := ":${FILE_DIRNAME}/files"
>  SRC_URI += "file://debian"
> @@ -84,6 +86,7 @@ TEMPLATE_VARS += "                \
>      KAFLAGS                       \
>      DISTRIBUTOR                   \
>      KERNEL_EXTRA_BUILDARGS        \
> +    HEADERS_INSTALL_EXTRA         \
>  "
>  
>  inherit dpkg
> @@ -224,6 +227,15 @@ do_prepare_build:prepend() {
>  
>  	# produce a changelog for our kernel build
>  	deb_add_changelog
> +
> +	# make sure user-specified directories do exist in ${S}
> +	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
> +		for d in ${HEADERS_INSTALL_EXTRA}; do
> +			[ -d ${S}/${d} ] || {
> +				bbfatal "HEADERS_INSTALL_EXTRA:
> '${d}' not found in \${S}!"
> +			}
> +		done
> +	fi
>  }
>  
>  # build directory for our "full" kernel build
> -- 
> 2.39.2
> 

Applied to next, thanks.

Patch

diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index 65cd98b3..21c558d2 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -634,3 +634,15 @@  into kernel kbuild package.
 
 When downloading from debian snapshot mirrors, rate limits might apply.
 To limit the amount of parallel fetching to n kB / s, you can set `ISAR_APT_DL_LIMIT="<n>`.
+
+### Custom directories in vendor kernels
+
+Some vendor kernels come with additional directories to be included in the
+linux-headers package in order to support building of their out-of-tree
+drivers. `HEADERS_INSTALL_EXTRA` may be set to a list of directories relative
+to ${S} in any kernel recipes that includes `linux-custom.inc`. A l4t kernel
+recipe would use the following setting:
+
+```
+HEADERS_INSTALL_EXTRA += "nvidia"
+```
diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
index 00011517..0a7bdd66 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
@@ -193,6 +193,12 @@  kernel_headers() {
     (cd ${S}; find arch/${ARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform) >>${src_hdr_files}
     (cd ${S}; find $(find arch/${ARCH} -name include -o -name scripts -type d) -type f) >>${src_hdr_files}
 
+    if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
+        for d in ${HEADERS_INSTALL_EXTRA}; do
+            (cd ${S}; find ${d} -type f) >>${src_hdr_files}
+        done
+    fi
+
     if [ -n "${CONFIG_MODULES}" ]; then
         echo Module.symvers >> ${obj_hdr_files}
     fi
diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 6aa70fd3..7e312b75 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -48,6 +48,8 @@  LINUX_VERSION_EXTENSION ?= ""
 
 KERNEL_DEFCONFIG ??= ""
 
+HEADERS_INSTALL_EXTRA ??= ""
+
 # Add our template meta-data to the sources
 FILESPATH:append := ":${FILE_DIRNAME}/files"
 SRC_URI += "file://debian"
@@ -84,6 +86,7 @@  TEMPLATE_VARS += "                \
     KAFLAGS                       \
     DISTRIBUTOR                   \
     KERNEL_EXTRA_BUILDARGS        \
+    HEADERS_INSTALL_EXTRA         \
 "
 
 inherit dpkg
@@ -224,6 +227,15 @@  do_prepare_build:prepend() {
 
 	# produce a changelog for our kernel build
 	deb_add_changelog
+
+	# make sure user-specified directories do exist in ${S}
+	if [ -n "${HEADERS_INSTALL_EXTRA}" ]; then
+		for d in ${HEADERS_INSTALL_EXTRA}; do
+			[ -d ${S}/${d} ] || {
+				bbfatal "HEADERS_INSTALL_EXTRA: '${d}' not found in \${S}!"
+			}
+		done
+	fi
 }
 
 # build directory for our "full" kernel build