Як вивантажити модуль ядра 'nvidia-drm'?


29

Я намагаюся встановити найсучасніший драйвер NVIDIA в Debian Stretch. Я скачав NVIDIA-Linux-x86_64-390.48.runз тут , але коли я намагаюся зробити

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

як запропоновано, з’являється повідомлення про помилку.

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.

Коли я намагаюся з’ясувати, хто використовує nvidia-drm(чи nvidia_drm), я нічого не бачу.

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

І коли я намагаюся його зняти, він каже, що він використовується.

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

Я перезавантажив і запустив у текстовому режимі (натискаючи Ctrl + Alt + F2 перед тим, як вказати ім'я користувача / пароль), але я отримав ту ж помилку.

Крім цього, як я "знаю, що моє ядро ​​підтримує розвантаження модуля"?

Я отримую кілька попереджень щодо завантаження, пов’язаних із nvidia, не маю уявлення, чи вони пов'язані, хоча:

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)

ви можете спробувати це зробити в режимі порятунку?
vfbsilva

Дивіться цю проблему на github : systemctl stop systemd-logindперед вивантаженням модулів.
GAD3R

@vfbsilva Мій режим порятунку дивний, він циклічно вічний, ідентифікуючи всі USB-пристрої знову і знову. Мені вдалося натиснути Enter, вказати пароль root і отримати підказку, але немає / dev, тому неможливо встановити диск.
Родріго

@ GAD3R Все, що у мене є systemctl stop systemd-logind.service, але це закриває екран і повертає мене до графічного входу, де мені знову потрібно виконати Ctrl + Alt + F2.
Родріго

Відповіді:


28

Я думаю, ви хочете зупинити диспетчер дисплеїв, який, як я б підозрював, буде використовувати драйвери Nvidia.

Після зміни текстової консолі (натискання Ctrl+ Alt+ F2) та входу в систему як корінь використовуйте таку команду, щоб відключити графічну ціль, саме це і підтримує диспетчер дисплея:

# systemctl isolate multi-user.target

На даний момент я очікую, що ви зможете вивантажити драйвери Nvidia за допомогою modprobe -r(або rmmodбезпосередньо):

# modprobe -r nvidia-drm

Після того, як вам вдалося замінити / оновити і ви готові запустити графічне середовище заново, ви можете використовувати цю команду:

# systemctl start graphical.target

Мені вдалося його видалити (використовуючи вашу відповідь) та встановити нову версію до того моменту, коли більше не працював графічний режим. Мені довелося відформатувати ПК та перевстановити Debian. Тепер зовсім інший набір помилок ... Все це лише для того, щоб бачити "GPU" як варіант візуалізації в Blender, і я все ще не бачу цього. Власні водії смокчуть!
Родріго

4
Це працювало для мене без modprobeкроку.
Дон Кіркбі

1
Так, мені не потрібен був і modprobeкрок.
Девід Юнг

Я не можу видалити nvidia-drm навіть у текстовій консолі. Будь-яка ідея, як я можу примусово її зняти?
Аддісон

@addison Зауважте, що недостатньо просто знаходитись на текстовій консолі, вам потрібно зупинити X11 або Wayland або все, що використовує драйвер nvidia з ядра. Сенс systemctl isolateкоманди - це зробити. Але можливо, це неправильно налаштовано у вашій системі ... Перевірте ps -efі перевірте, чи зможете ви помітити, що може використовувати драйвер, і зупиніть цей процес. Це повинно дозволяти вам розвантажити драйвер.
filbranden

5

lsofперелічує всі файли, які використовуються процесами в просторі користувачів. Але nvidia_drmце модуль ядра, тому lsofне обов’язково буде бачити, чи він насправді використовується. (Файл модуля не буде відкритим, оскільки ядро ​​вже повністю завантажило його в оперативну пам’ять. Але модуль може надавати послуги в користувальницькій області або інших компонентах ядра, і саме це запобігає вивантаженню модуля.)

