正确导出Linux头文件、模块

正确导出Linux头文件、模块,linux,module,header,kernel,Linux,Module,Header,Kernel,在用树构建内核驱动程序时, 我在drivers目录中运行make,其中KERNELDIR要么是内核源代码的路径,要么是头文件的路径 make -C $(KERNELDIR) M=$(PWD) modules 尝试使用以下方法构建标题时: make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 我发现导出不适合构建模块(没有完整的内核源代码树) 似乎缺少几个文件和文件夹,如Makefile、脚本、include/generat

在用树构建内核驱动程序时, 我在drivers目录中运行make,其中
KERNELDIR
要么是内核源代码的路径,要么是头文件的路径

make -C $(KERNELDIR) M=$(PWD) modules
尝试使用以下方法构建标题时:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR)
我发现导出不适合构建模块(没有完整的内核源代码树) 似乎缺少几个文件和文件夹,如Makefile、脚本、
include/generated/autoconf.h
include/config/auto.conf

Debian以一种可用的方式做事情,如rules.real中所述,尽管它比
Documentation/make/headers\u install.txt中描述的做得更多,这似乎不是“标准”方式


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

我相信headers\u install的内核生成文件目标是为了生成用于生成C库和工具链的Linux header,而不是为了在没有完整配置的内核源代码的情况下构建树外内核模块


事实上,我猜没有完整内核源代码的树形内核模块是不受支持的,事实上是由发行版创建的一种“黑客行为”。

headers\u安装是为了导出一组适合从用户空间角度使用的头文件。它是内核的用户空间公开API。假设您创建了一个具有自定义数据结构的出色的新ioctl。这是您不想让用户空间知道的信息,这样用户空间程序就可以使用您出色的新ioctl

但是,从用户空间看不到的所有东西,即内核的“私有”,或者换句话说,内部API,都不会暴露给用户空间

因此,要构建树外模块,您需要完整配置的源代码树,或者由发行版打包的内核头文件。查找linux头文件或linux内核头文件
例如,Ubuntu/Debian上的包。

我自己在
autoconf.h
上遇到了麻烦。如果我没记错的话,我只是从我构建内核的附近的文件夹中复制了它