Bagaimana cara membongkar modul kernel 'nvidia-drm'?

29

Saya mencoba menginstal driver NVIDIA terbaru di Debian Stretch. Saya sudah mengunduh NVIDIA-Linux-x86_64-390.48.rundari sini , tetapi ketika saya mencoba melakukannya

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

seperti yang disarankan, pesan kesalahan muncul.

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.

Ketika saya mencoba mencari tahu siapa yang menggunakan nvidia-drm(atau nvidia_drm), saya tidak melihat apa-apa.

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

Dan ketika saya mencoba untuk menghapusnya, dikatakan sedang digunakan.

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

Saya telah reboot dan mulai dalam mode hanya teks (dengan menekan Ctrl + Alt + F2 sebelum memberikan nama pengguna / kata sandi), tetapi saya mendapatkan kesalahan yang sama.

Selain itu, bagaimana saya "tahu bahwa kernel saya mendukung pembongkaran modul"?

Saya mendapat beberapa peringatan saat boot terkait dengan nvidia, tidak tahu apakah itu terkait,:

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)
Rodrigo
sumber
dapatkah Anda mencoba melakukannya dalam mode penyelamatan?
vfbsilva
Lihat masalah ini di github : systemctl stop systemd-logindsebelum membongkar modul.
GAD3R
@vfbsilva Mode penyelamatan saya aneh, berulang-ulang, mengidentifikasi semua perangkat USB berulang kali. Saya berhasil menekan Enter, memberikan kata sandi root dan mendapatkan prompt, tetapi tidak ada / dev, jadi tidak ada pemasangan disk.
Rodrigo
@ GAD3R Yang saya miliki adalah systemctl stop systemd-logind.service, tetapi ini menutup layar dan membawa saya kembali ke grafik masuk, di mana saya harus melakukan Ctrl + Alt + F2 lagi.
Rodrigo

Jawaban:

28

Saya membayangkan Anda ingin menghentikan manajer tampilan yang saya duga akan menggunakan driver Nvidia.

Setelah mengubah ke konsol teks (menekan Ctrl+ Alt+ F2) dan masuk sebagai root, gunakan perintah berikut untuk menonaktifkan target grafis, yang membuat manajer tampilan tetap berjalan:

# systemctl isolate multi-user.target

Pada titik ini, saya berharap Anda dapat membongkar driver Nvidia menggunakan modprobe -r(atau rmmodlangsung):

# modprobe -r nvidia-drm

Setelah Anda berhasil mengganti / meningkatkannya dan Anda siap untuk memulai kembali lingkungan grafis, Anda dapat menggunakan perintah ini:

# systemctl start graphical.target
filbranden
sumber
Saya berhasil menghapusnya (menggunakan jawaban Anda), dan menginstal versi baru ke titik di mana tidak ada lagi mode grafis yang berfungsi. Saya harus memformat PC dan menginstal ulang Debian. Sekarang untuk serangkaian bug yang sama sekali berbeda ... Semua ini hanya untuk melihat "GPU" sebagai opsi rendering di Blender, dan saya masih belum melihatnya. Pengemudi proprietary menyebalkan!
Rodrigo
4
Ini berhasil bagi saya tanpa modprobelangkah.
Don Kirkby
1
Ya, saya juga tidak perlu modprobelangkah.
David Jung
Saya tidak dapat menghapus nvidia-drm bahkan ketika di konsol teks. Adakah yang bisa saya hapus secara paksa?
addison
@addison Perhatikan bahwa tidak cukup hanya dengan berada di konsol teks, Anda harus menghentikan X11 atau Wayland atau apa pun yang menggunakan driver nvidia dari kernel. Tujuan dari systemctl isolateperintah ini adalah untuk melakukan itu. Tetapi mungkin saja itu tidak dikonfigurasikan dengan benar di sistem Anda ... Periksa ps -efdan lihat apakah Anda dapat mengetahui apa yang mungkin menggunakan driver, kemudian minta proses itu dihentikan. Itu akan memungkinkan Anda untuk menurunkan driver.
filbranden
5

lsofdaftar semua file yang digunakan oleh proses userspace. Tetapi nvidia_drmmerupakan modul kernel, jadi lsoftidak perlu melihat apakah itu benar-benar sedang digunakan atau tidak. (File modul tidak akan terbuka karena kernel telah sepenuhnya memuatnya ke dalam RAM. Tetapi modul tersebut mungkin menyediakan layanan ke userspace atau komponen kernel lainnya, dan itulah yang mencegah pembongkaran modul.)

