内核编译时出现`missing-syscalls'错误

时间:2009-09-01 22:37:32

标签: linux linux-kernel

这些是我在机器上编译linux源代码的步骤:
1.将配置文件从/ boot复制到/usr/src/kernels/2.6.29.4-167.fc11.i586/目录
2. make oldconfig
3.制作

步骤3失败,出现以下错误: make [1]:***没有规则来制作目标`missing-syscalls'。停止。

在x86机器上编译。 有什么建议 ? 如果不属于此问题,请随时关闭此问题。

4 个答案:

答案 0 :(得分:2)

虽然听起来很陈旧,但目前为了在系统上获取内核源代码,您必须手动选择所需的源代码。一个人认为人们不像以前那样经常构建内核,当然你可能想要开发一个与你正在运行的版本不匹配的内核。

因此,例如我想在我的CentOS 6.2盒子上安装VBox,而大多数内核模块可以在没有完整源的情况下进行编译,但这次更新失败了。

所以我找到了这个wiki页面: http://wiki.centos.org/HowTos/I_need_the_Kernel_Source

它没有列出6.2,并且最终目录名的命名约定已经更改,因此要获取6.2内核源代码,请转到http://vault.centos.org/6.2/updates/Source/并选择所需的版本。如果您想要其他版本的来源,请转到http://vault.centos.org/并从那里导航。

文档建议不要对内核源代码进行rpm-build。

答案 1 :(得分:0)

制作新的配置文件。也许旧的不工作?

答案 2 :(得分:0)

我无法回答为什么会发生这种错误:
步骤3失败并出现以下错误:make [1]:***没有规则使目标`missing-syscalls'。停止。

但我能够很好地编译vanilla版本,没有上述错误。 我在serverfault上也提出了同样的问题,它对所采取的步骤有更详细的解释:https://serverfault.com/questions/61354/missing-syscalls-error-during-kernel-compilation

答案 3 :(得分:0)

因为内核 3.x.x 如果尝试构建仅准备了单个Makefile的外部模块,则会出现此消息。

相反,根据this manual

拆分为 Kbuild (其中列出了所有源文件,例如):

obj-m := module_source.c

和简单的 Makefile (只有默认的make指令,示例):

default: $(MAKE) -C $(KDIR) M=$$PWD

将解决问题。

以防万一,外部模块构建指令将遵循:

make -C <kernel source path> -M=<module source folder>

示例:make -C . -M=extra/