Exporting kernel headers for use by userspace¶
The “make headers_install” command exports the kernel’s header files in aform suitable for use by userspace programs.
The linux kernel’s exported header files describe the API for user spaceprograms attempting to use kernel services. These kernel header files areused by the system’s C library (such as glibc or uClibc) to define availablesystem calls, as well as constants and structures to be used with thesesystem calls. The C library’s header files include the kernel header filesfrom the “linux” subdirectory. The system’s libc headers are usuallyinstalled at the default location /usr/include and the kernel headers insubdirectories under that (most notably /usr/include/linux and/usr/include/asm).
Kernel headers are backwards compatible, but not forwards compatible. Thismeans that a program built against a C library using older kernel headersshould run on a newer kernel (although it may not have access to newfeatures), but a program built against newer kernel headers may not work on anolder kernel.
The “make headers_install” command can be run in the top level directory of thekernel source code (or using a standard out-of-tree build). It takes twooptional arguments:
make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr
ARCH indicates which architecture to produce headers for, and defaults to thecurrent architecture. The linux/asm directory of the exported kernel headersis platform-specific, to see a complete list of supported architectures usethe command:
ls -d include/asm-* | sed 's/.*-//'
INSTALL_HDR_PATH indicates where to install the headers. It defaults to“./usr”.
An ‘include’ directory is automatically created inside INSTALL_HDR_PATH andheaders are installed in ‘INSTALL_HDR_PATH/include’.
The kernel header export infrastructure is maintained by David Woodhouse<dwmw2@infradead.org>.