正确导出Linux标头,模块

i_w*_*arn 7 linux kernel module header

在树中构建内核驱动程序时,我在drivers目录中运行make,这里KERNELDIR是内核源代码的路径,或者是头文件.

make -C $(KERNELDIR) M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)

在尝试使用以下方法构建标头时:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR)
Run Code Online (Sandbox Code Playgroud)

我觉得不适合出口建立一个反模块(不完整的内核源代码树)的几个文件和文件夹似乎丢失,就像一个Makefile文件,脚本,include/generated/autoconf.hinclude/config/auto.conf

Debian以一种可用的方式处理事务,如rules.real中所描述的那样,尽管它的描述不仅仅是描述的Documentation/make/headers_install.txt,似乎不是"标准"方式.

简而言之:我如何正确导出linux头文件,以便我可以针对它构建外部模块?

sho*_*nex 5

headers_install用于从用户空间的角度导出一组适合使用的头文件.它是内核的用户空间公开API.假设您使用自定义数据结构创建了一个精彩的新ioctl.这是您不希望用户空间知道的那种信息,因此用户空间程序可以使用您精彩的新ioctl.

但是,从用户空间看不到的内容,即内核的"私有",或者内部API的内容,都不会暴露给用户空间.

因此,要构建一个out of tree模块,您需要一个完整配置的源树,或者由发行版打包的内核头.例如,在Ubuntu/Debian上查找linux-headers或linux-kernel-headers包.


gby*_*gby 3

我相信 headers_install 的内核 make 文件目标是为了生成用于生成 C 库和工具链的 Linux 头文件,而不是为了能够在没有完整配置的内核源代码的情况下构建树内核模块。

事实上,我猜测不支持在没有完整内核源代码的情况下构建树内核模块,这实际上是发行版创建的“黑客”。