2011-09-20 74 views
7

从树中构建内核驱动程序时, 我在驱动程序目录中运行make,其中KERNELDIR或者是内核源的路径,或者是头文件。正确导出Linux头文件,模块

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

试图自己使用来构建头时:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

我找到出口不适合建立针对模块(不完整的内核源代码树) 几个文件和文件夹似乎缺少像生成文件,脚本,或include/generated/autoconf.hinclude/config/auto.conf

的Debian做的事情在可用方式,如在rules.real所描述的,尽管它的确超过在Documentation/make/headers_install.txt描述,这看毫秒不是“标准”的方式。

总之:我如何正确导出linux标题,所以我可以建立外部模块对它?

+0

我自己有'autoconf.h'问题。如果我没有记错的话,我只是从附近的文件夹复制它,我已经建立了我的内核 – Shahbaz

回答

2

我认为headers_install的内核make文件目标是用于生成用于生成C库和工具链的Linux头的目的,而不是为了能够构建出树内核模块sans全配置的内核源代码。

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

5

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

但是,用户空间中不可见的所有内容,即对内核“私有”或换句话说内部API,都不会暴露给用户空间。

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