我知道如果我想编译自己的 Linux 内核,我需要 Linux 内核头文件,但它们到底有什么用呢?
我发现下面/usr/src/
好像有几十个C头文件。但它们的目的是什么,它们不是直接包含在内核源代码中吗?
答案1
头文件定义一个接口:它们指定如何定义源文件中的函数。
使用它们是为了使编译器可以检查函数的使用是否正确,因为头文件中存在函数签名(返回值和参数)。对于此任务,不需要实际实现该功能。
您可以对完整的内核源代码执行相同的操作,但您将安装许多不必要的文件。
示例:如果我想使用该功能
int foo(double param);
在程序中我不需要知道它foo
是如何实现的,我只需要知道它接受单个参数(double
)并返回一个整数。
答案2
如上所述,头文件定义了程序使用的函数和结构的接口。
对于内核头文件,这些函数和结构位于内核本身内。
如果您正在构建完整的内核,那么显然您需要完整的源文件,而不仅仅是标头。但是,如果您正在编译链接到内核的设备驱动程序或其他可加载模块,那么您只需要头文件,因此可以通过不安装完整源代码来节省空间。
软件包的分离使得您可以只安装头文件,这在一定程度上是历史性的,因为当磁盘较小时,磁盘使用的差异曾经是一个重要的考虑因素。如今,将整个源文件放在磁盘上(不必要)将不再是主要的磁盘空间考虑因素。
答案3
术语“头文件”源自C用于编写 Linux 内核的编程语言。
从一个很高的层面来解释它......
在C语言中,你需要有一个前向声明在使用某个函数之前。换句话说,是对函数、其参数以及它返回的数据类型的描述。通常的做法是将所有前向声明放入一个名为标头。其他程序的源代码文件可以使用include
此标头,并在编译后可以访问生成的可执行程序中的所有函数。
.h
Linux 头文件是包含 Linux 内核提供的可以从其他程序调用的函数的所有文件。