Wie entlade ich das Kernelmodul 'nvidia-drm'?

28

Ich versuche, den aktuellsten NVIDIA-Treiber in Debian Stretch zu installieren. Ich habe NVIDIA-Linux-x86_64-390.48.runvon hier heruntergeladen , aber wenn ich es versuche

sudo sh ./NVIDIA-Linux-x86_64-390.48.run

Wie vorgeschlagen, wird eine Fehlermeldung angezeigt.

ERROR: An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel.  This may be because it is in use (for example, by an X server, a CUDA program, or 
         the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading.  Please be sure to exit any programs    
         that may be using the GPU(s) before attempting to upgrade your driver.  If no GPU-based programs are running, you know that your kernel supports module unloading,   
         and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module's usage count, for which the simplest remedy is to     
         reboot your computer.

Wenn ich herauszufinden versuche, wer nvidia-drm(oder nvidia_drm) verwendet, sehe ich nichts.

~$ sudo lsof | grep nvidia-drm
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
~$ sudo lsof -e /run/user/1000/gvfs | grep nvidia-drm
~$

Und wenn ich versuche, es zu entfernen, heißt es, es wird verwendet.

~$ sudo modprobe -r nvidia-drm
modprobe: FATAL: Module nvidia_drm is in use.
~$ 

Ich habe neu gestartet und im Nur-Text-Modus gestartet (durch Drücken von Strg + Alt + F2, bevor Benutzername / Passwort eingegeben wurden), habe aber den gleichen Fehler erhalten.

Woher weiß ich außerdem, dass mein Kernel das Entladen von Modulen unterstützt?

Ich bekomme beim Booten ein paar Warnungen in Bezug auf nvidia, keine Ahnung, ob sie verwandt sind:

Apr 30 00:46:15 debian-9 kernel: nvidia: loading out-of-tree module taints kernel.
Apr 30 00:46:15 debian-9 kernel: nvidia: module license 'NVIDIA' taints kernel.
Apr 30 00:46:15 debian-9 kernel: Disabling lock debugging due to kernel taint
Apr 30 00:46:15 debian-9 kernel: NVRM: loading NVIDIA UNIX x86_64 Kernel Module  375.82  Wed Jul 19 21:16:49 PDT 2017 (using threaded interrupts)
Rodrigo
quelle
Kannst du es im Rettungsmodus versuchen?
Vfbsilva
Lesen Sie dieses Problem bei github : systemctl stop systemd-logindbevor Sie die Module entladen.
GAD3R
@vfbsilva Mein Rettungsmodus ist seltsam, er wird für immer wiederholt und identifiziert immer wieder alle USB-Geräte. Ich habe es geschafft, die Eingabetaste zu drücken, das root-Passwort einzugeben und eine Eingabeaufforderung zu erhalten, aber es gibt kein / dev, so dass kein Laden der Festplatte möglich ist.
Rodrigo
@ GAD3R Alles, was ich habe, ist systemctl stop systemd-logind.service, aber das schließt den Bildschirm und bringt mich zurück zum Grafik-Login, wo ich noch einmal Strg + Alt + F2 machen muss.
Rodrigo

Antworten:

27

Ich stelle mir vor, Sie möchten den Anzeigemanager anhalten. Ich vermute, dass er die Nvidia-Treiber verwendet.

Verwenden Sie nach dem Wechsel zu einer Textkonsole (Drücken von Ctrl+ Alt+ F2) und dem Anmelden als Root den folgenden Befehl, um das grafische Ziel zu deaktivieren. Dadurch wird der Display-Manager weiter ausgeführt:

# systemctl isolate multi-user.target

An diesem Punkt würde ich erwarten, dass Sie die Nvidia-Treiber mit modprobe -r(oder rmmoddirekt) entladen können :

# modprobe -r nvidia-drm

Sobald Sie es ersetzt / aktualisiert haben und bereit sind, die grafische Umgebung erneut zu starten, können Sie den folgenden Befehl verwenden:

# systemctl start graphical.target
filbranden
quelle
Ich konnte es deinstallieren (mithilfe Ihrer Antwort) und die neue Version so weit installieren, dass es keinen funktionierenden Grafikmodus mehr gab. Ich musste den PC formatieren und Debian neu installieren. Nun zu einer völlig anderen Reihe von Fehlern ... All dies nur, um "GPU" als Option für das Rendern in Blender zu sehen, und ich sehe es immer noch nicht. Proprietäre Treiber sind zum Kotzen!
Rodrigo
4
Das hat bei mir ohne den modprobeSchritt geklappt.
Don Kirkby
1
Ja, ich brauchte auch keinen modprobeSchritt.
David Jung
Ich kann nvidia-drm auch in der Textkonsole nicht entfernen. Irgendeine Idee, wie ich es mit Gewalt entfernen kann?
Addison
@addison Beachten Sie, dass es nicht genug ist , um nur zu sein auf einer Textkonsole, müssen Sie X11 oder Wayland stoppen oder was auch immer die nVidia - Treiber aus dem Kernel verwendet. Der Sinn des systemctl isolateBefehls ist es, das zu tun. Aber es ist möglich, dass das in Ihrem System nicht richtig konfiguriert ist. Überprüfen ps -efSie, ob Sie erkennen können, was möglicherweise den Treiber verwendet, und halten Sie diesen Prozess dann an. Das sollte es Ihnen ermöglichen, den Treiber zu entladen.
10.
5

lsofListet alle Dateien auf, die von Userspace-Prozessen verwendet werden. Ist nvidia_drmaber ein Kernelmodul, so lsofwird nicht unbedingt ersichtlich, ob es tatsächlich in Gebrauch ist oder nicht. (Die Modul Datei wird nicht geöffnet werden , da der Kernel bereits vollständig es in dem Arbeitsspeicher geladen ist. Aber das Modul könnte Dienstleistungen für die User - Space oder anderen Kernel - Komponenten bereitstellt, und , Das ist es, was das Entladen des Moduls verhindert.)

Führen Sie aus, lsmod | grep nvidia.drmund sehen Sie sich die Zahlen rechts neben dem nvidia_drmModulnamen an. Die erste Zahl ist einfach die Größe des Moduls; Das zweite ist die Nutzungsanzahl. Um das Modul erfolgreich zu entfernen, muss der Nutzungszähler zuerst 0 sein.

Wenn der X11-Server ausgeführt wird und den nvidiaTreiber verwendet, wird das nvidia_drmKernelmodul mit größter Sicherheit verwendet. Sie müssen also zumindest in die Textkonsole wechseln und den X11-Server herunterfahren. In der Regel können Sie dazu den von Ihnen verwendeten X Display Manager-Dienst stoppen (abhängig von der verwendeten Desktop-Umgebung).

Wie in der Fehlermeldung angegeben, müssen Sie die Ausführung nvidia-persistencedbeenden, bevor Sie das nvidia_drmModul entladen können .

telcoM
quelle
lsmodSagt mir nach Strg + Alt + F2, dass 1 Prozess verwendet wird nvidia_drm. Also habe ich es getan sudo /etc/init.d/gdm3 stop, was okes gestoppt hat. Aber noch 1 Prozess in lsmod. Nun in Gnome, ps aux | grep nvidiaShows [irq/129-nvidia]und [nvidia]doch nicht nvidia-persistenced. Auch hier lsmodzeigt 2 Prozesse mit nvidia_drm. Ich stecke fest.
Rodrigo
3

Ich hatte ein ähnliches Problem.

* Grund: Das Paket nvidia.drm wurde verwendet


Ich habe es behoben, indem ich alle NVIDIA-Pakete gelöscht habe.

Entfernen Sie alle vorherigen NVIDIA-Installationen mit diesen 2 Befehlen:


$ sudo apt-get purge nvidia*
$ sudo apt-get autoremove

Modul sollte entfernt werden.

Starten Sie neu und fahren Sie fort.

Kelly
quelle
Vielen Dank! Dies kann nützlich sein, wenn ich es erneut formatieren muss ...
Rodrigo
2

Sie berichten in Kommentaren, dass Sie durch Beenden des Dienstes systemd-logind wieder zur grafischen Anmeldung zurückkehren. Wenn Sie eine grafische Anmeldung haben, wird X ausgeführt, sodass der Grafiktreiber geladen und verwendet wird. Dies erklärt sehr wahrscheinlich teilweise, warum das nvidia-drm-Modul verwendet wird.

Außerdem verrätst du ein offensichtliches Missverständnis, wenn du sagst

Ich habe neu gestartet und im Nur-Text-Modus gestartet (durch Drücken von Strg + Alt + F2, bevor Benutzername / Passwort eingegeben wurden), habe aber den gleichen Fehler erhalten.

Durch Drücken von Strg + Alt + F2 wird zu einem virtuellen Terminal Nr. 2 gewechselt, das möglicherweise für die Anmeldung im Textmodus konfiguriert ist, von "Starten im Textmodus" jedoch weit entfernt ist. Wenn Sie auf dem virtuellen Standardterminal einen grafischen Anmeldebildschirm hatten, wird X ausgeführt, und der Wechsel zu einem anderen VT ändert dies nicht. Sie melden sich nur bei einer Nicht-X-Sitzung an.

Der erste und einfachste Versuch besteht darin, den X-Server tatsächlich herunterzufahren. Die alte Art, dies zu tun, besteht darin, sich bei Ihrer Sitzung im Textmodus anzumelden und den Befehl auszuführen

telinit 3

auf runlevel 3 wechseln. Das sollte auch mit systemd funktionieren, aber der systemeigene Weg wäre, stattdessen zu laufen

systemctl isolate multi-user.target

Für beide sind natürlich Berechtigungen erforderlich, daher müssen Sie sudosich selbst als root anmelden.

Wenn das Modul dadurch nicht entfernt wird oder zumindest manuell ausgeführt werden kann, booten Sie das System am besten direkt in Runlevel 3 (Mehrbenutzerziel) oder sogar in Runlevel 1 (Rettungsziel). Normalerweise füge ich dazu "3" (oder "1") am Ende der Kernel-Argumentliste beim Booten über den Bootloader hinzu. Sie können das Standardstartziel auch wie in diesem Artikel beschrieben ändern .

Beachten Sie auch, dass der nVidia-Treiber in vorgefertigten Paketen für die meisten Linux-Distributionen verfügbar ist. Nur wenige enthalten diese Pakete in ihren eigenen Standard-Repos, weil der Treiber ja proprietär ist, aber Sie können mit Sicherheit ein seriöses Repo von Drittanbietern finden, das es hat. Ich empfehle dringend, solche Pakete zu verwenden, anstatt das Installationsprogramm direkt auszuführen, aber um dorthin zu gelangen, wo Sie sich gerade befinden, müssen Sie möglicherweise zuerst den Treiber manuell deinstallieren.

John Bollinger
quelle
Ich konnte es deinstallieren (mithilfe von Filipes Antwort) und die neue Version bis zu einem Punkt installieren, an dem es keinen funktionierenden Grafikmodus mehr gab. Ich musste den PC formatieren und Debian neu installieren. Nun zu einer völlig anderen Reihe von Fehlern ... All dies nur, um "GPU" als Option für das Rendern in Blender zu sehen, und ich sehe es immer noch nicht. Proprietäre Treiber sind zum Kotzen!
Rodrigo
@ Rodrigo, es tut mir leid, dass du so schlechte Erfahrungen gemacht hast. Ein solches Problem ist jedoch ein Beispiel dafür, warum ich die Verwendung von Paketen empfehle, anstatt manuelle Installationen durchzuführen.
John Bollinger
Ja, ich bevorzuge die Verwendung von Paketen. Aber ich habe irgendwo gelesen, dass die GPU-Option in Blender wahrscheinlich wegen eines veralteten Treibers nicht aktiviert war ...
Rodrigo
2

CUDA-Installation

1) Laden Sie das neueste CUDA Toolkit herunter

