无法配置 Linux 内核 v3.8.9 源代码

无法配置 Linux 内核 v3.8.9 源代码

我运行的是 Linux Mint,内核版本为 3.8.0-29-generic。因此,我下载并解压了 Linux Kernel 3.8.9 源代码,并将文件夹放在主目录中。现在使用命令制作菜单配置在 gnome-terminal 中我收到了 make 错误消息:

DALEK linux-3.8.9 # make menuconfig
  HOSTCC  scripts/basic/fixdep
Segmentation fault
make[1]: *** [scripts/basic/fixdep] Error 139
make: *** [scripts_basic] Error 2

所以我在启动之前做了内存测试,没有内存错误。那么问题是什么?FTR 我正在使用具有 x86_64 架构的东芝 Satellite L500。其他人建议内核源未针对此架构进行配置....如果是这种情况,我在哪里可以找到适用于 x86_64 的 Linux 内核?

我尝试这样做的原因是为了准备构建内核源以创建内核模块:在已经安装内核的情况下这是否有必要???

答案1

不,内核源代码与架构无关。虽然一些不受真正支持的古老架构(例如 32 位 MIPS)可能需要本地补丁,但 x86_64 不是其中之一。

尝试增加详细程度来查看 make 做了什么。也许段错误不是发生在编译器中,而是发生在刚刚编译的 fixdep 二进制文件中。

在这两种情况下,您的内核源或系统都存在严重问题。

(你仍然可以尝试下载/解压一个全新的内核源,如果它以某种方式损坏,那么一切都会好起来)

答案2

因此,显然我认为 makefile 脚本正在使用 /usr/src/linux-headers-3.8.0-29-generic/ 文件夹中的标头,但它也使用了 /usr/lib/gcc/x86_64-linux-gnu/4.7.3/include/ 文件夹中的 GCC 标头。事实证明,许多其他人也遇到了同样的错误(分段错误:错误 139)。错误消息显示 fixdep 可执行文件是 /scripts/basic/ 文件夹中 makefile 的目标,其源代码为 fixdep.c。一个站点提到了“CONFIG_MODULE”列表,我注意到它使用了 memcmp 函数。我使用从某处获取并放置在标题中的一些陈旧的内联汇编代码定义了该函数。因此,我使用标准 c 代码重写了它,这完全消除了分段错误!

我猜测内联汇编代码可能试图访问受保护的内存,这可能会导致分段错误。

相关内容