Debian Linux 内核 ABI 版本控制

Debian Linux 内核 ABI 版本控制

我正在尝试了解 Debian 内核映像包版本控制。

以此输出为例:

$ apt search linux-image | grep amd64-unsigned

linux-image-5.10.0-10-amd64-unsigned/stable 5.10.84-1 amd64
linux-image-5.10.0-11-amd64-unsigned/stable-security 5.10.92-1 amd64
. . .

如果我理解正确的话,我们有:

  • 内核版本 5.10.84-1 → ABI 版本 5.10.0-10
  • 内核版本 5.10.92-1 → ABI 版本 5.10.0-11

显然,Linux 内核似乎并没有遵循服务模型因为 ABI 在补丁版本之间变化相当随意。

那么 Debian 如何确定何时需要更改 ABI 版本号呢?

答案1

这记录在Debian 内核手册(Debian 用户也可以安装该debian-kernel-handbook软件包):

维护和更新 ABI

为了避免用户频繁重建树外模块,我们尽量避免在更新 Debian 稳定版或旧稳定版期间更改内核 ABI。最重要的是,我们避免在不更改 ABI 名称的情况下进行此类更改,除非树外模块似乎不依赖于 ABI 的该部分。

错误修复或内核配置更改可能会改变 ABI。如果导出函数以 为条件 CONFIG_FOO,或者它使用其定义取决于 的类型 CONFIG_FOO,则打开 CONFIG_FOO或关闭会更改该函数的 ABI,从而更改整个内核的 ABI。启用或更改单个驱动程序的配置通常不会更改 ABI,因为大多数驱动程序不导出任何内容。

内核构建过程为每个导出的函数或变量生成一个“符号版本”。这是它所依赖的定义的哈希值,只要函数的 ABI 发生变化,它就应该发生变化。内核模块加载器通过比较符号版本来检测不兼容的模块。整套符号版本代表内核 ABI。

我们收集该目录下以前上传的包的符号版本debian/abi,然后将新内核与这些版本进行比较。如果 ABI 名称未更改,但 ABI 本身已更改(添加内容或我们标记为可接受的更改除外),则构建将中止。

因此,本质上,如果无法保证与现有模块的兼容性,则需要更改 ABI。 ABI 变更会在软件包变更日志中进行追踪,尽管不一定包含变更的具体原因(很可能不止一个)。

Debian Linux 内核版本控制有关 Debian 内核版本控制方案的更一般描述。

相关内容