2) Wechseln Sie zu tty3, indem Sie Strg + Alt + F3 drücken

3) Entladen Sie nvidia-drm, bevor Sie fortfahren.

3a) Isolieren Sie das Mehrbenutzerziel

sudo systemctl isolate multi-user.target

3b) Beachten Sie, dass derzeit nvidia-drm verwendet wird.

lsmod | grep nvidia.drm

3c) nvidia-drm entladen

sudo modprobe -r nvidia-drm

4d) Beachten Sie, dass nvidia-drm nicht mehr verwendet wird.

lsmod | grep nvidia.drm

5) Gehen Sie in Ihren Download-Ordner und führen Sie die cuda-Installation aus.

sudo sh cuda_10.1.168_418.67_linux.run

6) Beantworten Sie alle Eingabeaufforderungen während der Installation.

7) Vergewissern Sie sich nach Abschluss der Installation, dass die CUDA-Version aktualisiert wurde.

nvidia-smi

8) Starten Sie die GUI erneut.

sudo systemctl start graphical.target
Clayton Mork
quelle
0

Hatte das gleiche Problem mit Debian Stretch beim Versuch, die Nvidia-Treiber zu installieren. Im Text-Mod bestand meine einzige Lösung darin, den Treiber zu entfernen, gdm und gnome-shell neu zu installieren. Ich weiß, dass es eine ungeschickte Lösung ist, aber ich erinnere mich, dass ich zuerst versucht habe, die Gnome-Shell zu reparieren und nur den Nvidia-Treiber zu entfernen und GDM neu zu installieren. Es stellte sich heraus, dass es viel einfacher war, die gesamte Shell neu zu installieren.

