Jak zwolnić moduł jądra „NVIDIA-DRM”?


29

Próbuję zainstalować najnowszy sterownik NVIDIA w Debian Stretch. Pobrałem NVIDIA-Linux-x86_64-390.48.runod tutaj , ale gdy próbuję zrobić

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

zgodnie z sugestią pojawia się komunikat o błędzie.

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.

Kiedy próbuję dowiedzieć się, kto używa nvidia-drm(lub nvidia_drm), nic nie widzę.

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

A kiedy próbuję go usunąć, mówi, że jest używany.

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

Zrestartowałem się i zacząłem w trybie tekstowym (naciskając Ctrl + Alt + F2 przed podaniem nazwy użytkownika / hasła), ale dostałem ten sam błąd.

Poza tym, skąd mam wiedzieć, że moje jądro obsługuje rozładowanie modułu?

Otrzymuję kilka ostrzeżeń podczas uruchamiania związanych z NVIDIA, ale nie mam pojęcia, czy są one powiązane:

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)

czy możesz spróbować to zrobić w trybie ratunkowym?
vfbsilva

Zobacz ten problem na github : systemctl stop systemd-logindprzed rozładowaniem modułów.
GAD3R

@vfbsilva Mój tryb ratunkowy jest dziwny, zapętla się na zawsze, identyfikując wszystkie urządzenia USB raz po raz. Udało mi się nacisnąć Enter, podać hasło roota i otrzymać monit, ale nie ma / dev, więc nie jest możliwe podłączenie dysku.
Rodrigo

@ GAD3R Wszystko, co mam systemctl stop systemd-logind.service, to zamyka ekran i przenosi mnie z powrotem do graficznego loginu, gdzie muszę ponownie nacisnąć Ctrl + Alt + F2.
Rodrigo

Odpowiedzi:


28

Wyobrażam sobie, że chcesz zatrzymać menedżera ekranu, co, jak podejrzewam, użyłoby sterowników Nvidii.

Po zmianie na konsolę tekstową (naciśnięcie Ctrl+ Alt+ F2) i zalogowaniu się jako root, użyj następującego polecenia, aby wyłączyć cel graficzny, co powoduje, że menedżer wyświetlania działa:

# systemctl isolate multi-user.target

W tym momencie spodziewam się, że będziesz w stanie zwolnić sterowniki Nvidii za pomocą modprobe -r(lub rmmodbezpośrednio):

# modprobe -r nvidia-drm

Gdy uda Ci się go wymienić / zaktualizować i będziesz gotowy ponownie uruchomić środowisko graficzne, możesz użyć tego polecenia:

# systemctl start graphical.target

Udało mi się go odinstalować (używając twojej odpowiedzi) i zainstalować nową wersję do punktu, w którym nie było już działającego trybu graficznego. Musiałem sformatować komputer i ponownie zainstalować Debiana. Teraz do zupełnie innego zestawu błędów ... Wszystko po to, by zobaczyć „GPU” jako opcję renderowania w Blenderze, a ja wciąż tego nie widzę. Własni kierowcy są do bani!
Rodrigo,

4
To działało dla mnie bez modprobekroku.
Don Kirkby

1
Tak, nie potrzebowałem też modprobekroku.
David Jung

Nie mogę usunąć nvidii-drm, nawet gdy jestem w konsoli tekstowej. Masz pomysł, jak wymusić to usunięcie?
addison

@addison Zauważ, że nie wystarczy być na konsoli tekstowej, musisz zatrzymać X11 lub Waylanda lub cokolwiek, co używa sterownika nvidia z jądra. Chodzi o systemctl isolateto, żeby to zrobić. Ale możliwe, że nie jest poprawnie skonfigurowany w twoim systemie ... Sprawdź, ps -efczy możesz zauważyć, co może być przyczyną używania sterownika, a następnie zatrzymaj ten proces. To powinno pozwolić ci na rozładowanie sterownika.
filbranden

5

lsofwyświetla listę plików używanych przez procesy w przestrzeni użytkownika. Ale nvidia_drmjest modułem jądra, więc lsofniekoniecznie zobaczy, czy jest faktycznie używany. (Plik moduł nie będzie otwarty, ponieważ kernel już całkowicie załadowany go do pamięci RAM. Ale moduł może być dostarczanie usług do przestrzeni użytkownika lub inne składniki jądra, i że to, co uniemożliwia przeładowanie modułu).