Jalankan lsmod | grep nvidia.drmdan lihat angka-angka di sebelah kanan nvidia_drmnama modul. Angka pertama hanyalah ukuran modul; yang kedua adalah hitungan penggunaan. Agar berhasil menghapus modul, jumlah penggunaan harus 0 pertama.

Jika server X11 berjalan dan menggunakan nvidiadriver, maka nvidia_drmmodul kernel pasti akan digunakan. Jadi Anda harus, paling tidak, beralih ke konsol teks dan mematikan server X11. Biasanya ini dapat dilakukan dengan menghentikan layanan X Display Manager mana pun yang Anda gunakan (tergantung pada lingkungan desktop yang Anda gunakan).

Seperti yang dikatakan pesan kesalahan, jika Anda menjalankan nvidia-persistenced, Anda harus menghentikannya juga sebelum Anda dapat membongkar nvidia_drmmodul.

telcoM
sumber
Setelah Ctrl + Alt + F2, lsmodmemberitahu saya ada 1 proses menggunakan nvidia_drm. Jadi saya lakukan sudo /etc/init.d/gdm3 stop, yang okmenghentikannya. Tapi masih 1 proses di lsmod. Sekarang di dalam Gnome, ps aux | grep nvidiapertunjukkan [irq/129-nvidia]dan [nvidia]tetapi tidak nvidia-persistenced. Juga, di sini lsmodmenunjukkan 2 proses menggunakan nvidia_drm. Aku terjebak.
Rodrigo
3

Saya punya masalah serupa.

* Alasan: paket nvidia.drm sedang digunakan


Saya memperbaikinya dengan membersihkan semua paket NVIDIA.

Hapus semua instalasi NVIDIA sebelumnya dengan 2 perintah ini:


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

Modul harus dihapus.

Nyalakan kembali dan lanjutkan.

Kelly
sumber
Terima kasih! Ini mungkin berguna jika saya perlu memformatnya lagi ...
Rodrigo
2

Anda melaporkan dalam komentar yang menghentikan layanan systemd-logind membawa Anda kembali ke login grafis . Jika Anda memiliki login grafis maka X sedang berjalan, jadi driver video dimuat dan digunakan. Ini sangat mungkin menjelaskan sebagian mengapa modul nvidia-drm digunakan.

Selain itu, Anda mengkhianati kesalahpahaman saat Anda mengatakannya

Saya telah reboot dan mulai dalam mode hanya teks (dengan menekan Ctrl + Alt + F2 sebelum memberikan nama pengguna / kata sandi), tetapi saya mendapatkan kesalahan yang sama.

Menekan Ctrl + Alt + F2 beralih ke terminal virtual # 2, yang mungkin dapat dikonfigurasi untuk login mode teks, tapi itu jauh dari "memulai mode teks". Jika Anda memiliki layar login grafis pada terminal virtual default maka X sedang berjalan, dan beralih ke VT yang berbeda tidak mengubahnya. Anda hanya masuk ke sesi non-X.

Hal pertama dan termudah untuk dicoba adalah benar-benar mematikan X server. Cara old-school untuk melakukan ini adalah dengan masuk ke sesi mode teks Anda dan menjalankan perintah

telinit 3

untuk beralih ke runlevel 3. Itu harus bekerja dengan systemd, juga, tetapi cara systemd asli akan lebih baik dijalankan

systemctl isolate multi-user.target

Keduanya membutuhkan hak istimewa, jadi Anda harus menggunakan sudoatau menjadikan diri Anda root.

Jika itu tidak menghapus modul, atau setidaknya memungkinkan Anda melakukannya secara manual, maka taruhan terbaik Anda berikutnya adalah mem-boot sistem langsung ke runlevel 3 (target multi-pengguna), atau mungkin bahkan ke runlevel 1 (target penyelamatan). Saya biasanya melakukan ini dengan menambahkan "3" (atau "1") ke akhir daftar argumen kernel pada saat boot melalui bootloader. Anda juga dapat mengubah target boot default seperti yang dijelaskan dalam artikel ini .

Perhatikan juga bahwa driver nVidia tersedia dalam paket pre-built untuk sebagian besar distro Linux. Hanya sedikit yang menyertakan paket-paket itu dalam repo standar mereka sendiri karena pengemudi, bagaimanapun, adalah hak milik, tetapi Anda pasti dapat menemukan repo pihak ke-3 terkemuka yang memilikinya. Saya sangat merekomendasikan menggunakan paket-paket seperti itu daripada menjalankan installer secara langsung, tetapi untuk sampai di sana dari tempat Anda sekarang, Anda mungkin perlu terlebih dahulu menghapus instalan driver.

