首页 > 解决方案 > 即使编译成功也无法安装内核

问题描述

我正在尝试linux-Kernel version 4.9.228在我的 ubuntu 20.04 中安装一个。内核编译成功,没有任何错误。我还执行了命令:

sudo make modules_install install

当我重新启动系统时,为了检查它是否输入正确,我检查了目录下的/boot/文件:

我不知道为什么,但是当我跑的时候uname -r。它没有更新我的版本。它仍然说5.4.0-37-generic

如果我遗漏了什么,请指导我。

注意:做这一切的唯一目的是学习如何添加系统调用以及如何编译内核。如果你有任何建议,我愿意接受。谢谢。

标签: linux-kernelkernel

解决方案


您可能已经成功安装了不同的内核版本,但是为了引导到它,您需要告诉引导加载程序这样做。

我将假设您使用 GRUB2 作为引导加载程序,因为它是包括 Ubuntu 在内的大多数发行版的标准配置。为了引导新内核,您有多种选择。

选项1

这是最安全和推荐的选项。

  1. 编辑 GRUB 配置文件/etc/default/grub(你需要是 root,所以使用类似sudo vior的东西sudo nano)并确保你有GRUB_TIMEOUT=NwhereN是秒数。如果你不这样做,那么只需将其添加到新行中。您希望N至少为 5 或 10,以便在 GRUB 启动时有时间选择正确的内核版本。

    此外,请确保您没有以下任何行(您不应该拥有它们,但如果有,请删除或评论它们):

    GRUB_DISABLE_RECOVERY="true"
    GRUB_DISABLE_SUBMENU=y
    GRUB_HIDDEN_TIMEOUT=N
    GRUB_TIMEOUT_STYLE=hidden
    
  2. 保存更改/etc/default/grub并运行sudo update-grub. 当您启动计算机并输入 GRUB 时,这将检测当前安装的内核并将它们添加到可引导列表中。

  3. 重新启动您的 PC,当 GRUB 启动时,您将看到一个选项列表。如果您什么都不做,您的默认内核将启动,否则您可以使用箭头键和 ENTER 键导航到“Ubuntu 的高级选项”,您将在其中找到可用内核的列表,您将能够选择您喜欢的那个。

    它应该看起来像这样:

    grub1

    grub2

选项 2

如果选项 1 不起作用(它应该,但你永远不知道),则仅用作后备。这不像选项 1 那样干净,因为它更改了默认内核,并且更改也可能会被当前内核的升级所覆盖(从技术上讲,它正是这样做以更新默认版本)。

  1. 通过更改两个符号链接/initrd.img/vmilunuz指向正确版本的内核和 initrd 映像,将您想要的内核设为默认内核。这可以手动完成,也可以通过linux-update-symlinks命令完成。

    $ linux-version list --paths
      ... grab the correct VERSION and PATH ...
    
    $ sudo linux-update-symlinks install VERSION PATH
    
  2. 运行sudo update-grub以让 GRUB 检测更改。

  3. 重新启动您的电脑。

选项 3

从 GRUB 命令行手动引导到所需的内核。这是一个高级选项,我仅将其列为最后手段,除非您完全破坏了系统配置,否则您永远不需要这样做。

  1. 将 PC 重新启动到 GRUB,一旦看到它,请按C进入 GRUB 命令行。
  2. 从现在开始关注这个答案。

无论如何,请记住,如果您不确定自己在做什么,那么在您自己的机器上进行内核开发并不是一个好主意。我建议您使用虚拟机来试验内核,这样如果出现任何问题,您可以将其丢弃并创建一个新的。


推荐阅读