Ingenieure von Red Hat haben den ersten Satz von Patches zur Integration des Nova-Treibers in den Linux-Kernel vorgeschlagen. Der Treiber ist für den Einsatz mit NVIDIA-GPUs ausgelegt, die mit GSP-Firmware ausgestattet sind und seit der NVIDIA GeForce RTX 2000-Serie auf der Turing-Mikroarchitektur verwendet werden. In solchen GPUs sind die Initialisierungs- und Verwaltungsoperationen in der Firmware implementiert und werden von einem separaten GSP (GPU System Processor) Mikrocontroller ausgeführt. Es wird erwartet, dass Nova langfristig den Nouveau-Treiber für GPUs mit GSP-Unterstützung ersetzen wird.
Der neue Treiber ist in Rust geschrieben, und da die Infrastruktur zur Entwicklung von Rust-Treibern sich noch in der Entwicklung befindet, beabsichtigt man, den Nova-Code schrittweise in den Hauptkernel zu integrieren, während die notwendigen Bindungen für die Programmiersprache Rust verfügbar werden. In der ersten Phase wird der Treiber „nova-core“ mit 232 Zeilen Code zur Integration in den Kernel vorgeschlagen. Nova-core implementiert eine grundlegende Abstraktionsschicht über die Software-Schnittstellen der GSP-Firmware und bietet eine API, die unabhängig von den Firmware-Versionen ist.
In der nächsten Phase plant man, den DRM-Treiber nova-drm (Direct Rendering Manager) in den Kernel aufzunehmen, um mit GPUs aus dem Benutzerspeicher zu interagieren, sowie einen VFIO-Treiber mit einem vGPU-Manager, der die Verwendung virtueller NVIDIA-GPUs in Virtualisierungssystemen ermöglicht.
Der Hauptgrund für die Förderung des neuen Nova-Treibers ist die Möglichkeit, die Komplexitäten des Nouveau-Treibers zu beseitigen und durch die Nutzung vorhandener Handler, die von der GSP-Firmware bereitgestellt werden, erhebliche Vereinfachungen zu erreichen. Nova wird auch architektonische Probleme lösen, die im Nouveau eine wesentliche Überarbeitung des Codes erfordern, wie beispielsweise Probleme mit Sperren im VMM/MMU-Code. Die Programmiersprache Rust wurde gewählt, um die Wahrscheinlichkeit von Fehlern bei der Arbeit mit Speicher zu verringern und um die Entwicklung eines funktionierenden Treibers mit der Erstellung von Bindungen und Abstraktionen für die Treiberentwicklung in Rust zu kombinieren.

Was den Fortschritt bei der Integration von Funktionen zur Entwicklung von Treibern in den Linux-Kernel in der Programmiersprache Rust betrifft, wurden in die Version 6.14 Rust-Bindings für PCI, Plattformen, Open Firmware, zeichengestützte Geräte und einige Ein-/Ausgabefunktionen aufgenommen. Greg Kroah-Hartman, der für die Unterstützung der stabilen Kernel-Version verantwortlich ist, beschrieb im Pull-Request mit der Aktualisierung der Treiber für den Kernel 6.14 den aktuellen Stand als „fast bereit für das Schreiben eines echten Treibers in Rust“.
Quelle: opennet.ru
