有没有原始的linux系统调用API / ABI文档

系统调用有两(2)页,但这些页面描述了位于系统调用之上的C库(glibc)的行为。 原始系统调用API / ABIlogging在某处(UseTheSourceLuke除外)? 我在man手册中看到了一些kernel / libc之间的区别,但是我并没有觉得把这些差异logging下来是最重要的。

我真正的意思是说:C库是否被POLICY认为是稳定/有logging的Linux API,并且内核的系统调用API / ABI被认为是不稳定的(可能会改变),因此没有目的或低优先级?

那么更改系统调用的内核开发人员在glibc中做出了解决方法? 那么其他的libc呢?

我可以find关于这个问题的历史讨论吗?

编辑:所以ABI是稳定的,也是系统调用的行为,但是它们没有被内核开发者logging。 glibc正在logging它们(带有自己的添加/更改)。 正确?

我不认为内核开发者会发布中断API,但是你可以找到像这样的第三方图表。

你的问题的答案在系统调用手册页 。 特别要注意章节标题“架构调用约定”,并注意到John Bollinger所提到的,这个信息可能因内核版本而异。

我真正的意思是说:C库是否被POLICY认为是稳定的/有记录的Linux API,并且内核的系统调用API / ABI被认为是不稳定的(可能会改变),因此没有目的或低优先级?

没有明确规定谁的政策, 什么政策,就不可能讲政策。

编程“Linux”的人通常实际上是为一种或多种GNU / Linux编程,而不是裸核。 因此,我倾向于说我们可能不考虑内核开发者策略。 事实上,如果C库接口是可用的,那么我们不是在谈论一个裸机内核。 而且,根据你的标签,我假设你在问C编程。 如果你是在程序集中编程,那么原始的系统调用接口将是自然和适当的,其余大部分我的意见不适用。

如果你的确把GNU / Linux作为排除其他任何事情的话,那么这个问题就有些明智了。 另一方面,通常情况下,人们更喜欢为了更广泛的兼容性而编程。 在这种情况下,使用C库系统调用接口确实没有其他选择,因为每个系统的原始系统调用是不同的。 Glibc的系统调用接口在符合POSIX和SUS方面做得相当不错,所以正确使用它们对可移植性来说是一个巨大的优势。 即使其他类Unix系统(如OS X,BSD,Solaris等)不是直接的目标,在这样的系统上开放使用软件的可能性也是很少的损失。

无论如何,如果您决定让您的软件直接执行Linux系统调用,那么您是否确实要插入内联汇编来随心所欲地执行该操作? 当然不是 – 你会写封装函数。 那么为什么要反对使用C库已经提供的经过充分测试和充分记录的包装函数呢?

当然Linux系统调用接口在内核版本之间确实有所变化。 这可以被认为是使版本不同的东西(我的意思是x.2y – > x.2zxy – > zw )。 我并没有很好地了解这种变化通常会有多大,但过去一直存在不兼容的变化,并且使用C库接口在某种程度上使您免于这种变化。 不过,如上所述,我认为还有其他更喜欢C库接口的更多原因。