Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
27.07.2021, 23:54:41

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
Statistiken
  • Beiträge insgesamt: 747143
  • Themen insgesamt: 60091
  • Heute online: 409
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  "die Weigerung stabile Schnittstellen für externe Treiber"  (Gelesen 609 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Strommeter

  • Gast
Hallo Leute,

in einem Bericht über Googles kommendes Fuchsia schreibt derstandard.at, dass Google auch aus folgendem Grund los werden will:

Zitat
Doch es gibt noch einen weiteren Faktor, der für Google nicht minder relevant ist: Die Möglichkeit, Linux loszuwerden. Dessen monolithisches Kernel-Design – und die Weigerung stabile Schnittstellen für externe Treiber anzubieten – hat sich in den vergangenen Jahren im Smartphone-Umfeld als ein echtes Problem herausgestellt.

Um was geht es hier genauer, dass Linus & Co. eben von diesen stabilen Schnittstellen abhält?

Grüße

Strommeter

Re: "die Weigerung stabile Schnittstellen für externe Treiber"
« Antwort #1 am: 02.05.2019, 05:46:40 »
https://github.com/torvalds/linux/blob/master/Documentation/process/stable-api-nonsense.rst

Evtl mache ich später noch eine kurze, deutsche Zusammenfassung (sollte es bis dahin nicht jemand anderes getan haben)

Strommeter

  • Gast
Re: "die Weigerung stabile Schnittstellen für externe Treiber"
« Antwort #2 am: 02.05.2019, 12:03:08 »
Zuerst danke für deinen Link und auf eine deutsche Zusammenfassung freue ich mich ebenfalls. Aber ich will auch mal schauen, was ich mit meinen Englischkenntnissen herausbekomme.

Grüße

Strommeter

Re: "die Weigerung stabile Schnittstellen für externe Treiber"
« Antwort #3 am: 02.05.2019, 13:54:55 »
Zögere nicht, das Ergebnis Deiner Übersetzungsbemühungen der Allgemeinheit zugänglich zu machen.
Muss nicht perfekt sein, aber etwas verständlicher als mit Google translate wäre schon schön.

Lt.Guck

  • Gast
Re: "die Weigerung stabile Schnittstellen für externe Treiber"
« Antwort #4 am: 02.05.2019, 14:35:12 »
Habe mal Grob Übersetzt.

Dies wird geschrieben, um zu erklären, warum Linux weder eine binäre Kernel-Schnittstelle noch eine stabile Kernel-Schnittstelle hat.

Hinweis

Bitte beachten Sie, dass dieser Artikel die in Kernel-Schnittstellen beschreibt, nicht die Kernel zu Userspace-Schnittstellen.

Die Schnittstelle zwischen Kernel und Userspace ist die, die von Anwendungsprogrammen verwendet wird, die Syscall-Schnittstelle. Diese Schnittstelle ist im Laufe der Zeit sehr stabil und wird nicht brechen. Ich habe alte Programme, die auf einem Kernel vor 0.9 gebaut wurden, der mit der neuesten 2.6er Version noch gut funktioniert. Diese Schnittstelle ist diejenige, auf deren Stabilität Anwender und Anwendungsprogrammierer zählen können.
Zusammenfassung

Du denkst, dass du ein stabiles Kernel-Interface willst, aber das tust du wirklich nicht, und du weißt es nicht einmal. Was Sie wollen, ist ein stabil laufender Treiber, und das bekommen Sie nur, wenn sich Ihr Treiber im Hauptkernelbaum befindet. Sie erhalten auch viele andere gute Vorteile, wenn sich Ihr Treiber im Hauptkernelbaum befindet, was Linux zu einem so starken, stabilen und ausgereiften Betriebssystem gemacht hat, weshalb Sie es überhaupt erst verwenden.
Intro

Es ist nur die eine oder andere Person, die einen Kernel-Treiber schreiben möchte, der sich um die Änderung der Schnittstellen im Kernel kümmern muss. Für die Mehrheit der Welt sehen sie diese Schnittstelle weder, noch kümmern sie sich darum.

Zunächst einmal werde ich keine rechtlichen Fragen zu Closed Source, Hidden Source, Binärblobs, Source Wrappern oder anderen Begriffen ansprechen, die Kerneltreiber beschreiben, die ihren Quellcode nicht unter der GPL veröffentlicht haben. Bitte konsultieren Sie einen Anwalt, wenn Sie rechtliche Fragen haben, ich bin Programmierer und deshalb werde ich hier nur die technischen Fragen beschreiben (um die rechtlichen Fragen nicht zu beleuchten, sie sind real, und Sie müssen sie jederzeit kennen).

Es gibt also zwei Hauptthemen, binäre Kernel-Schnittstellen und stabile Kernel-Quellschnittstellen. Sie hängen beide voneinander ab, aber wir werden zuerst über das Binärmaterial diskutieren, um es aus dem Weg zu räumen.
Binäre Kernel-Schnittstelle

Unter der Annahme, dass wir eine stabile Kernel-Quellschnittstelle für den Kernel haben, würde natürlich auch eine binäre Schnittstelle passieren, oder? Falsch. Bitte beachten Sie die folgenden Fakten über den Linux-Kernel:

        Je nach Version des von Ihnen verwendeten C-Compilers enthalten verschiedene Kernel-Datenstrukturen unterschiedliche Ausrichtung der Strukturen und beinhalten möglicherweise unterschiedliche Funktionen auf unterschiedliche Weise (Funktionen inline stellen oder nicht). Die individuelle Funktionsorganisation ist nicht so wichtig, aber das unterschiedliche Padding der Datenstruktur ist sehr wichtig.

        Je nachdem, welche Kernel-Buildoptionen Sie wählen, kann der Kernel eine Vielzahl verschiedener Dinge annehmen:

                verschiedene Strukturen können verschiedene Felder enthalten.
                Einige Funktionen sind möglicherweise gar nicht implementiert (d.h. einige Sperren kompilieren für Nicht-SMP-Builds zu nichts.)
                Der Speicher innerhalb des Kernels kann je nach Build-Optionen unterschiedlich ausgerichtet werden.

        Linux läuft auf einer Vielzahl von verschiedenen Prozessorarchitekturen. Es gibt keine Möglichkeit, dass Binärtreiber einer Architektur auf einer anderen Architektur ordnungsgemäß ausgeführt werden.

Nun können eine Reihe dieser Probleme gelöst werden, indem Sie einfach Ihr Modul für die genaue spezifische Kernelkonfiguration kompilieren und den gleichen genauen C-Compiler verwenden, mit dem der Kernel erstellt wurde. Dies ist ausreichend, wenn Sie ein Modul für eine bestimmte Release-Version einer bestimmten Linux-Distribution bereitstellen möchten. Aber multiplizieren Sie diesen einzelnen Build mit der Anzahl der verschiedenen Linux-Distributionen und der Anzahl der verschiedenen unterstützten Versionen der Linux-Distribution und Sie haben schnell einen Alptraum von verschiedenen Build-Optionen auf verschiedenen Versionen. Beachten Sie auch, dass jede Linux-Distributionsversion eine Reihe von verschiedenen Kerneln enthält, die alle auf unterschiedliche Hardwaretypen (verschiedene Prozessortypen und verschiedene Optionen) abgestimmt sind, so dass Sie auch für eine einzige Version mehrere Versionen Ihres Moduls erstellen müssen.

Vertrau mir, du wirst im Laufe der Zeit verrückt werden, wenn du versuchst, diese Art von Veröffentlichung zu unterstützen, ich habe das vor langer Zeit auf die harte Tour gelernt......
Stabile Kernel-Source-Schnittstellen

Dies ist ein viel "volatileres" Thema, wenn man mit Leuten spricht, die versuchen, einen Linux-Kerneltreiber, der nicht im Hauptkernelbaum enthalten ist, über die Zeit auf dem neuesten Stand zu halten.

Die Entwicklung des Linux-Kernels ist kontinuierlich und schnell und hört nie auf, sich zu verlangsamen. Als solches finden die Kernel-Entwickler Fehler in aktuellen Schnittstellen oder finden einen besseren Weg, um die Dinge zu erledigen. Wenn sie das tun, legen sie dann die aktuellen Schnittstellen fest, um besser zu funktionieren. Dabei können sich Funktionsnamen ändern, Strukturen können wachsen oder schrumpfen und Funktionsparameter überarbeitet werden. In diesem Fall werden alle Instanzen, in denen diese Schnittstelle innerhalb des Kernels verwendet wird, gleichzeitig repariert, um sicherzustellen, dass alles weiterhin ordnungsgemäß funktioniert.

Ein konkretes Beispiel dafür ist die USB-Interferenz im Kernel.

Gruss Lt.Guck