where should linux kernel modules install headers

426 Views Asked by At

I have an out of tree linux kernel module that has a public header. This header is intended to be shared with other modules, as it declares exported functions of the module, and not with userspace.

  • where should my module install this headers?
  • that make target should be used for this?

I read about the Kbuild header-y variable but it does not seem to be in use in current kernel any more. There is the header_install and headers_install_all target. But this are intended to generate userspace api headers that are placed in /usr/include? And finaly just placing the headers in normal includepath (e.g. /usr/include) would not work as this is not part of the normal kernel includepath during module build.

1

There are 1 best solutions below

0
eddy On BEST ANSWER

so after weeks of search it seems that this is it. there is no predefined place for out of tree build module dependency headers.

my current solution is to add this on the modules that export headers:

INSTALL_MOD_PATH ?= /
INSTALL_HDR_PATH ?= $(INSTALL_MOD_PATH)/usr/include/
INSTALL_HDR_PATH_KERNEL ?= $(INSTALL_MOD_PATH)/usr/src/include/


header_install:
    install -d $(INSTALL_HDR_PATH)
    install -d $(INSTALL_HDR_PATH_KERNEL)
    install -Dm 0655 ./user.h $(INSTALL_HDR_PATH)/user.h
    install -Dm 0655 ./mod-external.h $(INSTALL_HDR_PATH_KERNEL)/mod-external.h

and in the dependen modules do this on build

export KCFLAGS="-I$(INSTALL_MOD_PATH)/usr/src/include/"
make

this promotes /usr/src/include to be the folder for header exchange