Come scaricare il modulo del kernel 'nvidia-drm'?


29

Sto cercando di installare il driver NVIDIA più aggiornato in Debian Stretch. Ho scaricato NVIDIA-Linux-x86_64-390.48.runda qui , ma quando provo a farlo

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

come suggerito, appare un messaggio di errore.

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.

Quando provo a scoprire chi sta usando nvidia-drm(o nvidia_drm), non vedo nulla.

~$ 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
~$

E quando provo a rimuoverlo, dice che viene utilizzato.

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

Ho riavviato e avviato in modalità solo testo (premendo Ctrl + Alt + F2 prima di fornire nome utente / password), ma ho riscontrato lo stesso errore.

Inoltre, come faccio a "sapere che il mio kernel supporta lo scarico dei moduli"?

Ricevo alcuni avvertimenti all'avvio relativi a NVIDIA, non ho idea se siano correlati, però:

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)

puoi provare a farlo in modalità di salvataggio?
vfbsilva,

Vedi questo problema su github : systemctl stop systemd-logindprima di scaricare i moduli.
GAD3R

@vfbsilva La mia modalità di salvataggio è strana, è in loop per sempre, identificando tutti i dispositivi USB ancora e ancora. Sono riuscito a premere Invio, dare la password di root e ottenere un prompt, ma non c'è / dev, quindi non è possibile montare il disco.
Rodrigo,

@ GAD3R Tutto quello che ho è systemctl stop systemd-logind.service, ma questo chiude lo schermo e mi riporta all'accesso grafico, dove devo fare di nuovo Ctrl + Alt + F2.
Rodrigo,

Risposte:


28

Immagino che tu voglia fermare il display manager, che sospetto che userebbe i driver Nvidia.

Dopo il passaggio a una console di testo (premendo Ctrl+ Alt+ F2) e l'accesso come root, utilizzare il comando seguente per disabilitare la destinazione grafica, che è ciò che mantiene il display manager in esecuzione:

# systemctl isolate multi-user.target

A questo punto, mi aspetto che tu sia in grado di scaricare i driver Nvidia usando modprobe -r(o rmmoddirettamente):

# modprobe -r nvidia-drm

Una volta che sei riuscito a sostituirlo / aggiornarlo e sei pronto per riavviare l'ambiente grafico, puoi usare questo comando:

# systemctl start graphical.target

Sono riuscito a disinstallarlo (usando la tua risposta) e installare la nuova versione al punto in cui non esisteva più la modalità grafica funzionante. Ho dovuto formattare il PC e reinstallare Debian. Ora per un set completamente diverso di bug ... Tutto questo solo per vedere "GPU" come opzione di rendering in Blender, e ancora non lo vedo. I driver proprietari fanno schifo!
Rodrigo

4
Questo ha funzionato per me senza il modprobepasso.
Don Kirkby,

1
Sì, non avevo nemmeno bisogno di un modprobepasso.
David Jung,

Non riesco a rimuovere nvidia-drm anche quando nella console di testo. Qualche idea su come posso rimuoverlo forzatamente?
addison

@addison Nota che non è sufficiente essere solo su una console di testo, devi fermare X11 o Wayland o qualunque cosa stia usando il driver nvidia dal kernel. Il punto del systemctl isolatecomando è farlo. Ma è possibile che non sia configurato correttamente nel tuo sistema ... Controlla ps -efe vedi se riesci a individuare ciò che potrebbe utilizzare il driver, quindi fermare quel processo. Ciò dovrebbe consentire di scaricare il driver.
filbranden,

5

lsofelenca tutti i file utilizzati dai processi di userspace. Ma nvidia_drmè un modulo del kernel, quindi lsofnon vedrà necessariamente se è effettivamente in uso. (Il file del modulo non sarà aperto perché il kernel lo ha già completamente caricato nella RAM. Ma il modulo potrebbe fornire servizi allo spazio utente o ad altri componenti del kernel, e questo è ciò che impedisce lo scarico del modulo.)

