Как выгрузить модуль ядра nvidia-drm?

В системе GNU изучите аргумент - разделитель для xargs . Поскольку ваш ввод разделен символами новой строки, вам не нужно вообще полагаться на цитирование или использовать какие-либо дополнительные инструменты:

cat files.txt | xargs --delimiter=\\n printf "<%s>"

Где files.txt содержит ваш ввод:

line number 1
line number 2
line number 3

Дает результат:

<line number 1><line number 2><line number 3>

NB: вам не нужно сохранять введенные вами данные в файл и использовать cat ; Вы, конечно, можете передавать данные напрямую из другой программы. Я использовал cat в своем примере из-за его повсеместного распространения и полезности для создания таких автономных примеров, как этот.

Еще лучше (и рекомендуется в руководстве xargs ), чтобы ваша программа вывода разделяла записи NUL ( \ 0 ) вместо новой строки и использовала - параметр null вместо - разделитель , но до тех пор, пока ваши входные строки никогда не будут содержать символы новой строки, вы в порядке с вышеуказанным подходом.

30
14.12.2018, 19:43
11 ответов

Я полагаю, вы хотите остановить диспетчер отображения, который, как я подозреваю, будет использовать драйверы Nvidia.

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

# systemctl isolate multi-user.target

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

# modprobe -r nvidia-drm

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

# systemctl start graphical.target
70
27.01.2020, 19:38

lsofперечисляет все файлы, которые используются процессами пользовательского пространства. Но nvidia_drm— это модуль ядра, поэтому lsofне обязательно будет видеть, используется ли он на самом деле. (Файл модуля не будет открыт, так как ядро ​​уже полностью загрузило его в оперативную память. Но модуль может предоставлять услуги пользовательскому пространству или другим компонентам ядра, и это предотвращает выгрузку модуля.)

Запустите lsmod | grep nvidia.drmи посмотрите цифры справа от имени модуля nvidia_drm. Первое число — это просто размер модуля; второй - количество использований. Чтобы успешно удалить модуль, счетчик использования должен быть сначала равен 0.

Если сервер X11 работает и использует драйвер nvidia, то наверняка будет использоваться модуль ядра nvidia_drm. Так что вам нужно, по крайней мере, переключиться на текстовую консоль и выключить сервер X11. Обычно это можно сделать, остановив используемую вами службу X Display Manager (, в зависимости от того, какую среду рабочего стола вы используете ).

Как сказано в сообщении об ошибке, если вы используете nvidia-persistenced, вам также необходимо остановить его, прежде чем вы сможете выгрузить модуль nvidia_drm.

6
27.01.2020, 19:38

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

0
27.01.2020, 19:38

В комментариях вы сообщаете, что остановка службы systemd -logind возвращает вас к графическому логину. Если у вас есть графический вход в систему, то X работает, поэтому видеодрайвер загружен и используется. Вероятно, это частично объясняет, почему используется модуль nvidia -drm.

Кроме того, вы выдаете очевидное заблуждение, когда говорите

I have rebooted and started in text-only mode (by pressing Ctrl+Alt+F2 before giving username/password), but I got the same error.

Нажатие Ctrl+Alt+F2 переключает на виртуальный терминал #2, который вполне может быть настроен для входа в текстовый -режим, но это далеко от «запуска в текстовом режиме». Если у вас был графический экран входа в систему на виртуальном терминале по умолчанию, то X работает, и переключение на другой VT не меняет этого. Вы просто входите в не -X сеанс.

Первое и самое простое, что можно сделать, это отключить X-сервер. Старый -школьный способ сделать это — войти в сеанс текстового -режима и выполнить команду

telinit 3

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

systemctl isolate multi-user.target

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

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

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

3
27.01.2020, 19:38

У меня была похожая проблема.

*Reason: nvidia.drm package was in use


Я исправил это, очистив все пакеты NVIDIA.

Удалите все предыдущие установки NVIDIA с помощью этих двух команд:


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

Модуль следует удалить.

Перезагружаемся и вперед.

4
27.01.2020, 19:38

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

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

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? (y)es/(n)o/(q)uit:

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

0
27.01.2020, 19:38

мне помогло изменить систему, чтобы начать в тексте дальше

systemctl set-default runlevel3.target

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

systemctl set-default runlevel5.target
0
27.01.2020, 19:38

Установка CUDA

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

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

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

3a )Изолировать несколько -user.target

sudo systemctl isolate multi-user.target

3b )Обратите внимание, что в настоящее время используется nvidia -drm.

lsmod | grep nvidia.drm

3c )Выгрузить nvidia -дрм

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
13
27.01.2020, 19:38

Я решил эту проблему, отключив графический интерфейс, перезагрузив компьютер, войдя в систему и установив драйвер, включив графический интерфейс и перезагрузив компьютер.

Убедитесь, что вы знаете имя пользователя и пароль!!!

Откройте терминал и напишите

sudo systemctl set-default multi-user.target
sudo reboot 0

Теперь войдите в систему, и вы попадете прямо в терминал, установите драйвер. Обратите внимание, что здесь я устанавливаю 440.44 , поэтому вам нужно изменить версию драйвера .

sudo./NVIDIA-Linux-x86_64-440.44.run

После установки драйвера включите графический интерфейс и выполните перезагрузку:

sudo systemctl set-default graphical.target
sudo reboot 0

Вы должны закончить

В моем случае nvidia -smi сообщила о новой версии 440.44, но в Ubuntu 18.04 Software & Updates Utilities на вкладке «Дополнительные драйверы» отображается 435!! Еще одна загадка NVIDIA, но, черт возьми, мой новый докер работает!!!

4
27.01.2020, 19:38

Принятый ответ filbranden привел меня в правильном направлении, но не совсем сработал для меня (кажется, что по крайней мере nouveauдрайвер всегда был загружен и вызывал проблемы ).

Однако у меня сработало (, как показано здесь более подробно ), была временная загрузка в консольном режиме (текстовом режиме ). Это, казалось, гарантировало, что драйвер nvidiaили nouveauне загружен.

Затем я последовал ответу @filbrandens для остановки/удаления nvidia-drm, а затем установил оттуда драйвер nvidiaи перезагрузил систему. В последнем, возможно, не было необходимости, но, поскольку он работал, я перечислил его здесь.

0
20.08.2020, 12:57

Дополнительный ответ для тех, кто столкнулся с этой проблемой.

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

enter image description here

0
21.08.2021, 13:12

Теги

Похожие вопросы