Wie funktioniert das Update des Linux-Treibers?

7

Soweit ich weiß, erfordert kein Update auf einem Linux-Computer einen Neustart. Windows muss jedoch mehrmals neu gestartet werden, damit ein Update abgeschlossen werden kann. Dies ist verständlich, da die Hardware derzeit möglicherweise verwendet wird und ein Neustart sicherstellt, dass keine Software den Treiber verwendet.

Aber wie kann ein Betriebssystem (oder Linux als Beispiel) mit einer solchen Situation umgehen, in der Sie einen Treiber aktualisieren möchten, der derzeit verwendet wird?


quelle

Antworten:

9

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.

Gilles 'SO - hör auf böse zu sein'
quelle
7

Ich möchte Gilles 'Antwort dahingehend ergänzen, dass im Gegensatz zu Windows, wo die Treiber in den meisten Fällen bei der Installation entladen und geladen werden, die Installation von Treibern unter Linux hauptsächlich darin besteht, die Binärdateien und die Konfiguration zum Dateisystem hinzuzufügen und als die festzulegen letzte Version.

Dies bedeutet, dass Sie sich im Gegensatz zu Windows, das Sie zum Neustart auffordert, da sich Ihr System in einem instabilen / unbekannten Zustand befindet, unter Linux meistens nur in dem Zustand befinden, in dem Sie sich vor der Installation des Treibers befanden.

Darüber hinaus besteht das Hinzufügen "neuer" Treiber unter Linux aus dem Laden der Kernelmodule. Wenn Sie also einen neuen Treiber hinzufügen, müssen Sie normalerweise nicht neu starten. In Windows werden die meisten Geräte von einem generischen Treiber verwaltet, sodass ein Treiber auch beim Hinzufügen neuer Geräte entladen wird.

Schließlich hat der Kernel kein Flag "Neustart erforderlich", sodass der Vorschlag zum Neustart vom Entwickler des Treiberhilfsprogramms abhängt. Dies bedeutet, dass es Fälle geben kann, in denen Sie einen Neustart hätten durchführen müssen, Sie jedoch nur keine Angabe erhalten haben das solltest du.

Didi Kohen
quelle