2013-03-24 97 views
5

我试图编译Linux 2.6.32.6内核,内核中包含几个模块,这是因为一个非常特定的原因。我已经在NFS上包含了Root文件系统,试图通过局域网PXE启动我自己定制的救援Live-CD。在包含ROOT_NFS所需的依赖关系和模块之后,我试图编译仅与Linux内核make bzImage。在运行此我得到的错误编译Linux内核错误xt_CONNMARK.h

make[4]: *** No rule to make target './linux-2.6.32.6/include/linux/netfilter/xt_CONNMARK.h', needed by './linux-2.6.32.6/usr/include/linux/netfilter/.install'. Stop. 

现在,我已经尝试在配置禁用Netfilter的模块,并试图找到使需要Netfilter的任何相关性,但这个错误仍不断发生。

任何解决此错误的建议都会很棒。

+0

您可能需要清理该文件的'依赖'。 * kbuild *应该已经找到了更改'.config'的事实,但可能不适用于此旧版本的Linux。 – 2013-03-24 16:23:06

+0

先做一个'make clean'或手动删除'Makefile'依赖信息。你的问题似乎令人难以置信,但我不记得是什么问题。它可能与'make O = ...'有关。 – 2013-03-24 17:07:31

+0

经过多次尝试,我删除了Kbuild中的特定条目。然而奇怪的是在那里有两个'xt_CONNMARK.h'条目。失败的人全部上限,而另一人全部小写。通过这个进入更多的例子,但是一旦我删除了所有事件(总共大约5个),系统编译并正确引导。 – Blackninja543 2013-03-24 17:30:36

回答

10

这很可能是因为您有由于通过大小写不敏感的文件系统传输而丢失了源树中的某些文件。从不同的时间起,Linux源代码树中大约有15个不同的文件,名称相同,但大小写不同。这通常不是构建Linux内核的人员的问题,因为所有合理的文件系统都区分大小写。

对于那些很好奇的,这种方式的文件都在netfilter树中 - 例如,参见include/linux/netfilter/xt_CONNTRACK.hinclude/linux/netfilter/xt_conntrack.h在v3.0中。

所以,这些文件确实存在,但你失去了它们。获取一个新的源代码树,将其解压缩到区分大小写的文件系统中,并且不会再出现此错误。或者,如果您害怕丢失对树的修改,则从“原始”源树或github mirror of the kernel复制文件 - 它们很可能不会在您正在编译的版本中从发行版更改。