[Buildroot] [PATCH] linux: add an option to install kernel headers into staging

Nicolas Serafini nicolas.serafini at sensefly.com
Wed Mar 25 10:00:43 UTC 2015


Yann, All,

On Tue, 24 Mar 2015 21:57:09 +0100
"Yann E. MORIN" <yann.morin.1998 at free.fr> wrote:

> Nicolas, All,
> 
> On 2015-03-24 11:00 +0100, Nicolas Serafini spake thusly:
> > The kernel headers are installed into /usr/src/linux-headers-version
> > of the staging folder.
> > 
> > These headers can be used, for example, by a post build script to
> > install or update some new headers from the kernel in /usr/include
> > of the staging.
> 
> No, no. The kernel headers in staging are those that come from the
> toolchain.

Yes I'm ok with that.

> 
> When the toolchain has been compiled, parts of it (notably the C
> library) have been configured according to whatever API/ABI the kernel
> headers where exporting to userland. Those headers can *not* be
> changed after the fact.
> 
> So, this is a big NAK from me, sorry.

It's possible my example is not good. I'm ok with the fact that
headers can not be changed after but if you have a custom kernel with
new custom API and you want to build userspace software that use theses
API you need to have new headers into staging.

I'm going to explain my case. For me Buildroot is a part of a biggest
build system. Buildroot is used to build/generate the bootloader, the
kernel and the rootfs. After that, the global build system use the
output of buildroot to build our own software.

I have a custom kernel with new API that are used by some userspace
software and this patch give only a way to retrieve these cleaned
headers (#ifdef KERNEL removed) correctly exported by the kernel
instead of taking headers directly into the kernel source.
It's why theses headers are into /usr/src/linux-headers-version instead
of /usr/include

Regards,

Nicolas



> 
> Regards,
> Yann E. MORIN.
> 
> > Signed-off-by: Nicolas Serafini <nicolas.serafini at sensefly.com>
> > ---
> >  linux/Config.in | 6 ++++++
> >  linux/linux.mk  | 9 +++++++++
> >  2 files changed, 15 insertions(+)
> > 
> > diff --git a/linux/Config.in b/linux/Config.in
> > index fa3232f..dd97211 100644
> > --- a/linux/Config.in
> > +++ b/linux/Config.in
> > @@ -354,6 +354,12 @@ config BR2_LINUX_KERNEL_INSTALL_TARGET
> >  	  /boot if DTBs have been generated by the kernel build
> >  	  process.
> >  
> > +config BR2_LINUX_KERNEL_INSTALL_HEADERS
> > +	bool "Install kernel headers to staging"
> > +	help
> > +	  Select this option to have the kernel headers installed
> > to
> > +	  staging in /usr/src/linux-headers-version folder.
> > +
> >  # Linux extensions
> >  source "linux/Config.ext.in"
> >  
> > diff --git a/linux/linux.mk b/linux/linux.mk
> > index 5a0ba01..c7792d4 100644
> > --- a/linux/linux.mk
> > +++ b/linux/linux.mk
> > @@ -7,6 +7,9 @@
> >  LINUX_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION))
> >  LINUX_LICENSE = GPLv2
> >  LINUX_LICENSE_FILES = COPYING
> > +ifeq ($(BR2_LINUX_KERNEL_INSTALL_HEADERS),y)
> > +LINUX_INSTALL_STAGING=YES
> > +endif
> >  
> >  # Compute LINUX_SOURCE and LINUX_SITE from the configuration
> >  ifeq ($(BR2_LINUX_KERNEL_CUSTOM_TARBALL),y)
> > @@ -54,6 +57,7 @@ LINUX_MAKE_FLAGS = \
> >  	HOSTCFLAGS="$(HOSTCFLAGS)" \
> >  	ARCH=$(KERNEL_ARCH) \
> >  	INSTALL_MOD_PATH=$(TARGET_DIR) \
> > +
> > INSTALL_HDR_PATH="$(STAGING_DIR)/usr/src/linux-headers-$(LINUX_VERSION)"
> > \ CROSS_COMPILE="$(CCACHE) $(TARGET_CROSS)" \
> > DEPMOD=$(HOST_DIR)/sbin/depmod 
> > @@ -297,6 +301,11 @@ define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
> >  endef
> >  endif
> >  
> > +ifeq ($(BR2_LINUX_KERNEL_INSTALL_HEADERS),y)
> > +define LINUX_INSTALL_STAGING_CMDS
> > +	$(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D)
> > $(LINUX_TARGET_NAME) headers_install +endef
> > +endif
> >  
> >  define LINUX_INSTALL_HOST_TOOLS
> >  	# Installing dtc (device tree compiler) as host tool, if
> > selected -- 
> > 2.3.4
> > 
> > _______________________________________________
> > buildroot mailing list
> > buildroot at busybox.net
> > http://lists.busybox.net/mailman/listinfo/buildroot
> 



-- 
Nicolas Serafini
R&D Embedded Software Engineer

www.sensefly.com
Route de Genève 38
1033 Cheseaux-Lausanne
Switzerland



More information about the buildroot mailing list