Linux kernel 编译Linux内核错误xt_CONNMARK.h

Linux kernel 编译Linux内核错误xt_CONNMARK.h,linux-kernel,Linux Kernel,出于一个非常特殊的原因,我正试图编译Linux 2.6.32.6内核,内核中内置了几个模块。我在NFS上加入了根文件系统,试图通过PXE通过LAN引导我自己的定制rescue Live CD。在包含ROOT_NFS所需的依赖项和模块之后,我尝试使用make bzImage编译Linux内核。当这个运行时,我得到了错误 make[4]: *** No rule to make target './linux-2.6.32.6/include/linux/netfilter/xt_CONNMARK.

出于一个非常特殊的原因,我正试图编译Linux 2.6.32.6内核,内核中内置了几个模块。我在NFS上加入了根文件系统,试图通过PXE通过LAN引导我自己的定制rescue Live CD。在包含ROOT_NFS所需的依赖项和模块之后,我尝试使用
make bzImage
编译Linux内核。当这个运行时,我得到了错误

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的任何依赖项,但此错误仍然不断发生


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

这很可能是因为您通过不区分大小写的文件系统传输文件时,丢失了源代码树中的一些文件。Linux源代码树中大约有15个不同时期的不同文件,它们的名称相同,但大小写不同。对于构建Linux内核的人来说,这通常不是问题,因为所有合理的文件系统都是区分大小写的

对于那些好奇的人来说,这种方式的文件都在netfilter树中——例如,请参见v3.0中的
include/linux/netfilter/xt_CONNTRACK.h
include/linux/netfilter/xt_CONNTRACK.h


所以,这些文件确实存在,但您丢失了它们。获取一个新的源代码树,将其解压缩到一个区分大小写的文件系统中,您就不会再有这个错误了。或者,从“原始”源代码树或中复制文件,如果您担心丢失对源代码树的修改-它们很可能不会从您正在编译的版本中的版本中更改。

您可能需要清除该文件的
依赖项。kbuild应该已经发现您更改了
.config
,但在这个较旧版本的Linux中可能没有。请先执行
清除
,或者手动删除
生成文件
依赖项信息。你的问题似乎非常熟悉,但我记不起是什么问题了。它可能与
makeo=…
有关。在多次尝试之后,我删除了Kbuild中的特定条目。然而奇怪的是,这里有两个
xt\u CONNMARK.h
的条目。失败的一个都是大写,而另一个都是小写。遇到了更多这样的情况,但一旦我删除了所有事件(总共大约5个),系统就正确编译并启动了。@artlessnoise你知道为什么会出现这个问题吗?这是故意的吗?我在做一些奇怪的事情,我切换一个文件,手动编辑
.config
或类似的东西。它可能与编译器有关。“C”文件具有
#include
,文件名为
xt\u CONNMARK.h
或类似名称。对不起,我可以很好地放置它,但我肯定有一个类似的问题与该文件排序。依赖项是用
gcc
自动神奇地生成的,因此它可能制定了一个混合大小写依赖规则,查看
#include
而不是实际打开的文件。即使在获得Linux源代码并检查v5.7版本后,我仍然存在这个问题。但仍有一些文件丢失。