Esegui lsmod | grep nvidia.drme vedi i numeri a destra del nvidia_drmnome del modulo. Il primo numero è semplicemente la dimensione del modulo; il secondo è il conteggio degli usi. Per rimuovere correttamente il modulo, il conteggio degli usi deve essere 0 per primo.

Se il server X11 è in esecuzione e utilizza il nvidiadriver, il nvidia_drmmodulo del kernel sarà sicuramente in uso. Quindi dovrai almeno passare alla console di testo e spegnere il server X11. Di solito questo può essere fatto interrompendo qualsiasi servizio X Display Manager in uso (dipende dall'ambiente desktop in uso).

Come diceva il messaggio di errore, se sei in esecuzione nvidia-persistenced, dovrai interrompere anche quello prima di poter scaricare il nvidia_drmmodulo.


Dopo Ctrl + Alt + F2, lsmodmi sta dicendo che c'è 1 processo usando nvidia_drm. Così ho fatto sudo /etc/init.d/gdm3 stop, che è andato oka fermarlo. Ma ancora 1 processo in lsmod. Ora dentro Gnome, ps aux | grep nvidiaspettacoli [irq/129-nvidia]e [nvidia]ma no nvidia-persistenced. Inoltre, qui lsmodmostra 2 processi che utilizzano nvidia_drm. Sono bloccato.
Rodrigo,

3

Ho avuto un problema simile.

* Motivo: era in uso il pacchetto nvidia.drm


L'ho risolto eliminando tutti i pacchetti NVIDIA.

Rimuovi tutte le precedenti installazioni NVIDIA con questi 2 comandi:


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

Il modulo deve essere rimosso.

Riavvia e vai avanti.


Grazie! Questo può tornare utile se devo formattarlo di nuovo ...
Rodrigo,

2

Nei commenti si segnala che l'arresto del servizio systemd-logind riporta all'accesso grafico . Se disponi di un accesso grafico, X è in esecuzione, quindi il driver video è caricato e in uso. Questo molto probabilmente spiega in parte perché il modulo nvidia-drm è in uso.

Inoltre, tradisci un apparente malinteso quando dici

Ho riavviato e avviato in modalità solo testo (premendo Ctrl + Alt + F2 prima di fornire nome utente / password), ma ho riscontrato lo stesso errore.

Premendo Ctrl + Alt + F2 si passa a un terminale virtuale n. 2, che potrebbe ben essere configurato per l'accesso in modalità testo, ma è molto diverso dall'avvio in modalità testo. Se sul terminale virtuale predefinito era presente una schermata di accesso grafica, X è in esecuzione e il passaggio a un altro VT non lo modifica. Stai solo effettuando l'accesso a una sessione non X.

La prima e più semplice cosa da provare è effettivamente arrestare il server X. Il modo tradizionale per farlo sarebbe quello di accedere alla sessione in modalità testo ed eseguire il comando

telinit 3

passare al runlevel 3. Anche questo dovrebbe funzionare con systemd, ma il modo nativo systemd sarebbe invece eseguire

systemctl isolate multi-user.target

Entrambi richiedono privilegi, ovviamente, quindi dovrai usare sudoo fare il root.

Se ciò non rimuove il modulo, o almeno ti rende possibile farlo manualmente, la tua prossima scommessa migliore sarebbe quella di avviare il sistema direttamente nel runlevel 3 (target multiutente), o forse anche nel runlevel 1 (obiettivo di salvataggio). Di solito lo faccio aggiungendo "3" (o "1") alla fine dell'elenco degli argomenti del kernel al momento dell'avvio tramite il bootloader. È inoltre possibile modificare la destinazione di avvio predefinita come descritto in questo articolo .

Si noti inoltre che il driver nVidia è disponibile in pacchetti predefiniti per la maggior parte delle distribuzioni Linux. Pochi includono questi pacchetti nei propri repository standard perché il driver è, dopo tutto, proprietario, ma è sicuramente possibile trovare un repository di terze parti affidabile che lo possiede. Consiglio vivamente di utilizzare tali pacchetti invece di eseguire direttamente il programma di installazione, ma per arrivarci da dove ti trovi ora, potresti dover prima disinstallare manualmente il driver.


Sono riuscito a disinstallarlo (usando la risposta di Filipe) e installare la nuova versione al punto in cui non esisteva più la modalità grafica funzionante. Ho dovuto formattare il PC e reinstallare Debian. Ora per un set completamente diverso di bug ... Tutto questo solo per vedere "GPU" come opzione di rendering in Blender, e ancora non lo vedo. I driver proprietari fanno schifo!
Rodrigo

@Rodrigo, mi dispiace che tu abbia avuto un'esperienza così negativa. Ma questo tipo di problema è un esempio del perché raccomando di usare i pacchetti invece di eseguire installazioni manuali.
John Bollinger

Sì, preferisco usare i pacchetti. Ma ho letto da qualche parte che l'opzione GPU in Blender non è stata abilitata probabilmente a causa di un driver obsoleto ...
Rodrigo

2

Installazione CUDA

1) Scarica l'ultimo CUDA Toolkit

