【问题标题】:Booting a newly compiled linux kernel启动新编译的 linux 内核
【发布时间】:2012-06-26 00:28:45
【问题描述】:

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

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

  • cd /usr/src/linux-2.6.24(我下载的内核的基本目录)
  • 清理干净
  • cp arch/x86/configs/i386_defconfig.config
  • 制作 bzImage cp arch/x86/boot/bzImage /boot/vmlinuz

这本书说'您可能需要提醒您的引导加载程序有关新引导映像的到来。如果您使用的是 GRUB 引导加载程序,它会自动解决这个问题。

好吧,在我的情况下它并没有自动解决,因为在 GRUB 中没有选择这个内核的选项。所以我通过在终端中输入 update-grub 手动完成。这也不起作用。但是,一旦我将文件名从 vmlinuz 更改为 vmlinuz-2.6.24 并输入 update-grub ,它就会将其拾取。所以在这本书的第 11 页上似乎已经遗漏了很多东西......

书上说要重启机器。

无论如何,我现在可以在 GRUB 中选择这个内核,但是正如我上面所说的,它不能正常启动,屏幕只是一片空白,永远不会改变。所以我错过了什么吗?我完全按照书中的说明进行操作。

【问题讨论】:

  • 尝试使用 'verbose' 参数运行你的新内核。也许它会告诉你更多正在发生的事情。
  • 这与编程无关,应在unix.stackexchange.com询问
  • 我觉得问题出在与编程相关的边界上,所以在这里占有一席之地。 (它是配置和构建相关的,并且发布者想要编写驱动程序....)。

标签: linux linux-kernel


【解决方案1】:

默认配置可能需要initrd(例如,因为文件系统和根设备需要它们的驱动程序,来自模块,这是 initrd 提供的)。

您可以为您的特定硬件适当地配置您的内核(小心地启用内核,而不是模块内的基本驱动程序),或者使用一个过程来构建一个带有 initrd 的内核包。

您应该找到适合您的 linux 发行版和习惯的程序,例如类似thisthat。我在 Debian 上使用:

time fakeroot make-kpkg -j2 --initrd --revision=3.4.2 --append-to-version=-amd64 binary

【讨论】:

  • 你知道为什么作者没有在书中包含这样的信息吗?我不明白为什么他会遗漏必要的指令来启动内核......
  • 问书的作者,我不知道。也许这本书很老了。 2.6.24 内核于 2008 年发布。我建议研究和改进更新的内核(当前为 3.4.4)。
  • 刚刚尝试了此页面上的教程 - linuxtweaking.blogspot.ie/2010/05/… - 我遇到了同样的问题。难道和我用virtualbox运行linux有关系吗?
  • 我正在尝试构建他在书中使用的内核 - 2.6.24,所以这本书有几年的历史应该没什么区别?
  • 尝试在您的硬件机器(笔记本电脑或台式机)上安装 linux 发行版。
【解决方案2】:

大多数自动 grub 设置都包含内核选项,用于隐藏内核尝试引导时生成的消息。例如:

/boot/vmlinuz-x.x.x.x-generic root=UUID=something ro quiet splash

在您希望启动的内核的 grub 菜单行中,按“e”临时编辑它,并删除诸如 quiet 和 splash 之类的选项(但保留 ro)。

然后启动临时修改的行,并查看进度消息以了解启动失败的位置。

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 2020-09-19
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2018-04-19
    相关资源
    最近更新 更多