Linux 内核头文件与当前内核匹配

Linux 内核头文件与当前内核匹配

我看到过一些关于 linux-headers 包的问题,​​但找不到任何可以解决我的特定问题的内容。

我在 Kubuntu 16.04 上,出现以下错误(来自 VirtualBox):

请安装与当前内核匹配的 Linux 内核“头文件”,以便为系统添加新硬件支持。包含头文件的发行包可能包括:

linux-headers-通用 linux-headers-4.13.0-43-通用

我很惊讶地发现它linux-headers-generic没有安装,尽管我不确定它是否应该默认安装在那里。

无论如何,虽然内核是 4.13.0-43-generic,但相应的标头确实未安装:

$ uname -r
4.13.0-43-generic

$ aptitude search  linux-headers | grep  ^i
id  linux-headers-4.13.0-32         - Header files related to Linux kernel versi
id  linux-headers-4.13.0-32-generic - Linux kernel headers for version 4.13.0 on
i A linux-headers-4.13.0-37         - Header files related to Linux kernel versi
i A linux-headers-4.13.0-37-generic - Linux kernel headers for version 4.13.0 on
i A linux-headers-4.13.0-38         - Header files related to Linux kernel versi
i A linux-headers-4.13.0-38-generic - Linux kernel headers for version 4.13.0 on
i A linux-headers-4.13.0-39         - Header files related to Linux kernel versi
i A linux-headers-4.13.0-39-generic - Linux kernel headers for version 4.13.0 on

linux-headers-generic将始终依赖于最新的可用的通用内核头”,所以我认为安装它会安装最新的软件包(在本例中,linux-headers-4.13.0-43-generic根据 VirtualBox 的要求)并使它们保持最新。

但是,如果我尝试这样做,系统会要求我安装一些看起来非常旧的软件包:

$ sudo aptitude install linux-headers-generic
The following NEW packages will be installed:
linux-headers-4.4.0-127{a} linux-headers-4.4.0-127-generic{a} linux-headers-generic 
0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.8 MB of archives. After unpacking 78.4 MB will be used.

还有一个名为的包linux-headers-generic-lts-xenial,但它或多或少做同样的事情。

所以,我的问题是:

  • linux-headers-generic 包是否应该默认存在?哪一个?
  • 就我的情况来说,我需要安装其中任何一个吗?
  • 如果我直接安装必要的linux-headers-4.13.0-43-generic软件包,那么内核升级时会发生什么?

答案1

linux-headers-generic 包是否应该默认存在?哪一个?

不,都不是。

就我的情况来说,我需要安装其中任何一个吗?

从内核版本来看,你正在使用(HWE)内核。因此,您应该安装以下标头:linux-headers-generic-hwe-16.04,该元包应该依赖于您的 HWE 内核(4.13)的正确头包。

如果我直接安装必要的linux-headers-4.13.0-43-generic软件包,那么内核升级时会发生什么?

您必须再次手动安装相关标头。最好使用linux-headers-generic-hwe-16.04

答案2

最简单的解决方案是安装缺少的软件包:

$ sudo apt install linux-headers-generic linux-headers-4.13.0-43-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
linux-headers-4.13.0-43-generic is already the newest version (4.13.0-43.48~16.04.1).
linux-headers-generic is already the newest version (4.4.0.127.133).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

我的系统已经安装了你缺少的东西。我不知道为什么会缺少它们。

请注意,linux-headers-generic最新版本确实是4.4.0.127.133。尽管 Linux Kernel 4.4 于 2015 年发布,但它是一个 5 或 6 年的 LTS(长期支持)内核(记不清具体时间了),目前的更新次数为 127。因此,更新次数最终将增加到 300 左右。

无论你怎么看,你只需要咬紧牙关,使用以下命令安装缺少的标题:

sudo apt install linux-headers-generic linux-headers-4.13.0-43-generic

2018 年 6 月 11 日更新。

4.4.0.127.133不再是最新的标头版本。我运行了sudo apt upgrade,然后又运行了sudo apt autoremove。我收到了一些错误消息,因为精神分裂软件删除了它127,并告诉我添加127标头来解决问题:

Removing linux-image-extra-4.4.0-127-generic (4.4.0-127.153) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
dkms: WARNING: Linux headers are missing, which may explain the above failures.
      please install the linux-headers-4.4.0-127-generic package to fix this.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-127-generic
Adding /lib/firmware/i915/skl_guc_ver9_33.bin
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.4.0-127-generic /boot/vmlinuz-4.4.0-127-generic

但没有真正的问题,截至 2018 年 6 月 11 日,最新linux-headers-generic版本是:4.4.0.128.134

答案3

我的同事正在使用 18.10 和 4.18.0.17 内核。sudo apt-get install官方相应的 linux-headers 说未找到包。

我终于找到并下载了特定文件packages.ubuntu.com

http://mirrors.kernel.org/ubuntu/pool/main/l/linux-hwe/linux-headers-4.18.0-17_4.18.0-17.18~18.04.1_all.deb
http://mirrors.kernel.org/ubuntu/pool/main/l/linux-hwe/linux-headers-4.18.0-17-generic_4.18.0-17.18~18.04.1_amd64.deb

一旦安装了头文件,virtualbox 包就可以工作了apt-get purgeapt-get install

相关内容