Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Possible Duplicate:
What does a kernel source tree contain? Is this related to Linux kernel headers?

I know that if I want to compile my own Linux kernel I need the Linux kernel headers, but what exactly are they good for?

I found out that under /usr/src/ there seem to be dozens of C header files. But what is their purpose, aren't they included in the kernel sources directly?

share|improve this question
add comment

marked as duplicate by Gilles, jasonwryan, Kevin, Renan, warl0ck Sep 8 '12 at 1:02

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

3 Answers

Hi the header files define an interface: they specify how the functions in the source file are defined.

They are used so that a compiler can check if the usage of a function is correct as the function signature (return value and parameters) is present in the header file. For this task the actual implementation of the function is not necessary.

You could do the same with the complete kernel sources but you will install a lot of unnecessary files.

Example:

if I want to use the function

int foo(double param);

in a program I do not need to know how the implementation of foo is, I just need to know that it accepts a single param (double) and returns an integer.

share|improve this answer
add comment

As stated, header files define interfaces to functions as well as structures used by programs.

In the case of the kernel header files, these functions and structures are within the kernel itself.

If you are building a complete kernel, then, obviously, you need the complete source files, not just the headers. However, if you are compiling a device driver or other loadable module which links into the kernel then you only need the header files, so can save space by not installing the full sources.

The separation of packages so that you can install just the header files is partly historical as the difference in disk usage used to be a significant consideration when disks were smaller. These days, having the entire source on disk (unnecessarily) would not be a major disk space consideration.

share|improve this answer
add comment

The term header files originates from the C programming language used in writing the Linux kernel.

To explain it from a very high level...

Un C you need to have a forward declaration of a function before using it. In other words, a description of the function, its parameters, and what kind of data it returns. It's common practice to put all of the forward declarations into a single file called a header. Source code files for other programs can then an include statement for this header and have access to all of the functions in the resulting program executable once it has been compiled.

The Linux header files are all of the .h files that contain the functions that the Linux kernel provides that can be called from other programs.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.