使用“Bump ABI”的内核更新是什么?

使用“Bump ABI”的内核更新是什么?

正如你所看到的Linux 内核的更新日志,有“Bump ABI - Maverick ABI 28”之类的更新消息。

根据Ubuntu 维基,ABI 就像是内核空间和其他模块之间的桥梁(我的解释)。

这样的更新是否会添加额外的功能和/或错误修复?我应该将内核升级到下一个版本吗?

答案1

首先,您不是在查看 Linux 内核的更新日志。您是在查看元包,它是依赖于最新内核的包。您可能需要类似以下内容的内容:http://changelogs.ubuntu.com/changelogs/pool/main/l/linux-image-2.6.35-28-generic/linux-image-2.6.35-28-generic_2.6.35-28.50/changelog

此元包的目的是帮助用户过渡这些 ABI 颠簸。

我对 ABI 和内核的看法和你一样。实际上,ABI 升级意味着所有模块都需要根据更新的内核进行重建。

我的理解也与 Roland 一致,即 ABI 的提升并不意味着新功能,而只是关键的修复和安全更新。

答案2

注意: 我不是内核专家——所以这是基于收集的知识和经验。

ABI“升级”不应带来新功能,即使它可能会“修复”某些需要更高版本 ABI 的模块/应用程序中的错误。您仍应安装这些更新,因为通常保持所有组件同步将确保稳定性和安全性。

答案3

ABI 是应用程序二进制接口(不要与 API,应用程序编程接口混淆)。ABI 定义应用程序使用的数字的大小、符号和顺序。

为了清楚起见,这里有一个例子:我想对建筑物的年龄进行编码,以年为单位。为此,我可以使用 C unsigned char,它是一种大小为 1 字节的类型,可以对 0 到 255 之间的值进行编码。现在假设我发现 255 是一个太低的限制,因为有些建筑物建于 255 多年前。然后我可以使用 C unsigned int,它的长度为 4 字节,可以对 0 到 65535 之间的值进行编码。

将类型从 改为charint我并没有改变字段的语义(它以前是以年为单位表示的年龄,现在仍然是),但是我改变了它的大小。与我的应用程序交互的每个软件都不需要更改,但是它将使用不同的“语言”。

因此,当内核更改其 ABI 时,这意味着它已更改其使用的语言,但未添加、删除或修改任何功能。所有必须与内核交互的第三方模块都需要重新编译才能使用这种新语言,但它们无需以任何方式进行更改即可正常工作。

相关内容