Debian Linux 内核版本控制

Ort*_*kni 3 version debian linux-kernel

在 Debian Stretch 发行版上,如果我运行uname -a,我将获得:

Linux index 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

如果我运行dpkg -s linux-image-amd64 | grep Version,我会得到:

Version: 4.9+80+deb9u6
Run Code Online (Sandbox Code Playgroud)

上面的命令打印了三个不同的内核版本:

  • 4.9.0-8
  • 4.9.144-3.1
  • 4.9+80+deb9u6

我的问题是:这些不同的版本是什么,它们的含义是什么?

Ste*_*itt 10

“80 + deb9u6”是的版本linux-latest源包; 这会构建元包,为每个平台linux-image-amd64引入当前的内核包,例如您拥有的,并使用基本内核版本进行版本控制,从而产生 4.9+80+deb9u6。

“4.9.0-8”是内核的ABI版本;它出现在特定内核的包名中,例如 linux-image-4.9.0-8-amd64. 版本代表内核系列的基数,每次内核 ABI 以不兼容的方式更改时都会增加一个数字——这对用户来说很重要,每当需要重新编译树外模块时。

“4.9.144-3.1”是内核的包版本。这遵循标准的 Debian 版本控制方案:4.9.144 是上游内核版本,您可以匹配上游内核版本,3.1 是打包版本。给定上游版本的第一个包通常被赋予打包的版本 1,然后每次上传新包(不更改相应的上游),打包版本递增。您可以在Debian-specific changelog 中查看每个版本中更改内容的详细信息。

所有这些结合起来提供了许多对最终用户有用的功能:

  • 用户可以安装特定于架构的元包,例如linux-image-amd64,并确保他们始终拥有最新的可用内核包 - 目前元包是版本 4.9+80+deb9u6,它会引入linux-image-4.9.0-8-...,并且当内核版本或 ABI版本更改,将上传一个新的元包;
  • 不会以向后不兼容的方式更改内核 ABI 的新上游内核(或 Debian 补丁)不会导致不必要的包流失或本地重建(对于树外模块);
  • 需要它们的内核 ABI 更改导致模块重建,因此已安装的模块始终可用并可安装到正在运行的内核中(除非出现错误)。