我已经开始阅读《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