Vierte Edition von Patches für den Linux-Kernel mit Unterstützung für die Rust-Sprache

Miguel Ojeda, Autor des Rust-for-Linux-Projekts, schlug eine vierte Version von Komponenten zur Entwicklung von Gerätetreibern in der Rust-Sprache zur Prüfung durch Linux-Kernel-Entwickler vor. Die Rust-Unterstützung gilt als experimentell, wurde jedoch bereits für die Aufnahme in den Linux-Next-Zweig vereinbart und ist ausgereift genug, um mit der Arbeit an der Erstellung von Abstraktionsschichten über Kernel-Subsystemen sowie dem Schreiben von Treibern und Modulen zu beginnen. Die Entwicklung wird von Google und der ISRG (Internet Security Research Group) finanziert, die Gründerin des Let’s Encrypt-Projekts ist und HTTPS und die Entwicklung von Technologien zur Verbesserung der Sicherheit des Internets fördert.

Denken Sie daran, dass die vorgeschlagenen Änderungen es ermöglichen, Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen zu verwenden. Die Rust-Unterstützung wird als Option dargestellt, die standardmäßig nicht aktiviert ist und nicht dazu führt, dass Rust als erforderliche Build-Abhängigkeit für den Kernel einbezogen wird. Durch die Verwendung von Rust für die Treiberentwicklung können Sie mit minimalem Aufwand sicherere und bessere Treiber erstellen, ohne Probleme wie Speicherzugriff nach der Freigabe, Nullzeiger-Dereferenzierungen und Pufferüberläufe.

Die speichersichere Handhabung wird in Rust zur Kompilierungszeit durch Referenzprüfung, Verfolgung des Objektbesitzes und der Objektlebensdauer (Umfang) sowie durch die Bewertung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.

Die neue Version der Patches eliminiert weiterhin die Kommentare, die während der Diskussion der ersten, zweiten und dritten Edition der Patches gemacht wurden. In der neuen Version:

  • Der Übergang zur Verwendung der stabilen Version von Rust 1.58.0 als Referenz-Compiler wurde durchgeführt. Zu den für das Projekt notwendigen Änderungen, die noch nicht im Haupt-Toolkit von Rust enthalten sind, gehören das Flag „-Zsymbol-mangling-version=v0“ (erwartet in Rust 1.59.0) und der Modus „maybe_uninit_extra“ (erwartet in Rust 1.60.0). .XNUMX) werden vermerkt. .
  • Automatische Überprüfungen der Verfügbarkeit geeigneter Rust-Tools hinzugefügt und die Möglichkeit zum Testen der Rust-Unterstützung im System erweitert.
  • Für den Zugriff auf Geräteidentifizierungstabellen („IdArray“ und „IdTable“) aus Rust-Code wurden neue Abstraktionen vorgeschlagen.
  • Ebenen für den Zugriff auf Timer-bezogene Funktionen hinzugefügt (Uhren-Framework).
  • Plattformtreiber werden jetzt durch Trait-Implementierungen definiert.
  • Es wurde ein neues Makro hinzugefügt, um die Registrierung von Plattformtreibern zu vereinfachen, und es wurde eine neue generische Treibervorlage vorgeschlagen.
  • Makros für „dev_*“-Strukturen hinzugefügt.
  • „{read,write}*_relaxed“-Methoden für den IoMem-Typ hinzugefügt.
  • Die FileOpener-Eigenschaft wurde entfernt, um Dateivorgänge zu vereinfachen.
  • Der Parameter „ThisModule“ wurde zu den Argumenten hinzugefügt, die bei der Registrierung eines Treibers übergeben werden.
  • Es wird eine Standardvorlage zum Erstellen von Kernelmodulen in der Rust-Sprache vorgeschlagen.

Source: opennet.ru

Kommentar hinzufügen