2015-12-10 4 views
6

Es gibt Man (2) Seiten für die Systemaufrufe, aber diese beschreiben das Verhalten der C-Bibliothek (Glibc), die auf den Systemaufrufen sitzt. Ist die rohe Systemaufruf-API/ABI irgendwo dokumentiert (außer UseTheSourceLuke)? Ich habe einige Unterschiede zwischen kernel/libc in den man-Seiten gesehen, aber ich hatte nicht das Gefühl, dass es höchste Priorität hat, diese Unterschiede zu dokumentieren.Gibt es Raw Linux Systemaufruf API/ABI-Dokumentation

Was ich wirklich sagen möchte ist: Wird die C-Bibliothek von POLICY als die stabile/dokumentierte Linux-API betrachtet und die Systemaufruf-API/ABI des Kernels als instabil betrachtet (kann sich ändern) und daher absichtlich nicht dokumentiert wird oder niedrige Priorität?

So machen Kernel-Entwickler, die einen Systemaufruf ändern, Workarounds in glibc? Was ist mit den anderen libc's?

Kann ich historische Diskussionen zu diesem Thema finden?

Edit: Also die ABI ist stabil, und auch das Verhalten von Syscalls, aber sie sind nicht von Kernel-Entwicklern dokumentiert. Der glibc dokumentiert sie stattdessen (mit eigenen Ergänzungen/Änderungen). Richtig?

+1

re: _historical Diskussion_. Sie könnten etwas finden *** [hier] (https://www.safaribooksonline.com/library/view/linux-system-programming/9781449341527/ch01.html) ***. Keine Tiefe, aber mehr Überblick über Themen, einschließlich API/ABI. – ryyker

+0

@ryyker gute Suche –

+0

Wenn Sie fragen, wie Systemaufrufargumente an den Kernel übergeben werden, ist der ABI innerhalb einer gegebenen Prozessorarchitektur stabil. In den Prozessorarchitekturen sehen Sie Abweichungen in der ABI. – JJF

Antwort

3

Ich glaube nicht, dass die Kernel-Entwickler tatsächlich die Interrupt-API, aber Sie können Drittanbieter-Charts wie this one finden.

+0

Die Grafik ist gut. – ryyker

+2

Wenn Sie sich für ein solches Diagramm entscheiden, sollten Sie natürlich eines auswählen, das Ihrer Kernel-Version entspricht. Der eine Link ist für Linux 2.2. Es war daher ein wenig veraltet im Jahr 2004, als es veröffentlicht wurde, und jetzt ist es ziemlich veraltet. –

+2

@JohnBollinger - Es ist wahr, es war für eine ältere Kernel-Version, aber der Autor der Seite gibt Ihnen auch die Ressourcen, um Ihr eigenes Diagramm für einen neueren Kernel zu erstellen. Auch wenn Sie sagen, dass es "ziemlich veraltet" ist, haben sich viele der Aufrufe nicht auf den neuesten Kernel geändert. (Ich habe mehrere getestet, wenn ich meinen eigenen Compiler implementiere.) – owacoder

2

Die Antwort auf Ihre Frage ist in der syscall man page. Achten Sie besonders auf den Abschnittstitel "Architecture calling conventions" und beachten Sie, wie oben von John Bollinger erwähnt, dass diese Informationen zwischen den Kernel-Versionen variieren können.

0

Was ich meine wirklich zu sagen, ist: Ist der C-Bibliothek als die stable/dokumentiert Linux API von Politik sein, und der Systemaufruf API/ABI des Kernels instabil angesehen wird (kann sich ändern) und somit nicht dokumentiert absichtlich oder mit niedriger Priorität?

Es ist unmöglich, Politik zu sprechen, ohne Angabe dessen Politik für was.

Menschen Programmierung für "Linux" sind in der Tat in der Tat Programmierung für eine oder mehrere Varianten von GNU/Linux, im Gegensatz zu für den nackten Kernel. Ich bin daher geneigt zu sagen, dass wir wahrscheinlich keine Kernelentwicklerrichtlinie in Erwägung ziehen. In der Tat, wenn die C-Bibliothek-Schnittstelle überhaupt verfügbar ist, dann sprechen wir nicht von einem nackten Kernel. Außerdem nehme ich an, dass Sie sich, basierend auf Ihrem Tagging, nach der C-Programmierung erkundigen. Wenn Sie in Assembly programmieren würden, wäre die rohe Syscall-Schnittstelle natürlich und angemessen, und der Rest meiner Kommentare würde nicht zutreffen.

Wenn Sie in der Tat GNU/Linux unter Ausschluss von irgendetwas anderen zielen, dann ist die Frage etwas sinnvoll. Auf der anderen Seite ist es häufig der Fall, dass man es vorzieht, eine umfassendere Kompatibilität zu programmieren. In diesem Fall gibt es wirklich keine Alternative zur Verwendung der Syscall-Schnittstellen der C-Bibliothek, da die rohen Systemaufrufe jedes Systems unterschiedlich sind. Die Syscall-Schnittstellen von Glibc sind ziemlich gut mit POSIX und SUS kompatibel, so dass sie (richtig) für die Portabilität von großem Vorteil sind. Selbst wenn andere Unix- und Unix-ähnliche Systeme wie OS X, BSD, Solaris usw. keine unmittelbaren Ziele darstellen, ist es selten ein Verlust, die Möglichkeit offen zu halten, Ihre Software auf solchen Systemen zu verwenden.

Wie auch immer, wenn Sie bestimmt sind, dass Ihre Software Linux syscalls direkt ausführt, würden Sie dann Inline Assembly einfügen, um das überall zu machen, wo Sie es haben wollten? Sicher nicht - Sie würden Wrapper-Funktionen schreiben.Warum sollten Sie dann die gründlich getesteten und gut dokumentierten Wrapperfunktionen, die bereits von der C-Bibliothek bereitgestellt werden, ablehnen?

Natürlich ändert sich die Linux-Syscall-Schnittstelle in gewissem Maße zwischen Kernel-Versionen. Das kann als die Sache betrachtet werden, die Versionen unterscheidet (ich meine x.2y ->x.2z oder x.y ->z.w). Ich bin nicht gut darauf eingestellt, wie groß solche Änderungen normalerweise sind, aber es gab inkompatible Änderungen in der Vergangenheit, und die Verwendung der C-Bibliothek-Schnittstellen isoliert Sie in gewisser Weise von solchen Änderungen. Wie oben beschrieben, denke ich jedoch, dass es andere, größere Gründe dafür gibt, die C-Bibliotheksschnittstelle vorzuziehen.

+0

Mit der Policy meinte ich wirklich das der Kernel-Entwickler. Und wenn ich eine Embedded-Plattform mit nur dem Linux-Kernel schreiben wollte, woher bekomme ich dann die Dokumentation? Ist es in diesem Szenario nicht dokumentiert? –

+0

(außer dritte Partei) –

+1

@ ctrl-d, dann um Gottes Willen, warum hast du das nicht gesagt? Die C-Bibliothek Schnittstelle ist moot, wenn Sie nicht die C-Bibliothek zum Zeichnen haben. Bitte überarbeiten Sie Ihre Frage, um zu fragen, was Sie wirklich wissen möchten. –