首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Debian Linux内核ABI版本控制

Debian Linux内核ABI版本控制
EN

Unix & Linux用户
提问于 2022-03-01 22:12:26
回答 1查看 418关注 0票数 2

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

以这个输出为例:

代码语言:javascript
复制
$ 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版本号何时需要被碰撞的呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-03-01 22:30:24

这在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内核版本控制方案的更一般说明,请参见Debian内核版本控制

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/692596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档