Vlad Skurtolov
quelle
Vermutlich warte ich auf eine weniger ungeschickte Lösung, falls welche auftaucht.
Rodrigo
0

Ich bin auch auf das gleiche Problem gestoßen. Der Grund für den Fehler war, dass ich versehentlich "Install nvidia driver" während der Installation von cuda ausgewählt habe.

Wenn Sie also während der Installation von CUDA auf die folgenden Optionen stoßen:

Installieren Sie den NVIDIA Accelerated Graphics Driver für Linux-x86_64 384.81? (y) es / (n) o / (q) uit:

Bitte wählen Sie q , das Problem wird gelöst.

JNing
quelle
Also, was sagst du? Das ist die einzige Lösung, um neu zu installieren? Das ist natürlich nicht die einzige Lösung; Andere Antworten wurden gepostet.
Scott
0

Was für mich funktionierte war, das System zu ändern, um mehr im Text zu beginnen

systemctl set-default runlevel3.target

Starten Sie dann den nvidia cuda-Treiber neu und installieren Sie ihn, wenn Sie fertig sind. Möglicherweise möchten Sie das System so ändern, dass es wieder im Grafikmodus startet

systemctl set-default runlevel5.target
Joaquim Muchaxo
quelle
0

Das Beenden hat systemd-logindes für mich behoben:

