Ein Framework in Rust könnte im Kernel implementiert werden, um die Treiber zu verbessern

Rust Linux-Kernel

Josh Triplett, ein Unternehmen mit Sitz in Intel und Mitglied des Entwicklungsaufsichtskomitees von Crates.io, hat bereits vor einigen Tagen eine Arbeitsgruppe vorgestellt in seiner Rede auf dem Open Source Technology Summit Ziel ist es, Rust in der Linux-Kernel-Programmierung mit C gleichzusetzen.

In der Arbeitsgruppe, die gerade erstellt wird, Rust-Entwickler werden zusammen mit Intel-Ingenieuren Spezifikationen erstellen Dies kann die Funktionalität hervorheben, die Rust für die Programmierung im Linux-Kernel implementieren muss. Die Systemprogrammierung erfordert häufig Manipulationen auf niedriger Ebene, z. B. das Ausführen privilegierter Prozessoranweisungen und das Abrufen detaillierter Informationen zum Prozessorstatus.

Von den ähnlichen Funktionen, die bereits für Rust entwickelt wurden, Unterstützung für unbenannte Strukturen wird unterstützt, Gewerkschaften (Vereinigung), Assembler-Einfügungen (das Makro "asm!") und das Gleitkommazahlenformat BFLOAT16.

Josh glaubt, dass die Zukunft der Systemprogrammierung bei Rust liegt, und die C-Sprache in der modernen Realität behauptet, Assemblers Platz in der Vergangenheit zu sein. Rust entlastet Entwickler nicht nur von spezifischen C-Sprachproblemen, die durch die Arbeit mit dem Speicher auf niedriger Ebene entstehen, sondern bietet auch Anwendbarkeit bei der Entwicklung moderner Programmierparadigmen.

Während der Diskussion über Joshs Rede wurde die Idee zum Ausdruck gebracht:

Fügen Sie dem Linux-Kernel die Möglichkeit hinzu, Rust-Sprachtreiber zu entwickeln, mit denen mit minimalem Aufwand bessere und sicherere Treiber erstellt werden können, die Probleme wie den Zugriff auf den Speicherbereich nach dem Freigeben, das Verweisen auf Nullzeiger und das Beenden über die Grenzen hinaus verringern des Puffers.

Greg Kroah-Hartman, verantwortlich für die Aufrechterhaltung eines stabilen Zweigs des Linux-Kernels undx drückte seine Bereitschaft aus, dem Kernel ein Rust-Treiber-Framework hinzuzufügen, wenn es echte Vorteile gegenüber C hat. Beispielsweise werden sichere Bindungen über die Kern-API bereitgestellt. Außerdem betrachtet Greg dieses Framework nur als eine Option, die standardmäßig nicht aktiv ist, um Rust nicht in die Anzahl der Kernassembly-Abhängigkeiten einzubeziehen.

Es stellte sich heraus, dass bereits mehrere Teams in diese Richtung arbeiten. Beispielsweise haben die Entwickler von Fish in a Barrel ein Toolkit zum Schreiben ladbarer Module für den Linux-Kernel in der Sprache Rust vorbereitet, wobei eine Reihe abstrakter Ebenen über Kernel-Schnittstellen und -Strukturen verwendet wurden, um die Sicherheit zu erhöhen.

Zwischenebenen werden automatisch basierend auf den Kernel-Header-Dateien generiert, die mit dem Dienstprogramm bindgen verfügbar sind. Clang wird verwendet, um Zwischenschichten aufzubauen. Zusammengesetzte Module verwenden zusätzlich zu den Layern das staticlib-Paket.

Gleichzeitig wird ein weiteres Projekt entwickelt, das sich auf die Entwicklung von Controllern für eingebettete Systeme konzentriert und Internet of Things-Geräte, die auch bindgen verwenden, um Collars basierend auf Kernel-Header-Dateien zu generieren.

Mit dem Framework können Sie die Treibersicherheit verbessern, ohne Änderungen am Kernel vornehmen zu müssen. Anstatt zusätzliche Isolationsstufen für Treiber im Kernel zu erstellen, wird vorgeschlagen, Probleme beim Kompilieren mit einer sichereren Rust-Sprache zu blockieren.

Es wird davon ausgegangen, dass Gerätehersteller diesen Ansatz ohne ordnungsgemäße Prüfung in Eile entwickeln können.

Es wurden noch nicht alle geplanten Funktionen implementiert. Das Framework ist jedoch bereits für diesen Job gut geeignet und wird verwendet, um einen funktionierenden Treiber für den mitgelieferten LAN9512-USB-Ethernet-Controller auf der Raspberry Pi 3-Karte zu schreiben.

Der vorhandene smsc95xx-Treiber wurde geschrieben als Referenzimplementierung beim Schreiben des Rust-Treibers in C-Sprache.

Es wird darauf hingewiesen, dass die Modulgröße und der Overhead der Laufzeitkomponenten bei der Entwicklung eines Treibers für Rust nicht von Bedeutung sind, sodass Sie das Framework für Geräte mit begrenzten Ressourcen verwenden können.

Quelle: https://hub.packtpub.com


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   L1ch sagte

    Ich kann keine Informationen für einen smsc95xx-Treiber in der Quelle finden oder dass etwas in Rust unter Linux implementiert wird.