Как выгрузить модуль ядра '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) и входа в систему как root, используйте следующую команду, чтобы отключить графическую цель, которая поддерживает работу диспетчера отображения:

# systemctl isolate multi-user.target

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

# modprobe -r nvidia-drm

После того, как вам удалось заменить / обновить его и вы готовы снова запустить графическое окружение, вы можете использовать эту команду:

# systemctl start graphical.target
filbranden
источник
Мне удалось удалить его (используя ваш ответ), и установить новую версию в точку, где больше не было рабочего графического режима. Мне пришлось отформатировать ПК и переустановить 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

переключиться на уровень выполнения 3. Это должно работать и с systemd, но вместо этого можно использовать собственный системный способ

systemctl isolate multi-user.target

Конечно, оба требуют привилегий, поэтому вам нужно использовать sudoили делать себя root.

Если это не удалит модуль или, по крайней мере, не позволит вам сделать это вручную, тогда вашей следующей лучшей ставкой будет загрузка системы непосредственно на уровень запуска 3 (многопользовательская цель) или, возможно, даже на уровень запуска 1 (спасательная цель). Я обычно делаю это, добавляя «3» (или «1») в конец списка аргументов ядра во время загрузки через загрузчик. Вы также можете изменить цель загрузки по умолчанию, как описано в этой статье .

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

Джон Боллинджер
источник
Мне удалось удалить его (используя ответ Филипе), и установить новую версию в точку, где больше не было рабочего графического режима. Мне пришлось отформатировать ПК и переустановить Debian. Теперь к совершенно другому набору ошибок ... Все это только для того, чтобы увидеть «GPU» как опцию рендеринга в Blender, а я до сих пор этого не вижу. Фирменные драйверы отстой!
Родриго
@ Родриго, извини, у тебя такой плохой опыт. Но проблема такого рода является примером того, почему я рекомендую использовать пакеты вместо выполнения ручной установки.
Джон Боллинджер
Да, я предпочитаю использовать пакеты. Но я где-то читал, что опция графического процессора в Blender не была активирована, вероятно, из-за устаревшего драйвера ...
Родриго
2

Установка CUDA

1) Загрузите последнюю версию CUDA Toolkit

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

3) Перед продолжением выгрузите nvidia-drm.

3a) Изолировать multi-user.target

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) Запустите графический интерфейс снова.

sudo systemctl start graphical.target
Клейтон Морк
источник
0

Была такая же проблема с Debian Stretch при попытке установить драйверы Nvidia. Когда в текстовом моде единственным решением было удалить драйвер, переустановить gdm и gnome-shell. Я знаю, что это неуклюжее решение, но я помню, что сначала попытался исправить оболочку gnome и удалить только драйвер Nvidia и переустановить GDM. Оказалось, что было намного проще просто переустановить всю оболочку.

Влад Скуртолов
источник
Думаю, я подожду менее неуклюжего решения, если оно появится.
Родриго
0

Я также столкнулся с той же проблемой. Причиной ошибки было то, что я случайно выбрал «Install nvidia driver» во время установки cuda.

Итак, при установке CUDA, когда вы сталкиваетесь со следующими опциями:

Установить драйвер ускоренной графики NVIDIA для Linux-x86_64 384,81? (У) ы / (п) о / (д) ПИФ:

Пожалуйста, выберите q , проблема будет решена.

JNing
источник
Так что вы говорите? Что единственным выходом является переустановка? Это, очевидно, не единственное решение; другие ответы были опубликованы.
Скотт
0

у меня получилось поменять систему, чтобы начать больше текста

systemctl set-default runlevel3.target

затем перезапустите и установите драйвер nvidia cuda, как только вы закончите, вы можете изменить систему для запуска в графическом режиме

systemctl set-default runlevel5.target
Хоаким Мухаксо
источник
0

Остановка systemd-logindисправила это для меня:

sudo systemctl stop systemd-logind

Это предлагается в качестве обходного пути в этом выпуске github на странице nvidia-xrun github:

Хорошие новости, парни, виноват 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

alexdemartos
источник