基本问题:为什么 linux-image 与安装的版本不匹配?

基本问题:为什么 linux-image 与安装的版本不匹配?

我很难从谷歌那里找到这个问题的答案。我正在使用 Debian Stretch(我无耻地将其宣传为一种很棒的体验)。

但是,我注意到我的内核正在使用基本apt upgrade命令进行升级。这些升级并未反映在使用apt search linux-image或获得的 linux-image 中dpkg --list | grep linux-image

例子:

$ apt search linux-image
  linux-image-4.8.0-2-amd64/now 4.8.15-2 amd64 [installed,local]
  Header files for Linux 4.8.0-2-amd64

$ dpkg --list | grep linux-image
  ii  linux-image-4.8.0-2-amd64             4.8.15-2 

而且linux-headers- 它们彼此 100% 相似。例子:

$ apt search linux-headers
  linux-headers-4.8.0-2-amd64/now 4.8.15-2 amd64 [installed,local]
  Header files for Linux 4.8.0-2-amd64

$ dpkg --list | grep linux-headers
  ii  linux-headers-4.8.0-2-amd64           4.8.15-2    

grub 也是如此,它不会更新映像的名称,即使使用update-grub.我并没有假设这个错误,但这似乎是一个奇怪的默认行为。已安装的映像和标头版本未反映在其名称中背后的想法是什么?

答案1

包名中存储的内核版本,例如linux-image-4.8.0-2-amd64和包中的4.8.0-2linux-headers-4.8.0-2-amd64反映了内核ABI:它仅在ABI更改时更改(这意味着依赖于内核ABI的外部包,特别是树外内核模块,需要重新构建)。按照 Debian 的惯例,使用的版本是上游内核版本,带有 .0 后缀,忽略稳定版本号,后跟连字符和单调递增的数字,每当 ABI 更改时该数字就会增加。因此,4.8.0-2 内核包的所有版本都是 ABI 兼容的,并且 ABI 在 4.8 系列中被提升了一次。

这种方法有几个优点:您可以自动获得兼容的内核升级,而无需元包更新(linux-image-amd64,它在另一个源包中维护);并且您不需要为每个内核更新重新编译树外模块。

在Debian中,GRUB忽略内核的具体版本,它只列出软​​件包名称。这可能不太理想,但这并不重要,因为您不能安装两个不同的 ABI 兼容内核,因此您不需要能够在它们之间进行选择。

您可以在 Debian 内核手册中找到更多信息,特别是关于版本和 ABI 的部分

相关内容