【问题标题】:Compiling Linux Kernel Error xt_CONNMARK.h编译 Linux 内核错误 xt_CONNMARK.h
【发布时间】:2013-03-24 14:21:41
【问题描述】:

出于一个非常特殊的原因,我正在尝试使用内核中内置的几个模块来编译 Linux 2.6.32.6 内核。我在 NFS 上包含了根文件系统,试图通过 LAN PXE 引导我自己的自定义救援 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 的依赖项,但此错误仍然不断发生。

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

【问题讨论】:

  • 您可能需要清理该文件的dependskbuild 应该会发现您更改了 .config,但对于这个旧版本的 Linux 可能不会。
  • 首先执行make clean 或手动删除Makefile 依赖信息。您的问题似乎非常熟悉,但我不记得问题是什么。可能与make O=...有关。
  • 经过几次尝试,我删除了 Kbuild 中的特定条目。然而奇怪的是,xt_CONNMARK.h 有 2 个条目。失败的一个全是大写,另一个全是小写。遇到了更多的情况,但是一旦我删除了所有事件(总共大约 5 个),系统就可以正确编译和启动。
  • @artlessnoise 知道为什么会出现这个问题吗?是不是故意的?
  • 我在做一些奇怪的事情,我切换了一个文件,手动编辑了.config 或类似的东西。它可能与编译器有关。 “C”文件有#include <xt_connmark.h>,文件名为xt_CONNMARK.h 或类似名称。抱歉,我可以很好地放置它,但我肯定对那个文件有类似的问题。依赖是使用gcc 自动生成的,因此它可能制定了混合大小写依赖规则,查看#include 而不是实际打开的文件。

标签: linux-kernel


【解决方案1】:

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

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

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

【讨论】:

  • 即使在获得 Linux 源代码并查看 v5.7 版本后,我仍然遇到此问题。尽管如此,还是有一些文件丢失了。
猜你喜欢
  • 2018-04-19
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多