John Bollinger
sumber
Saya berhasil menghapusnya (menggunakan jawaban Filipe), dan menginstal versi baru ke titik di mana tidak ada lagi mode grafis yang berfungsi. Saya harus memformat PC dan menginstal ulang Debian. Sekarang untuk serangkaian bug yang sama sekali berbeda ... Semua ini hanya untuk melihat "GPU" sebagai opsi rendering di Blender, dan saya masih belum melihatnya. Pengemudi proprietary menyebalkan!
Rodrigo
@ Rodrigo, saya minta maaf Anda memiliki pengalaman yang buruk. Tapi masalah semacam itu adalah contoh mengapa saya merekomendasikan menggunakan paket daripada melakukan instalasi manual.
John Bollinger
Ya, saya lebih suka menggunakan paket. Tapi saya pernah membaca bahwa opsi GPU di Blender tidak diaktifkan mungkin karena driver yang ketinggalan jaman ...
Rodrigo
2

Instalasi CUDA

1) Unduh CUDA Toolkit terbaru

2) Beralih ke tty3 dengan menekan Ctl + Alt + F3

3) Bongkar nvidia-drm sebelum melanjutkan.

3a) Isolate multi-user.target

sudo systemctl isolate multi-user.target

3b) Perhatikan bahwa nvidia-drm saat ini sedang digunakan.

lsmod | grep nvidia.drm

3c) Bongkar nvidia-drm

sudo modprobe -r nvidia-drm

4d) Perhatikan bahwa nvidia-drm tidak digunakan lagi.

lsmod | grep nvidia.drm

5) Buka folder unduhan Anda dan jalankan instalasi cuda.

sudo sh cuda_10.1.168_418.67_linux.run

6) Jawab setiap permintaan selama instalasi.

7) Setelah instalasi selesai, konfirmasikan bahwa Versi CUDA telah diperbarui.

nvidia-smi

8) Mulai GUI lagi.

sudo systemctl start graphical.target
Clayton Mork
sumber
0

Punya masalah yang sama dengan Debian Stretch ketika mencoba menginstal driver Nvidia. Ketika di mod teks, satu-satunya solusi saya adalah menghapus driver, instal ulang gdm dan gnome-shell. Saya tahu ini adalah solusi yang canggung, tetapi saya ingat saya pertama kali mencoba memperbaiki gnome-shell dan hanya menghapus driver Nvidia dan menginstal ulang GDM. Ternyata jauh lebih mudah untuk menginstal ulang seluruh shell.

Vlad Skurtolov
sumber
Kira saya akan menunggu solusi yang kurang canggung, jika ada yang muncul.
Rodrigo
0

Saya juga mengalami masalah yang sama. Alasan untuk kesalahan adalah bahwa saya tidak sengaja memilih "Instal driver nvidia" selama instalasi cuda.

Jadi, selama instalasi CUDA, ketika Anda menemukan opsi berikut:

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

Silakan pilih q , masalah akan terpecahkan.

JNing
sumber
Jadi apa yang kamu katakan? Bahwa satu-satunya solusi adalah menginstal ulang? Itu jelas bukan satu-satunya solusi; jawaban lain telah diposting.
Scott
0

apa yang berhasil bagi saya adalah mengubah sistem untuk memulai lebih banyak teks

systemctl set-default runlevel3.target

kemudian restart dan instal driver nvidia cuda setelah selesai Anda mungkin ingin mengubah sistem untuk memulai dalam mode grafis lagi

systemctl set-default runlevel5.target
Joaquim Muchaxo
sumber
0

Menghentikan systemd-logindmemperbaikinya untuk saya:

sudo systemctl stop systemd-logind

Ini disarankan sebagai solusi dalam masalah github ini pada halaman github nvidia-xrun:

Berita baik kawan, systemd-logind adalah biang keladinya di sini. Solusi saat ini adalah menjalankan perintah berikut setelah keluar dari sesi "nvidia-xrun" sudo systemctl stop systemd-logind

Kemudian, Anda harus menghapus modul nvidia lainnya secara manual dan mematikan DGPU secara manual. Berikut cuplikan kode yang berjalan setelah Anda keluar dari sesi "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"

Masalah systemd pada Github

Tautan referensi dari portal Nvidia Linux Developers

alexdemartos
sumber