什么是内核版本号组件 (wxyy-zzz)?

Win*_*nix 5 kernel

/boot使用正在进行的命令 ( find /boot/vm* -printf "%A@ %p\n") 查看安装的内核版本号时,我看到:

1469098968.0000000000 /boot/vmlinuz-3.13.0-92-generic
1477523408.0000000000 /boot/vmlinuz-3.2.0-113-generic
1476549941.0000000000 /boot/vmlinuz-4.4.0-43-generic
1477008540.0000000000 /boot/vmlinuz-4.4.0-45-generic
1470540722.0000000000 /boot/vmlinuz-4.6.3-040603-generic
1471805944.0000000000 /boot/vmlinuz-4.7.1-040701-generic
1472208664.0000000000 /boot/vmlinuz-4.7.2-040702-generic
1473382012.0000000000 /boot/vmlinuz-4.7.3-040703-generic
1474853146.0000000000 /boot/vmlinuz-4.7.5-040705-generic
1475960925.0000000000 /boot/vmlinuz-4.8.1-040801-generic
1477145804.0000000000 /boot/vmlinuz-4.8.4-040804-generic
Run Code Online (Sandbox Code Playgroud)

vmlinuz前缀后面的“w.xx.y-zzz”的正确名称是什么?

建议的重复链接(发布版本中的第四个数字是什么意思?)指出第二个部分称为ABI Number. 下面 muru 的答案指出,第四部分是ABI Number但是,根据我在下面自己的答案中提供的链接,我认为两者都是错误的。

请记住,这个问题是关于所有四段 wxyy-zzz 而不仅仅是第四段 zzz。

mur*_*uru 10

调用w版本,x主要修订和y次要修订是使用更改重要性的语义版本控制。Linux 已经很长时间没有使用这种语义版本控制了。直到 2003 年,Linux 都使用奇偶版本(奇数不稳定,偶数稳定)。然后到了 2.6,在软件方面持续了一个地质时代(直到 2.6.39,8)。

然后,几乎任意地,Linus 将版本提升到 3.0。这结束了所有语义版本控制对 Linux 版本的适用性。而当3.20是因为,莱纳斯切换到简单的递增W¯¯每当X有足够大,使得他跑了手指和脚趾的出指望它

所以,现在,内核版本只是wx,来自上游y表示已发布补丁 - Ubuntu 只是将其保留为 0,而z如前所述,是 ABI 编号。


Win*_*nix 6

内核版本。主要修订 。次要修订 - 补丁

使用w.xx.y-zzz并查看列出的第四个文件,/boot/vmlinuz-4.4.0-45我们可以说:

  • w = 内核版本 = 4
  • xx = 主要修订版 = 4
  • y = 次要修订版 = 0
  • zzz =补丁号 = 45

如果有人使用4.8.0Ubuntu 16.10 附带的并遇到屏幕闪烁,他们可能会说“我使用了以前的版本 4.4.0-45”(Ubuntu 16.04 使用的)来解决问题。

通俗地说是正确的,但从技术上讲,这是将四个主要修订级别(4.8.yz)降级到(4.4.yz)。从技术上讲,要从内核版本 4.8 移动到以前的内核版本,使用 OP 中显示的文件列表必须是 3.2 或 3.13。

编辑 - 内核 3.0 后段名称更改

上述定义来自:( Kernel Version Numbering ) 2006 年 5 月 9 日发布,但现已过时。

正如重复的评论链接(发布版本中的第四个数字是什么意思?)指出新名称是:

<base kernel version>.<ABI number>.<upload number>-<flavour>
Run Code Online (Sandbox Code Playgroud)

建议的重复似乎是错误的,因为内核版本号中的第二段似乎与ABI. 在此线程中发布的另一个答案中,第四部分与此相关,ABI但这似乎也不正确。以下是来自 ( Linux Kernel ABI Timeline )的 ABI 更改列表的顶部:

                ----- Symbols -----
Version Date    Added Removed Total
4.8.1   2016-10-07  141 50  1470
4.7.2   2016-08-20  170 42  881
4.6.1   2016-06-01  159 52  924
4.5.6   2016-06-01  146 41  994
4.4.5   2016-03-10  87  40  994
4.3.6   2016-02-20  166 51  1231
4.2.8   2015-12-15  213 75  1768
4.1.19  2016-03-05  204 88  1760
4.0.9   2015-07-21  159 53  822
3.19.8  2015-05-11  207 44  1146
3.18.28 2016-03-05  147 56  867
3.17.8  2015-01-08  165 46  688
3.16.7  2014-10-30  155 55  943
3.15.10 2014-08-14  129 98  1051
3.14.64 2016-03-10  279 91  1019
3.13.11 2014-04-23  140 99  822
3.12.56 2016-03-04  171 77  994
Run Code Online (Sandbox Code Playgroud)

ABI 编号

wiki.ubuntu我们学到:

ABI 代表应用程序二进制接口。对于内核,这归结为模块(AKA 驱动程序)可以用来在内核空间中执行操作的导出函数。大多数这些导出的函数都可以直接从内核 (vmlinux) 中获得,但也有很大一部分是从其他模块中导出的。这些函数允许模块利用内核中的子系统进行内存管理、设备接口、文件系统 (VFS)、网络堆栈等。

Linux 内核版本编号总结

从最权威的来源(wikipedia.org - Linux 内核版本编号)我们了解到:

Linux 内核具有三种不同的编号方案。总结一下:

  • 第一个方案用于“1.0”的试运行。内核的第一个版本是 0.01。紧随其后的是 0.02、0.03、0.10、0.11、0.12(第一个 GPL 版本)、0.95、0.96、0.97、0.98、0.99,然后是 1.0。[303] 从 0.95 开始,版本之间有许多补丁版本。
  • 在 1.0 版本之后和 2.6 版本之前,数字组成为“abc”,其中数字“a”表示内核版本,数字“b”表示内核的主要版本,数字“c”表示内核的小修改。
  • 2004 年,2.6.0 版本发布后,内核开发者就发布和版本方案进行了多次讨论[304][305],最终 Linus Torvalds 和其他人决定缩短“基于时间”的发布周期将是有益的.

  • 这个答案从根本上是错误的。内核版本 4.4 并不意味着(内核版本 4,主要修订版 4)。它是内核版本 4.4。Linux 内核版本与其他软件不同。在 ubuntu 内核中,“y”总是 0,等等。所以一切都错了。 (3认同)