正确导出Linux头文件,模块

从树中构build内核驱动程序时,我在驱动程序目录中运行make, KERNELDIR是内核源的path,或者是头文件。

 make -C $(KERNELDIR) M=$(PWD) modules 

当试图自己build立标题使用:

 make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

我发现导出不适合构build模块针对(没有完整的内核源码树)几个文件和文件夹似乎缺less,如一个Makefile,脚本, include/generated/autoconf.hinclude/config/auto.conf等。

Debian用rules.real中描述的方式处理事情,尽pipe它比Documentation/make/headers_install.txt描述的Documentation/make/headers_install.txt ,这似乎不是“标准”方式。

简而言之:我如何正确导出Linux标题,所以我可以build立外部模块呢?

headers_install是为了从用户空间的角度导出适合使用的一组头文件。 这是用户空间公开的内核的API。 假设您创建一个美妙的新的ioctl,具有一个custome数据结构。 这是你不想让用户空间知道的那种信息,以便用户空间程序可以使用你精彩的新的ioctl。

但是,从用户空间不可见的所有内容,即对内核“私有”,或者换言之内部API,都不会暴露给用户空间。

所以要构建一个树模块,你需要一个完整配置的源代码树,或者你的发行版打包的内核头文件。 例如,在Ubuntu / Debian上查找linux-headers或linux-kernel-headers软件包。

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

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