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

Linux kernel 内核编译错误(无效的幻数),linux-kernel,kernel,fedora,Linux Kernel,Kernel,Fedora,我正在尝试从下载的源代码编译内核。我使用kernel.org上的源代码制作了内核图像 我已经成功地将它加载到grub中,但是当我尝试运行加载的模块时,它会给出错误消息:无效的幻数。我没有得到我需要修复的东西来完成事情 我遵循的步骤: 让xconfig, 编译内核 制作模块 安装模块 我还更改了/boot文件夹中bzImage的映像名称,然后从以下位置创建了initrd映像: 从网络复制的dracut/boot/initramfs-3.1.6-1.fc16.x86_64.img 3.1.6-1.f

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

我已经成功地将它加载到grub中,但是当我尝试运行加载的模块时,它会给出错误消息:无效的幻数。我没有得到我需要修复的东西来完成事情

我遵循的步骤:

让xconfig, 编译内核 制作模块 安装模块 我还更改了/boot文件夹中bzImage的映像名称,然后从以下位置创建了initrd映像: 从网络复制的dracut/boot/initramfs-3.1.6-1.fc16.x86_64.img 3.1.6-1.fc16.x86_64命令
我没有100%清楚地理解你的问题。无论如何,您从kernel.org下载了一些内核树,并使用新映像成功引导

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

所以你得到的是无效的幻数

解决方案


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

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

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

所以你得到的是无效的幻数

解决方案


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

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


更多详细信息->更好的回答每次编译内核时,都必须重新编译需要在该内核中使用的内核模块。例如,您不能在内核3.7上加载为内核2.6.39编译的模块。您必须为内核3.7重新编译它


更多细节->更好的答案实际上我怀疑这与内核模块有什么关系。看起来内核本身被称为一个模块。内核可能构建不正确,或者从grub命令行加载不正确

试试看

内核构建中的某些文件可能没有得到正确的清理,因此其中包含不正确的数据,因为您在以前尝试构建它时做了任何更改

还要注意,x86映像将在内核源代码中的arch/x86_64/boot/bzImage或arch/x86/boot/bzImage处结束。请确保您确实复制了内核本身,而不是其他不正确的文件

如果失败的话,可以尝试使用GRUB1.x,因为它比GRUB2.x更简单,只需注意,有很多东西是不同的,您应该阅读有关grub正确版本的教程。根据发行版的不同,GRUB1.x通常位于GRUBLegacy或类似的包中

编辑:如果你只为你的硬件构建内核。。。不要使用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完成并准备重新启动


有没有可能附上故障的屏幕截图?

事实上,我怀疑这与内核模块有关。看起来内核本身被称为一个模块。内核可能构建不正确,或者从grub命令行加载不正确

试试看

内核构建中的某些文件可能没有得到正确的清理,因此其中包含不正确的数据,因为您在以前尝试构建它时做了任何更改

还要注意,x86映像将在内核源代码中的arch/x86_64/boot/bzImage或arch/x86/boot/bzImage处结束。请确保您确实复制了内核本身,而不是其他不正确的文件

如果失败的话,可以尝试使用GRUB1.x,因为它比GRUB2.x更简单,只需注意,有很多东西是不同的,您应该阅读有关grub正确版本的教程。根据发行版的不同,GRUB1.x通常位于GRUBLegacy或类似的包中

编辑:如果你只为你的硬件构建内核。。。不要使用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完成并准备重新启动


有没有可能附加故障的屏幕截图?

我用make modules命令创建了模块,然后make modules\u install,我想您也会遇到同样的错误。你能发布准确的错误消息吗?您是否加载了正确的内核?我得到:加载初始ram磁盘,错误:首先加载内核它看起来像是一个不同的问题我用命令make modules创建了一个模块,然后make modules\u install,我想您也遇到了同样的错误。你能发布准确的错误消息吗?您是否加载了正确的内核?我得到:加载初始ram磁盘,错误:首先加载内核它看起来像一个不同的问题谢谢您提供了这个详细的答案。很高兴有你用来编译和安装新内核的步骤。谢谢你的详细回答。很高兴有你用来编译和安装新内核的步骤。