2) Passare a tty3 premendo Ctl + Alt + F3

3) Scaricare nvidia-drm prima di procedere.

3a) Isolare multi-user.target

sudo systemctl isolate multi-user.target

3b) Notare che nvidia-drm è attualmente in uso.

lsmod | grep nvidia.drm

3c) Scaricare nvidia-drm

sudo modprobe -r nvidia-drm

4d) Notare che nvidia-drm non è più in uso.

lsmod | grep nvidia.drm

5) Vai alla cartella di download ed esegui l'installazione di cuda.

sudo sh cuda_10.1.168_418.67_linux.run

6) Rispondere a qualsiasi richiesta durante l'installazione.

7) Al termine dell'installazione, confermare che la versione CUDA è stata aggiornata.

nvidia-smi

8) Riavviare la GUI.

sudo systemctl start graphical.target

0

Ha avuto lo stesso problema con Debian Stretch durante il tentativo di installare i driver Nvidia. Quando nella mod di testo la mia unica soluzione era rimuovere il driver, reinstallare gdm e gnome-shell. So che è una soluzione goffa, ma ricordo di aver provato a riparare la shell gnome e rimuovere solo il driver Nvidia e reinstallare GDM. Si è scoperto che era molto più semplice reinstallare l'intera shell.


Immagino che aspetterò una soluzione meno goffa, se si presenta.
Rodrigo,

0

Ho anche riscontrato lo stesso problema. Il motivo dell'errore è che ho selezionato accidentalmente "Installa driver nvidia" durante l'installazione di cuda.

Quindi, durante l'installazione di CUDA, quando si incontrano le seguenti opzioni:

Installa il driver NVIDIA Accelerated Graphics per Linux-x86_64 384.81? (S) ì / (n) o / (q) uit:

Seleziona q , il problema sarà risolto.


Quindi cosa stai dicendo? Che l'unica soluzione sia reinstallare? Ovviamente non è l'unica soluzione; altre risposte sono state pubblicate.
Scott

0

ciò che ha funzionato per me è stato cambiare il sistema per iniziare di più nel testo

systemctl set-default runlevel3.target

quindi riavviare e installare il driver nvidia cuda una volta terminato, è possibile che si desideri modificare il sistema per riavviare in modalità grafica

systemctl set-default runlevel5.target

0

Smettere di systemd-logindrisolverlo per me:

sudo systemctl stop systemd-logind

Questo è suggerito come soluzione alternativa in questo problema github sulla pagina github nvidia-xrun:

Buone notizie ragazzi, systemd-logind è il colpevole qui. L'attuale soluzione alternativa è eseguire il comando seguente dopo aver effettuato il logout dalla sessione "nvidia-xrun" sudo systemctl stop systemd-logind

Quindi, dovrai rimuovere manualmente gli altri moduli nvidia e spegnere manualmente la DGPU. Ecco lo snippet di codice che viene eseguito dopo la disconnessione dalla sessione "nvidia-xrun".

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"

Problema di Systemd su Github

Link di riferimento dal portale degli sviluppatori di Nvidia Linux

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.