我很难从谷歌那里找到这个问题的答案。我正在使用 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 的部分。