| Exporting kernel headers for use by userspace | |
| ============================================= | |
| The "make headers_install" command exports the kernel's header files in a | |
| form suitable for use by userspace programs. | |
| The linux kernel's exported header files describe the API for user space | |
| programs attempting to use kernel services. These kernel header files are | |
| used by the system's C library (such as glibc or uClibc) to define available | |
| system calls, as well as constants and structures to be used with these | |
| system calls. The C library's header files include the kernel header files | |
| from the "linux" subdirectory. The system's libc headers are usually | |
| installed at the default location /usr/include and the kernel headers in | |
| subdirectories under that (most notably /usr/include/linux and | |
| /usr/include/asm). | |
| Kernel headers are backwards compatible, but not forwards compatible. This | |
| means that a program built against a C library using older kernel headers | |
| should run on a newer kernel (although it may not have access to new | |
| features), but a program built against newer kernel headers may not work on an | |
| older kernel. | |
| The "make headers_install" command can be run in the top level directory of the | |
| kernel source code (or using a standard out-of-tree build). It takes two | |
| optional arguments: | |
| make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr | |
| ARCH indicates which architecture to produce headers for, and defaults to the | |
| current architecture. The linux/asm directory of the exported kernel headers | |
| is platform-specific, to see a complete list of supported architectures use | |
| the 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 and | |
| headers are installed in 'INSTALL_HDR_PATH/include'. | |
| The command "make headers_install_all" exports headers for all architectures | |
| simultaneously. (This is mostly of interest to distribution maintainers, | |
| who create an architecture-independent tarball from the resulting include | |
| directory.) You also can use HDR_ARCH_LIST to specify list of architectures. | |
| Remember to provide the appropriate linux/asm directory via "mv" or "ln -s" | |
| before building a C library with headers exported this way. | |
| The kernel header export infrastructure is maintained by David Woodhouse | |
| <dwmw2@infradead.org>. |