Updates unter Linux erfordern einen Neustart, wenn sie den Kernel betreffen. Treiber sind Teil des Kernels. Es ist manchmal möglich, einen Treiber unter Linux ohne Neustart zu aktualisieren, aber das kommt nicht oft vor: Der Peripherie-Controller des Treibers kann während des Updates nicht verwendet werden, und die neue Treiberversion muss mit dem laufenden Kernel kompatibel sein.
Um einen Treiber auf ein laufendes System zu aktualisieren, auf dem das vom Treiber gesteuerte Peripheriegerät verwendet wird, muss der alte Treiber das Peripheriegerät in einem Zustand verlassen, mit dem der neue Treiber beginnen kann. Der alte und der neue Treiber müssen auch die Übergabe von Verbindungen von Clients verwalten. Das ist machbar, aber schwierig; Wie schwierig es ist, hängt davon ab, was der Fahrer fährt. Zum Beispiel erfordert ein Dateisystem-Update ohne Aufheben der Bereitstellung des Dateisystems die Übergabe einiger sehr komplexer Datenstrukturen, ist jedoch auf der Hardwareseite leicht zu handhaben (leeren Sie einfach die Puffer vor dem Update und beginnen Sie mit einem leeren Cache). Umgekehrt muss ein Eingabetreiber nur eine Liste offener Deskriptoren oder dergleichen auf der Clientseite senden.
Das Aktualisieren eines Treibers auf einem Live-System ist eine gängige Praxis während der Entwicklung auf Betriebssystemen, auf denen Treiber dynamisch geladen und entladen werden können, normalerweise jedoch nicht, während das Peripheriegerät verwendet wird. Das Aktualisieren eines Treibers in der Produktion wird normalerweise nicht unter Betriebssystemen wie Linux und Windows durchgeführt. Ich nehme an, dass dies auf Hochverfügbarkeitssystemen durchgeführt wird, mit denen ich nicht vertraut bin.
Einige Treiber befinden sich nicht im Kernel (z. B. FUSE- Dateisysteme). Dies macht es einfach, sie zu aktualisieren, ohne den Rest des Systems zu aktualisieren, erfordert jedoch weiterhin, dass der Treiber nicht verwendet wird (z. B. müssen Instanzen des FUSE-Dateisystems ausgehängt und erneut gemountet werden, um die neue Treiberversion verwenden zu können).
Linux verfügt über Mechanismen zum Aktualisieren des Kernels ohne Neustart: Ksplice , Kpatch , KGraft . Dies ist technisch schwierig, da die aktualisierte Version weitgehend mit der alten Version kompatibel sein muss. Insbesondere müssen seine Datenstrukturen genau das gleiche binäre Layout haben. Einige Distributionen bieten diesen Service für Sicherheitsupdates an. Diese Funktionen sind (noch?) Nicht im Linux-Kernel verfügbar. Auf einem Linux-Hauptkernel kann ein Treiber nur aktualisiert werden, wenn er als Modul geladen ist und wenn das Modul entladen werden kann und das neue Modul mit dem laufenden Kernel kompatibel ist.