Uruchom lsmod | grep nvidia.drmi zobacz cyfry po prawej stronie nvidia_drmnazwy modułu. Pierwsza liczba to po prostu rozmiar modułu; drugi to liczba użycia. Aby pomyślnie usunąć moduł, najpierw musi być 0.

Jeśli serwer X11 działa i korzysta ze nvidiasterownika, nvidia_drmmoduł jądra z pewnością będzie w użyciu. Musisz przynajmniej przełączyć się na konsolę tekstową i zamknąć serwer X11. Zwykle można to zrobić, zatrzymując dowolną usługę X Display Manager, z której korzystasz (zależy od używanego środowiska pulpitu).

Jak napisano w komunikacie o błędzie, jeśli działasz nvidia-persistenced, musisz to również zatrzymać, aby móc zwolnić nvidia_drmmoduł.


Po Ctrl + Alt + F2 lsmodmówi mi, że jest 1 proces nvidia_drm. Tak też zrobiłem sudo /etc/init.d/gdm3 stop, co okpowstrzymałem. Ale nadal 1 proces w lsmod. Teraz wewnątrz GNOME, ps aux | grep nvidiapokazach [irq/129-nvidia]i [nvidia]ale nie nvidia-persistenced. Tutaj również lsmodpokazano 2 procesy wykorzystujące nvidia_drm. Utknąłem.
Rodrigo

3

Miałem podobny problem.

* Powód: pakiet nvidia.drm był w użyciu


Naprawiłem to, usuwając wszystkie pakiety NVIDIA.

Usuń wszystkie poprzednie instalacje NVIDIA za pomocą tych 2 poleceń:


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

Moduł należy usunąć.

Uruchom ponownie i idź dalej.


Dziękuję Ci! Może się to przydać, jeśli będę musiał ponownie sformatować ...
Rodrigo,

2

W komentarzach meldujesz, że zatrzymanie usługi logd systemd zabierze Cię z powrotem do graficznego logowania. Jeśli masz login graficzny, X działa, więc sterownik wideo jest załadowany i używany. To bardzo prawdopodobnie wyjaśnia częściowo, dlaczego używany jest moduł nvidia-drm.

Ponadto zdradzasz pozorne nieporozumienie, kiedy mówisz

Zrestartowałem się i zacząłem w trybie tekstowym (naciskając Ctrl + Alt + F2 przed podaniem nazwy użytkownika / hasła), ale dostałem ten sam błąd.

Naciśnięcie klawiszy Ctrl + Alt + F2 powoduje przejście do wirtualnego terminala # 2, który można skonfigurować do logowania w trybie tekstowym, ale jest to dalekie od „rozpoczynania w trybie tekstowym”. Jeśli miałeś graficzny ekran logowania na domyślnym terminalu wirtualnym, X działa, a przełączenie na inny VT tego nie zmienia. Logujesz się tylko do sesji innej niż X.

Pierwszą i najłatwiejszą próbą jest wyłączenie serwera X. Tradycyjnym sposobem na to byłoby zalogowanie się do sesji w trybie tekstowym i wykonanie polecenia

telinit 3

aby przejść do poziomu 3. To powinno również działać z systemd, ale natywnym sposobem systemd byłoby uruchomienie

systemctl isolate multi-user.target

Oba wymagają oczywiście przywileju, więc będziesz musiał użyć sudolub sprawić , abyś rootował.

Jeśli to nie usunie modułu lub przynajmniej pozwoli ci to zrobić ręcznie, następnym najlepszym rozwiązaniem byłoby uruchomienie systemu bezpośrednio na poziomie 3 (cel dla wielu użytkowników), a może nawet na poziomie 1 (cel ratunkowy). Zwykle robię to, dodając „3” (lub „1”) na końcu listy argumentów jądra w czasie rozruchu za pomocą programu ładującego. Możesz także zmienić domyślny cel rozruchowy zgodnie z opisem w tym artykule .

Należy również pamiętać, że sterownik nVidia jest dostępny w gotowych pakietach dla większości dystrybucji Linuksa. Niewielu włącza te pakiety do swoich własnych standardowych repozytoriów, ponieważ sterownik jest w końcu zastrzeżony, ale na pewno można znaleźć renomowane repozytorium, które go posiada. Zdecydowanie zalecam korzystanie z takich pakietów zamiast bezpośredniego uruchamiania instalatora, ale aby dostać się tam, skąd jesteś, może być konieczne ręczne odinstalowanie sterownika.


