1

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

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

我遵循的步骤:

  1. 制作 xconfig,
  2. 制作 bzImage
  3. 制作模块
  4. 制作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(从网络复制的命令)
4

3 回答 3

3

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

更多细节->更好的答案

于 2013-01-21T13:57:38.883 回答
2

实际上我怀疑这与内核模块有什么关系。看起来内核本身被称为模块。内核可能构建不正确,或者可能从 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 以启动新内核)并且我完成并准备重新启动。

你有机会附上失败的截图吗?

于 2013-01-21T14:13:18.883 回答
1

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

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

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

解决方案

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

于 2013-01-21T08:33:39.493 回答