Запустіть lsmod | grep nvidia.drmі подивіться цифри праворуч від назви nvidia_drmмодуля. Перше число - це просто розмір модуля; друге - кількість використання. Для успішного видалення модуля кількість спочатку має бути 0.

Якщо сервер X11 працює і працює з nvidiaдрайвером, то nvidia_drmнайвірогідніше буде використаний модуль ядра. Тож вам потрібно, як мінімум, перейти на текстову консоль і вимкнути сервер X11. Зазвичай це можна зробити, зупинивши незалежно від того, яку службу X Display Manager ви використовуєте (залежить від того, яке середовище робочого столу ви використовуєте).

Як сказано в повідомленні про помилку, якщо ви працюєте nvidia-persistenced, вам доведеться зупинити це, перш ніж ви зможете вивантажити nvidia_drmмодуль.


Після Ctrl + Alt + F2 lsmodповідомляє мені, що використовується 1 процес nvidia_drm. Так я і зробив sudo /etc/init.d/gdm3 stop, що пішовok зупинився на цьому. Але все-таки 1 процес в lsmod. Тепер в Gnome, ps aux | grep nvidiaшоу [irq/129-nvidia]і , [nvidia]але немає nvidia-persistenced. Також тут lsmodпоказано 2 процеси з використанням nvidia_drm. Я застряг.
Родріго

3

У мене була схожа проблема.

* Причина: використовувався пакет nvidia.drm


Я виправив це, очистивши всі пакети NVIDIA.

Видаліть усі попередні установки NVIDIA за допомогою цих 2 команд:


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

Модуль слід зняти.

Перезавантажте і продовжуйте роботу.


Дякую! Це може стати в нагоді, якщо мені потрібно буде відформатувати його знову ...
Родріго,

2

У коментарях ви повідомляєте, що зупинення служби systemd-logind повертає вас до графічного входу. Якщо у вас є графічний логін, тоді працює X, тож драйвер відео завантажується та використовується. Це, ймовірно, частково пояснює, чому використовується модуль nvidia-drm.

Крім того, ви зраджуєте очевидну помилку, коли говорите

Я перезавантажив і запустив у текстовому режимі (натискаючи Ctrl + Alt + F2 перед тим, як вказати ім’я користувача / пароль), але я отримав ту ж помилку.

Натискання клавіш Ctrl + Alt + F2 переходить на віртуальний термінал №2, який цілком може бути налаштований для входу в текстовий режим, але це далеко не "запуск у текстовому режимі". Якщо на віртуальному терміналі за замовчуванням у вас був графічний екран входу, тоді працює X, і перемикання на інший VT цього не змінює. Ви просто входите в сеанс, який не стосується X

Перше і найпростіше спробувати - це фактично вимкнути X-сервер. Старий спосіб зробити це було б увійти у свій сеанс текстового режиму та виконати команду

telinit 3

щоб переключитися на runlevel 3. Це теж повинно працювати з systemd, але власним системним способом було б замість цього запустити

systemctl isolate multi-user.target

Звичайно, для обох потрібні пільги, тому вам потрібно буде скористатися sudo або зробити собі корінь.

Якщо це не видаляє модуль або, принаймні, робить це можливим для вас вручну, то наступною вашою найкращою ставкою буде завантаження системи безпосередньо в рівень 3 (багатокористувацька ціль) або, можливо, навіть в рівень запуску 1 (рятувальна мета). Зазвичай я це роблю, додаючи "3" (або "1") до кінця списку аргументів ядра під час завантаження через завантажувач. Ви також можете змінити ціль завантаження за замовчуванням, як описано в цій статті .

Також зауважте, що драйвер nVidia доступний у попередньо створених пакетах для більшості дистрибутивів Linux. Мало хто включає ці пакети у свої власні стандартні репозитори, оскільки водій, врешті-решт, є власником, але ви, безумовно, можете знайти авторитетне репо-сторона, яка має його. Я настійно рекомендую використовувати такі пакети, а не запускати інсталятор безпосередньо, але щоб дістатися туди, де ви зараз перебуваєте, можливо, вам потрібно буде спочатку видалити драйвер вручну.


