引导新编译的 Linux 内核

引导新编译的 Linux 内核

我已经开始阅读《Essential Linux Device Drivers》这本书。我正在遵循编译和引导到新内核的过程。但是我无法启动到新编译的内核 - 我在 grub 中选择新内核,然后......什么都没有......屏幕保持不变。

以下是我正在采取的步骤,如书中所述(我使用内核 2.6.24,因为这就是本书所基于的):

cd /usr/src/linux-2.6.24 # the base dir of the kernel I downloaded
make clean
cp arch/x86/configs/i386_defconfig .config
make bzImage
cp arch/x86/boot/bzImage /boot/vmlinuz

书上说:

您可能需要提醒引导加载程序新引导映像的到来。如果您使用 GRUB 引导加载程序,它会自动计算出这一点。

嗯,在我的例子中它并没有自动计算出来,因为 GRUB 中没有选择这个内核的选项。所以我通过在终端中输入 update-grub 手动完成此操作。这也不起作用。然而,一旦我将文件名从 vmlinuz 更改为 vmlinuz-2.6.24 并输入 update-grub ,它就会拾取它。所以在这本书的第11页上似乎已经遗漏了很多东西。

书上说然后重新启动机器。

不管怎样,我现在可以在 GRUB 中选择这个内核,但正如我上面所说,它无法正常启动,屏幕只是变成空白并且永远不会改变。那么我错过了什么吗?我完全按照书上的说明进行操作。我在这本书上花了 50 欧元,现在由于这个问题我无法翻过第 11 页。

我认为我在 VirtualBox 上使用 Ubuntu 不是问题?我只是在虚拟机 Ubuntu 启动期间进入 grub,然后选择新编译的内核,我不明白这怎么会成为问题。

答案1

Ubuntu 有一个从 Debian 导入的脚本,可以为您完成安装。编译内核后运行即可sudo make modules_install install,您的内核将被正确安装。

稍后编辑:这里是 Ubuntu 和 Debian 使用的脚本。当您发出上述安装命令并执行特定于发行版的安装时,内核 Makefile 会自动调用它。

答案2

您的 grub.conf 文件应该具有与此类似的条目

title My Linux Kernel
root (hd0,0)
kernel /boot/gentoo-kernel root=/dev/sda1

你的 Ubuntu 内核可能有类似的东西

initrd /boot/initrd.img

在硬件上编译内核时不需要它。这可能会导致您的问题。

你应该评论我你的 grub.conf 文件,我会看一下它。否则你的配置可能是罪魁祸首。

较旧的内核也可能没有新硬件所需的驱动程序。

较新的 ubuntu 系统将无法顺利恢复到旧的内核版本。

您可以尝试运行接近该内核版本的较旧版本的 ubuntu 或 kernel.org 上的最新内核版本。

答案3

每个 Linux 发行版都有自己的包部署机制和策略。这与内核相同。大多数发行版都用他们的工具隐藏了编译过程,这些工具主要提供二进制包。

如果您想在特定的 Linux 发行版上编译自定义内核,您必须遵循此发行版指南,了解如何在不破坏系统的情况下按照自己的方式进行编译。

Ubuntu有其特定的方式,Achlinux相同,Redhat相同,或者Gentoo相同。

因此,对于 Ubuntu,请遵循此处的文档https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

相关内容