sudo systemctl stop systemd-logind

Dies wird als Problemumgehung in dieser Github-Ausgabe auf der Nvidia-Xrun-Github-Seite vorgeschlagen:

Gute Nachrichten Leute, systemd-logind ist der Schuldige hier. Die aktuelle Problemumgehung besteht darin, den folgenden Befehl auszuführen, nachdem Sie sich von der "nvidia-xrun" -Sitzung sudo systemctl stop systemd-logind abgemeldet haben

Anschließend müssen Sie die anderen nvidia-Module manuell entfernen und die DGPU manuell ausschalten. Hier ist das Code-Snippet, das ausgeführt wird, nachdem Sie sich von der "nvidia-xrun" -Sitzung abgemeldet haben.

echo 'Unloading nvidia_drm module' 
execute "sudo rmmod nvidia_drm"

echo 'Unloading nvidia_modeset module' 
execute "sudo rmmod nvidia_modeset"

echo 'Unloading nvidia module' 
execute "sudo rmmod nvidia"

echo 'Turning off nvidia GPU' 
execute "sudo tee /proc/acpi/bbswitch <<<OFF"

echo -n 'Current state of nvidia GPU: ' 
execute "cat /proc/acpi/bbswitch"

Systemd Problem auf Github

Referenzlink vom Nvidia Linux-Entwicklerportal

alexdemartos
quelle