Мені вдалося його видалити (використовуючи відповідь Філіпа) та встановити нову версію до того стану, коли більше не працював графічний режим. Мені довелося відформатувати ПК та перевстановити Debian. Тепер зовсім інший набір помилок ... Все це лише для того, щоб бачити "GPU" як варіант візуалізації в Blender, і я все ще не бачу цього. Власні водії смокчуть!
Родріго

@Rodrigo, вибачте, у вас був такий поганий досвід. Але така проблема є прикладом того, чому я рекомендую використовувати пакети замість того, щоб виконувати встановлення вручну.
Джон Боллінгер

Так, я вважаю за краще використовувати пакети. Але я десь читав, що опція GPU у Blender не була включена, ймовірно, через застарілий драйвер ...
Родріго

2

Встановлення CUDA

1) Завантажте найновіший інструментарій CUDA

2) Переключитися на tty3, натиснувши Ctl + Alt + F3

3) Перед початком роботи вивантажте nvidia-drm.

3а) Виділіть багатокористувацьку ціль

sudo systemctl isolate multi-user.target

3b) Зауважте, що зараз використовується nvidia-drm.

lsmod | grep nvidia.drm

3c) Вивантажте nvidia-drm

sudo modprobe -r nvidia-drm

4d) Зауважте, що nvidia-drm вже не використовується.

lsmod | grep nvidia.drm

5) Перейдіть у папку для завантаження та запустіть установку cuda.

sudo sh cuda_10.1.168_418.67_linux.run

6) Відповідайте на будь-які підказки під час встановлення.

7) Після завершення встановлення переконайтесь, що версія CUDA була оновлена.

nvidia-smi

8) Запустіть GUI заново.

sudo systemctl start graphical.target

0

Була така ж проблема з Debian Stretch при спробі встановлення драйверів Nvidia. Коли в текстовому моді моїм єдиним рішенням було видалити драйвер, перевстановити gdm та gnome-shell. Я знаю, що це незграбне рішення, але я пам’ятаю, що спершу спробував виправити оболонку гнома та лише видалити драйвер Nvidia та перевстановити GDM. Виявилося, було набагато простіше просто встановити всю оболонку.


Гадаю, я зачекаю менш незграбного рішення, якщо воно з’явиться.
Родріго

0

Я також зіткнувся з тією ж проблемою. Причиною помилки було те, що я випадково вибрав "Встановити драйвер nvidia" під час встановлення cuda.

Отже, під час встановлення CUDA ви стикаєтесь з наступними параметрами:

Встановити NVIDIA-графічний драйвер для Linux-x86_64 384.81? (у) es / (n) o / (q) uit:

Виберіть q , проблема буде вирішена.


Отже, що ти кажеш? Що єдине рішення - перевстановити? Це, очевидно, не єдине рішення; інші відповіді були розміщені.
Скотт

0

для мене працювало те, щоб змінити систему, щоб почати в тексті більше

systemctl set-default runlevel3.target

потім перезапустіть і встановіть драйвер nvidia cuda після завершення, можливо, ви захочете знову змінити систему, щоб запустити в графічному режимі

systemctl set-default runlevel5.target

0

Перестала systemd-logindвиправити це для мене:

sudo systemctl stop systemd-logind

Це пропонується як вирішення цього випуску про github на сторінці gvidub nvidia-xrun:

Гарні новини, хлопці, винуватцем тут є systemd-logind. Поточне вирішення полягає у виконанні наступної команди після виходу з сеансу "nvidia-xrun". Sudo systemctl stop systemd-logind

Потім ви вручну видалите інші модулі nvidia та вимкніть DGPU вручну. Ось фрагмент коду, який запускається після виходу з сеансу "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"

Системний випуск на Github

Посилання на портал розробників Nvidia Linux

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.