即使编译成功也无法安装内核
Unable to install a kernel even though it compiled successfully
我正在尝试在我的 ubuntu 20.04 中安装 linux-Kernel version 4.9.228
。
内核编译成功,没有任何错误。我也执行了命令:
sudo make modules_install install
当我重新启动系统时,为了检查它是否正确输入,我检查了 /boot/
目录下的文件:
System.map-4.9.228
vmlinuz-4.9.228
initrd.img-4.9.228
config-4.9.228
我不知道为什么,但是当我 运行 uname -r
。它没有更新我的版本。它仍然说 5.4.0-37-generic
.
如果我遗漏了什么,请指导我。
注意:做这一切的唯一目的是学习如何添加系统调用以及如何编译内核。如果你有任何建议,我愿意接受建议。谢谢。
您可能已经成功安装了不同的内核版本,但为了启动它,您需要告诉引导加载程序这样做。
我假设您使用 GRUB2 作为引导加载程序,因为它是大多数发行版的标准配置,包括 Ubuntu。为了引导新内核,你有多种选择。
选项 1
这是最安全的推荐选项。
编辑 GRUB 配置文件 /etc/default/grub
(你需要是 root,所以使用 sudo vi
或 sudo nano
之类的东西)并确保你有 GRUB_TIMEOUT=N
其中 N
是秒数。如果不这样做,则只需将其添加到新行中即可。您希望 N
至少为 5 或 10,以便您有时间在 GRUB 启动时 select 正确的内核版本。
此外,请确保您不有以下任何行(您不应该有它们,但如果有,请删除或评论它们):
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_SUBMENU=y
GRUB_HIDDEN_TIMEOUT=N
GRUB_TIMEOUT_STYLE=hidden
保存对 /etc/default/grub
和 运行 sudo update-grub
的更改。这将检测当前安装的内核,并在您启动计算机并输入 GRUB 时将它们添加到可引导列表中。
重新启动您的 PC,当 GRUB 启动时您将看到一个选项列表。如果您什么都不做,您的默认内核将启动,否则您可以使用箭头键和 ENTER 键导航到 "Advanced options for Ubuntu",其中你会找到可用内核的列表,你将能够select你喜欢的那个。
它应该看起来像这样:
选项 2
如果选项 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
运行 sudo update-grub
让 GRUB 检测更改。
重启电脑。
选项 3
从 GRUB 命令行手动启动到您想要的内核。这是一个高级选项,我仅将其列为最后的手段,除非您完全破坏了系统配置,否则您永远不需要这样做。
- 重启PC进入GRUB,看到后按
C
进入GRUB命令行
- 从现在开始关注this answer。
无论如何,请记住,如果您不确定自己在做什么,那么在您自己的机器上进行内核开发并不是一个好主意。我建议您使用虚拟机来试验内核,这样如果出现任何问题,您可以将其丢弃并创建一个新的。
我正在尝试在我的 ubuntu 20.04 中安装 linux-Kernel version 4.9.228
。
内核编译成功,没有任何错误。我也执行了命令:
sudo make modules_install install
当我重新启动系统时,为了检查它是否正确输入,我检查了 /boot/
目录下的文件:
System.map-4.9.228
vmlinuz-4.9.228
initrd.img-4.9.228
config-4.9.228
我不知道为什么,但是当我 运行 uname -r
。它没有更新我的版本。它仍然说 5.4.0-37-generic
.
如果我遗漏了什么,请指导我。
注意:做这一切的唯一目的是学习如何添加系统调用以及如何编译内核。如果你有任何建议,我愿意接受建议。谢谢。
您可能已经成功安装了不同的内核版本,但为了启动它,您需要告诉引导加载程序这样做。
我假设您使用 GRUB2 作为引导加载程序,因为它是大多数发行版的标准配置,包括 Ubuntu。为了引导新内核,你有多种选择。
选项 1
这是最安全的推荐选项。
编辑 GRUB 配置文件
/etc/default/grub
(你需要是 root,所以使用sudo vi
或sudo nano
之类的东西)并确保你有GRUB_TIMEOUT=N
其中N
是秒数。如果不这样做,则只需将其添加到新行中即可。您希望N
至少为 5 或 10,以便您有时间在 GRUB 启动时 select 正确的内核版本。此外,请确保您不有以下任何行(您不应该有它们,但如果有,请删除或评论它们):
GRUB_DISABLE_RECOVERY="true" GRUB_DISABLE_SUBMENU=y GRUB_HIDDEN_TIMEOUT=N GRUB_TIMEOUT_STYLE=hidden
保存对
/etc/default/grub
和 运行sudo update-grub
的更改。这将检测当前安装的内核,并在您启动计算机并输入 GRUB 时将它们添加到可引导列表中。重新启动您的 PC,当 GRUB 启动时您将看到一个选项列表。如果您什么都不做,您的默认内核将启动,否则您可以使用箭头键和 ENTER 键导航到 "Advanced options for Ubuntu",其中你会找到可用内核的列表,你将能够select你喜欢的那个。
它应该看起来像这样:
选项 2
如果选项 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
运行
sudo update-grub
让 GRUB 检测更改。重启电脑。
选项 3
从 GRUB 命令行手动启动到您想要的内核。这是一个高级选项,我仅将其列为最后的手段,除非您完全破坏了系统配置,否则您永远不需要这样做。
- 重启PC进入GRUB,看到后按
C
进入GRUB命令行 - 从现在开始关注this answer。
无论如何,请记住,如果您不确定自己在做什么,那么在您自己的机器上进行内核开发并不是一个好主意。我建议您使用虚拟机来试验内核,这样如果出现任何问题,您可以将其丢弃并创建一个新的。