在 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
如果我运行dpkg -s linux-image-amd64 | grep Version
,我会得到:
Version: 4.9+80+deb9u6
上述命令打印了三个不同的内核版本:
- 4.9.0-8
- 4.9.144-3.1
- 4.9+80+deb9u6
我的问题是:这些不同的版本是什么?它们的含义是什么?
答案1
“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 特定的变更日志。
所有这些结合起来提供了许多对最终用户有用的功能:
- 用户可以安装特定于体系结构的元包,例如
linux-image-amd64
,并确保他们始终拥有最新的可用内核包 - 当前元包是版本 4.9+80+deb9u6,linux-image-4.9.0-8-...
当内核版本或 ABI 时,它会拉入 、版本变更,将上传新的元包; - 新的上游内核(或 Debian 补丁)不会以向后不兼容的方式更改内核 ABI,不会导致不必要的包改动或本地重建(对于树外模块);
- 需要它们的内核 ABI 更改将要导致模块重建,因此安装的模块始终可用并可安装到正在运行的内核中(除非出现错误)。