^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) =============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) Exporting kernel headers for use by userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) The "make headers_install" command exports the kernel's header files in a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) form suitable for use by userspace programs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) The linux kernel's exported header files describe the API for user space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) programs attempting to use kernel services. These kernel header files are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) used by the system's C library (such as glibc or uClibc) to define available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) system calls, as well as constants and structures to be used with these
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) system calls. The C library's header files include the kernel header files
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) from the "linux" subdirectory. The system's libc headers are usually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) installed at the default location /usr/include and the kernel headers in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) subdirectories under that (most notably /usr/include/linux and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /usr/include/asm).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) Kernel headers are backwards compatible, but not forwards compatible. This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) means that a program built against a C library using older kernel headers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) should run on a newer kernel (although it may not have access to new
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) features), but a program built against newer kernel headers may not work on an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) older kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) The "make headers_install" command can be run in the top level directory of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) kernel source code (or using a standard out-of-tree build). It takes two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) optional arguments::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) ARCH indicates which architecture to produce headers for, and defaults to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) current architecture. The linux/asm directory of the exported kernel headers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) is platform-specific, to see a complete list of supported architectures use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) the command::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ls -d include/asm-* | sed 's/.*-//'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) INSTALL_HDR_PATH indicates where to install the headers. It defaults to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) "./usr".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) An 'include' directory is automatically created inside INSTALL_HDR_PATH and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) headers are installed in 'INSTALL_HDR_PATH/include'.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) The kernel header export infrastructure is maintained by David Woodhouse
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) <dwmw2@infradead.org>.