内核编译错误(无效幻数)

时间:2013-01-18 15:25:00

标签: linux-kernel kernel fedora

我正在尝试从下载的源代码编译内核。我使用来自kernel.org的源代码制作了内核映像。

我已成功将其加载到grub中,但是当我尝试运行加载的模块时,它会显示错误消息:"invalid magic number"。我没有得到我需要修复的东西来完成任务。

我遵循的步骤:

  1. make xconfig,
  2. 制作bzImage
  3. 制作模块
  4. make modules_install
  5. 我还从bzImage(在/ boot文件夹中)更改了图像名称,然后从以下位置创建了initrd图像:
  6. # dracut /boot/initramfs-3.1.6-1.fc16.x86_64.img 3.1.6-1.fc16.x86_64(从网上复制的命令)

3 个答案:

答案 0 :(得分:2)

每次编译内核时,都必须重新编译需要在该内核中使用的内核模块。例如,您无法在内核3.7上加载为内核2.6.39编译的模块。您必须为内核3.7重新编译它。

更多详情 - >更好的答案

答案 1 :(得分:1)

实际上我怀疑这与内核模块有什么关系。因为内核本身似乎被称为模块。内核可能无法正确构建,或者可能是从grub命令行错误地加载。

http://forums.gentoo.org/viewtopic-t-932358-start-0.html尝试一下。

内核版本中的某些文件可能没有得到正确清理,因此在其中有不正确的数据,因为您在之前的构建过程中所做的任何更改。

另请注意,x86映像最终将在arch / x86_64 / boot / bzImage或内核源代码中的arch / x86 / boot / bzImage中确保您确实已经复制了内核本身,而不是其他一些不正确的文件。 / p>

如果失败,请尝试grub 1.x,因为它比grub 2.x更简单,只需注意很多东西都不同,你应该阅读正确版本的grub的教程。 grub 1.x通常会在grub-legacy或类似的包中,具体取决于发行版。

编辑:如果您只是为您的硬件构建内核...不要使用initramfs它的过度杀伤。有些地方你想要这样做是因为你的系统无法加载足够大的内核来驱动必要的驱动程序(例如sparc在内核映像大小上非常有限)。另一个可能是通过网络启动,但总的来说不需要它。如果你必须使用initramfs,那么在没有它的情况下让你的内核构建工作。

另外,我个人构建了我的内核,其中包含基本驱动程序(基本上是磁盘和文件系统)并使用它构建它。

make mrproper (save/backup your .config first) ; 
make menuconfig ; 
make -j8 ; 
make modules_install ; 
cp arch/x86_64/boot/bzImage /boot/linux-3.7.1 ; 

(修改grub以启动新内核)并完成并准备重启。

您是否有机会附上失败的屏幕截图?

答案 2 :(得分:0)

我没有100%清楚地回答你的问题。无论如何,你从kernel.org下载了一些内核树,并成功启动了新的Image。

然后,您尝试使用insmod或modprobe加载LKM即内核模块。

所以你得到“魔法号码无效”。

<强>解决方案

需要在新内核中重新编译内核模块,然后尝试插入。