2013-10-21 58 views
4

我从git存储库编译了各种Linux内核。有时我将内核复制到其他系统并需要内核头文件来编译外部模块。如何提取内核头文件以便稍后编译内核模块

我试图运行“make headers_install”,但它只生成一个include /文件夹。当我试图将外部模块指向该文件夹时,它会抱怨找不到Makefile。

什么是打包内核头部署的正确方法?

谢谢。

+0

你是什么意思?有时我将内核复制到其他系统,需要内核头文件来编译外部模块。将内核根目录复制到另一个系统?如果是的话,那么你只需要找出如何通过提供构建内核的路径来构建模块。 –

+0

@VivekS我不想将整个内核根目录复制到另一个系统,因为它是一个git树,所以它很大。我只想复制内核源码的快照。即使如此,我也不想使用git归档文件,因为对于构建内核模块,我不需要.c文件。 – Patrick

回答

3

改为创建内核包,这是基于dpkg的发行版的“make deb-pkg”,基于RPM的发行版是“make rpm-pkg”。这些创建多个包,其中一个是可用于外部模块构建的包。这应该是Debian软件包的linux-headers- *和RPM版本的“devel”软件包。

+0

这几乎就是我正在寻找的东西。如果它只生成头文件,它会是完美的,因为我的内核映像很大(〜500MB),所以需要一段时间才能生成未使用的内核映像。尽管如此,如果没有别的,这是一个可行的解决方案! – Patrick

+0

我刚刚发现还有一个binrpm-pkg目标,它至少不应该构建源代码包(除非devel包被视为源包,我不知道)。 Makefile和脚本都在脚本/包中。我对RPM的构建知之甚少,但如果你这样做了,你可以在Makefile中修改rpm调用来构建你需要的包。 –

+0

在Debian上,有'kernel-package'包中的'make-kpkg'程序;我发现为安装构建内核映像和头文件的最简单方法。 –

0

在某些方面,这只是the previous answer的扩展。如果您查看内核源代码中的scripts/package/builddeb文件,您会发现脚本代码,用于从内核构建中选择构建外部模块所需的文件,并将它们放入/ usr/src/linux-headers- $ version。通过在builddeb文件中搜索字符串“#Build kernel header package”,我可以在我的本地内核版本中找到该脚本代码。如果您想手动执行该操作,则可以手动执行该脚本代码。