Udało mi się go odinstalować (korzystając z odpowiedzi Filipe) i zainstalować nową wersję do punktu, w którym nie było już działającego trybu graficznego. Musiałem sformatować komputer i ponownie zainstalować Debiana. Teraz do zupełnie innego zestawu błędów ... Wszystko po to, by zobaczyć „GPU” jako opcję renderowania w Blenderze, a ja wciąż tego nie widzę. Własni kierowcy są do bani!
Rodrigo

@Rodrigo, przepraszam, że miałeś takie złe doświadczenia. Ale tego rodzaju problem jest przykładem tego, dlaczego zalecam używanie pakietów zamiast ręcznej instalacji.
John Bollinger,

Tak, wolę używać pakietów. Ale gdzieś przeczytałem, że opcja GPU w Blenderze nie została włączona prawdopodobnie z powodu przestarzałego sterownika ...
Rodrigo

2

Instalacja CUDA

1) Pobierz najnowszy zestaw narzędzi CUDA

2) Przełącz na tty3, naciskając Ctl + Alt + F3

3) Przed kontynuowaniem rozładuj nvidia-drm.

3a) Izoluj cel wielu użytkowników

sudo systemctl isolate multi-user.target

3b) Należy pamiętać, że nvidia-drm jest obecnie w użyciu.

lsmod | grep nvidia.drm

3c) Zwolnij NVIDIA-DRM

sudo modprobe -r nvidia-drm

4d) Należy pamiętać, że nvidia-drm nie jest już używana.

lsmod | grep nvidia.drm

5) Przejdź do folderu pobierania i uruchom instalację cuda.

sudo sh cuda_10.1.168_418.67_linux.run

6) Odpowiedz na wszelkie monity podczas instalacji.

7) Po zakończeniu instalacji potwierdź, że wersja CUDA została zaktualizowana.

nvidia-smi

8) Uruchom ponownie GUI.

sudo systemctl start graphical.target

0

Miał ten sam problem z Debian Stretch podczas próby instalacji sterowników Nvidia. W trybie tekstowym moim jedynym rozwiązaniem było usunięcie sterownika, ponowne zainstalowanie gdm i gnome-shell. Wiem, że to niezdarne rozwiązanie, ale pamiętam, że najpierw próbowałem naprawić powłokę gnome i tylko usunąć sterownik Nvidia i ponownie zainstalować GDM. Okazało się, że znacznie łatwiej było po prostu ponownie zainstalować całą powłokę.


Chyba poczekam na mniej nieporadne rozwiązanie, jeśli się pojawi.
Rodrigo

0

Zetknąłem się również z tym samym problemem. Przyczyną błędu było to, że podczas instalacji cuda przypadkowo wybrałem „Zainstaluj sterownik NVIDIA”.

Tak więc podczas instalacji CUDA napotkasz następujące opcje:

Zainstalować przyspieszony sterownik grafiki NVIDIA dla Linux-x86_64 384,81? (y) es / (n) o / (q) uit:

Wybierz q , problem zostanie rozwiązany.


Więc co ty mówisz? Że jedynym rozwiązaniem jest ponowna instalacja? To oczywiście nie jest jedyne rozwiązanie; inne odpowiedzi zostały opublikowane.
Scott

0

to, co zadziałało, to zmiana systemu na bardziej tekstowy

systemctl set-default runlevel3.target

następnie ponownie uruchom i zainstaluj sterownik nvidia cuda po zakończeniu, możesz chcieć zmienić system, aby ponownie uruchomić w trybie graficznym

systemctl set-default runlevel5.target

0

Zatrzymanie systemd-logindnaprawiło to dla mnie:

sudo systemctl stop systemd-logind

Jest to sugerowane jako obejście tego problemu na githubie na stronie gvub nvidia-xrun:

Dobre wieści, winowajcą jest systemd-logind. Obecne obejście polega na uruchomieniu następującego polecenia po wylogowaniu z sesji „nvidia-xrun” sudo systemctl stop systemd-logind

Następnie ręcznie usuniesz pozostałe moduły nvidii i ręcznie wyłączysz DGPU. Oto fragment kodu, który działa po wylogowaniu z sesji „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"

Problem systemowy na Github

Link referencyjny z portalu Nvidia Linux Developers

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.