我正在尝试理解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
. . .如果我正确理解它,我们有:
显然,Linux内核似乎没有遵循语义模型,因为在补丁版本之间,ABI正在发生相当随意的变化。
那么Debian是如何确定ABI版本号何时需要被碰撞的呢?
发布于 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内核版本控制。
https://unix.stackexchange.com/questions/692596
复制相似问题