Linux 内核头文件到底是什么?

Joh*_*mBF 39 linux compiling header-file linux-kernel

可能的重复:
内核源代码树包含什么?这与 Linux 内核头文件有关吗?

我知道如果我想编译我自己的 Linux 内核,我需要 Linux 内核头文件,但它们到底有什么用?

我发现下面/usr/src/似乎有几十个 C 头文件。但是它们的目的是什么,它们不是直接包含在内核源代码中吗?

Mat*_*teo 30

头文件定义了一个接口:它们指定源文件中的函数是如何定义的。

使用它们是为了让编译器可以检查函数的使用是否正确,因为函数签名(返回值和参数)存在于头文件中。对于这个任务,函数的实际实现不是必需的。

你可以对完整的内核源代码做同样的事情,但你会安装很多不必要的文件。

示例:如果我想使用该功能

int foo(double param);
Run Code Online (Sandbox Code Playgroud)

在程序中,我不需要知道它的实现foo方式,我只需要知道它接受单个参数 ( double) 并返回一个整数。


Sta*_*mer 19

如前所述,头文件定义了程序使用的函数和结构的接口。

对于内核头文件,这些函数和结构在内核本身中。

如果您正在构建一个完整的内核,那么很明显,您需要完整的源文件,而不仅仅是头文件。但是,如果您正在编译链接到内核的设备驱动程序或其他可加载模块,那么您只需要头文件,因此可以通过不安装完整源代码来节省空间。

分离包以便您可以只安装头文件在一定程度上是历史性的,因为当磁盘较小时,磁盘使用的差异曾经是一个重要的考虑因素。如今,将整个源(不必要)放在磁盘上不再是主要的磁盘空间考虑因素。


bah*_*mat 14

术语头文件源自用于编写 Linux 内核的C编程语言。

从一个非常高的层次来解释它......

在 C 中,您需要在使用函数之前对其进行前向声明。换句话说,函数的描述、它的参数以及它返回的数据类型。通常的做法是将所有前向声明放入一个名为header 的文件中。其他程序的源代码文件可以使用include这个头文件,并且在编译后可以访问生成的程序可执行文件中的所有函数。

Linux 头文件是所有.h包含 Linux 内核提供的可以从其他程序调用的功能的文件。