Linux ABI 描述

介绍

Documentation/ABI 目录中的这部分文档尝试记录 Linux 内核和用户空间之间的 ABI,以及这些接口的相对稳定性。由于 Linux 的不断变化和不同的成熟度级别,用户空间程序应该以不同的方式使用这些接口。

我们有四个不同级别的 ABI 稳定性,如本位置中的四个不同的子目录所示。接口可以根据下述规则更改稳定性级别。

不同的稳定性级别是

stable/

此目录记录了开发者已定义为稳定的接口。用户空间程序可以自由使用这些接口,没有任何限制,并且至少保证 2 年的向后兼容性。大多数接口(如系统调用)预计永远不会改变并且始终可用。

testing/

此目录记录了被认为是稳定的接口,因为该接口的主要开发已经完成。可以更改接口以添加新功能,但除非在其中发现严重错误或安全问题,否则当前接口不会因此而中断。用户空间程序可以开始依赖这些接口,但它们必须意识到在这些接口被标记为稳定之前可能发生的更改。强烈建议使用这些接口的程序将其名称添加到这些接口的描述中,以便内核开发者可以在发生任何更改时轻松通知他们(有关如何执行此操作的详细信息,请参阅下面文件的布局描述。)

obsolete/

此目录记录了内核中仍然存在的接口,但标记为在稍后的某个时间点删除。接口的描述将记录它过时的原因以及何时可以预期删除。

removed/

此目录包含已从内核中删除的旧接口列表。

这些目录中的每个文件都将包含以下信息

What:

接口的简短描述

Date:

创建日期

KernelVersion:

此功能首次出现的内核版本。

Contact:

此接口的主要联系人(可能是邮件列表)

Description:

接口的详细描述以及如何使用它。

Users:

希望在接口更改时收到通知的此接口的所有用户。这对于“测试”阶段的接口非常重要,以便内核开发者可以与用户空间开发者合作,以确保不会以不可接受的方式中断。获取这些接口的反馈也很重要,以确保它们以适当的方式工作,并且不需要进一步更改。

Note

这些字段应该使用简单的表示法,与 ReST 标记兼容。此外,该文件**不应**具有顶级索引,例如

===
foo
===

事物如何在级别之间移动

稳定状态下的接口可能会移动到过时状态,只要给出适当的通知即可。

只要记录的时间已经过去,就可以从过时状态和内核中删除接口。

当开发者认为测试状态下的接口已完成时,它们可以移动到稳定状态。如果没有先经过过时状态,则无法从内核树中删除它们。

由开发者来决定将其接口置于他们希望开始的类别中。

非 ABI 的值得注意的部分,在任何情况下都不应被认为是稳定的

  • Kconfig。用户空间不应依赖于任何特定 Kconfig 符号的存在或不存在,无论是在 /proc/config.gz 中,还是在通常安装到 /boot 的 .config 副本中,或者在内核构建过程的任何调用中。

  • 内核内部符号。不要依赖于任何内核符号的存在、不存在、位置或类型,无论是在 System.map 文件中还是内核二进制文件本身中。请参阅 Linux 内核驱动接口

ABI 符号

ABI 文件