2013-01-18 47 views
0

我想从下载源编译内核。我使用kernel.org的源代码制作了内核映像。内核编译错误(无效的幻数)

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

的步骤,我已经按照:

  1. 化妆xconfig的,
  2. 使bzImage的
  3. 使模块
  4. 化妆modules_install
  5. 我也是从bzImage的改变图像的名称(在/启动文件夹),然后创建initrd映像:
  6. # dracut /boot/initramfs-3.1.6-1.fc16.x86_64.img 3.1.6-1.fc16.x86_64(命令从网上复制)

回答

0

我不明白你的问题100%。无论如何,你从kernel.org下载了一些内核树,并成功地使用新的Image引导。

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

所以你得到“无效的幻数”。

解决方案

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

2

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

更多细节 - >更好的答案

+0

我用“make modules”命令创建了模块,然后“make modules_install” –

+0

我想你会得到同样的错误。你能发布确切的错误信息吗?你正在加载正确的内核吗? – Federico

+0

我正在:加载首要公羊磁盘,错误:首先加载内核 –

1

其实我怀疑这有什么用内核模块。看起来内核本身被称为模块。可能是内核构建不正确,或者可能是从grub命令行加载不正确。

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

内核构建中的某些文件可能没有得到正确清理,因此可能存在不正确的数据,因为您在之前的构建尝试中进行了任何更改。

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

如果失败,请尝试使用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来引导新内核)和IM完毕,并准备重新启动。

有没有机会附上失败的截图?

+0

谢谢你这个详细的答案。很高兴能有你用来编译和安装新内核的步骤。 –