Fünfte Ausgabe von Patches für den Linux-Kernel mit Unterstützung für die Rust-Sprache

Miguel Ojeda, Autor des Rust-for-Linux-Projekts, hat eine fünfte Version von Komponenten zur Entwicklung von Gerätetreibern in der Rust-Sprache zur Prüfung durch Linux-Kernel-Entwickler vorgeschlagen. Die Rust-Unterstützung gilt als experimentell, ist jedoch bereits im Linux-Next-Zweig enthalten und ausreichend entwickelt, um mit 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 Internetsicherheit 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, dritten und vierten Edition der Patches gemacht wurden. In der neuen Version:

  • Dem kontinuierlichen Integrationssystem basierend auf dem von Intel unterstützten 0DAY/LKP-Bot wurden Komponententests für Rust-Unterstützung hinzugefügt und mit der Veröffentlichung von Testberichten begonnen. Wir bereiten die Integration der Rust-Unterstützung in das automatisierte Testsystem KernelCI vor. Das Testen auf Basis von GitHub CI wurde auf die Nutzung von Containern übertragen.
  • Rust-Kernelmodule sind von der Notwendigkeit befreit, die Crate-Attribute „#![no_std]“ und „#![feature(…)]“ zu definieren.
  • Unterstützung für einzelne Assembly-Ziele (.o, .s, .ll und .i) hinzugefügt.
  • Coderichtlinien definieren Regeln zur Trennung von Kommentaren („//“) und Dokumentationscode („///“).
  • Das Skript is_rust_module.sh wurde überarbeitet.
  • Unterstützung für statische (globale gemeinsam genutzte Variablen) Synchronisierungsprimitive basierend auf der „CONFIG_CONSTRUCTORS“-Implementierung hinzugefügt.
  • Die Sperrverwaltung wird vereinfacht: Guard und GuardMut werden kombiniert und ein parametrisierter Typ.
  • Bei der Registrierung von Geräten besteht die Möglichkeit, zusätzliche Parameter zu definieren.
  • Die Abstraktion „RwSemaphore“ wurde hinzugefügt, die als Wrapper für die C-Struktur rw_semaphore fungiert.
  • Um mmap zu verwenden, wurden ein neues mm-Modul und eine VMA-Abstraktion hinzugefügt (ein Wrapper über der vm_area_struct-Struktur).
  • Der GPIO PL061-Treiber wurde auf die Verwendung des „dev_*!“-Makros umgestellt.
  • Es wurde eine allgemeine Bereinigung des Codes durchgeführt.

Source: opennet.ru

Kommentar hinzufügen