什么是“Bump ABI”的内核更新?
正如您在Linux内核的更改日志中所看到的,有更新消息,如“Bump ABI – Maverick ABI 28”。
根据Ubuntu Wiki ,ABI就像是内核空间和其他模块之间的桥梁(我的解释)。
这样的更新是否增加了额外的function和/或错误修正? 我应该将内核升级到下一个版本吗?
注意: 我不是内核专家 – 所以这是基于所收集的知识和经验。
ABI“碰撞”不应该带来新function,即使它可能“修复”某些寻找更高版本ABI的模块/应用程序中的错误。 您仍应安装这些更新,因为通常保持所有组件同步将确保稳定性和安全性。
首先,您不会查看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 /更新日志
这个元包的目的是让用户通过这些ABI颠簸过渡。
我在ABI和内核上持有与您相同的视图。 实际上,ABI颠簸意味着需要针对更新的内核重建所有模块。
我的理解也与Roland一致,因为ABI颠簸并不意味着新function,只是关键修复和安全更新。
ABI是应用程序二进制接口,(不要与API,应用程序编程接口混淆)。 ABI定义应用程序使用的数字的大小,符号和顺序。
需要说明的是,这是一个例子:我想对建筑物的年龄进行编码,用年份表示。 为此,我可以使用C unsigned char
,这是一个大小为1个字节的类型,可以编码0到255之间的值。现在假设我发现255是一个太低的限制因为有建筑物是建于255年前。 然后,我可以使用C unsigned int
,它长度为4个字节,可以编码0到65535之间的值。
将类型从char
更改为int
,我没有改变字段的语义含义(这是一个用年表示的年龄,它仍然是),但是我已经改变了它的大小。 每个与我的应用程序交互的软件都不需要更改,但它会说一种不同的“语言”。
因此,当内核更改其ABI时,这意味着它已更改了它所说的语言,但未添加,删除或修改任何function。 必须重新编译必须与内核交互的所有第三方模块才能使用这种新语言,但不需要以任何方式更改它们以便正常工作。