Debian 12安装NVIDIA显卡驱动后更新内核无法进入系统

问题概述

本人在安装完Debian 12(Stable) + KDE桌面之后,从NVIDIA官网下载了最新的显卡驱动,并且在禁用了nouveau之后进行显卡驱动的安装(下面我按照回忆给出了我的NVIDIA显卡驱动安装过程)。安装完后一切正常。然而,在近日使用sudo apt update && sudo apt upgrade自动将内核升级至6.1.0-12之后,却卡在如下图所示无法进入系统了。请问大神们,这是由于我安装NVIDIA显卡驱动时哪个步骤出现疏忽的导致的吗?

设备信息:\

CPU: AMD 7600X\

GPU: NVIDIA RTX 4070

本人的NVIDIA显卡驱动的安装过程

  1. 从NVIDIA官网下载显卡驱动

  2. 禁用Nouveau\

创建/etc/modprobe.d/blacklist-nouveau.conf文件,在其中加入以下内容:


blacklist nouveau

options nouveau modeset=0

# 补充:

# KDE默认使用SDDM,但在这里发现使用SDDM将Nouveau禁用后也会导致无法进入系统,因此在此之前将SDDM换成了GDM3,并在显卡驱动安装完成后再次换回SDDM

# sudo apt install gdm3

# sudo dpkg-reconfigure gdm3

  1. 更新设置并重启

sudo update-initramfs -u

sudo reboot

  1. 进入命令行并进行前序准备

sudo telinit 3

# 登录

sudo apt install gcc g++ linux-headers-6.1.0-11-amd64

sudo service gdm3 stop

  1. 安装NVIDIA显卡驱动

sudo chmod u+x NVIDIA-Linux-x86_64-535.98.run

sudo bash ./NVIDIA-Linux-x86_64-535.98.run # 由于之前发现加了-no-opengl-files之后KDE桌面的过渡动画全都消失了,而且使用浏览器播放视频会出现严重的掉帧,因此本次安装时没有加

# NVIDIA驱动安装选项:

# 32位库选NO

# 添加到X选YES

sudo service gdm3 start

不建议从官网下载安装包,更建议使用软件源里面自带的驱动,源里面自带的驱动与源里面配置的内核是兼容的。

我重装了Debian,并从软件源里安装显卡驱动,却发现启动时通过GRUB切换到上一个版本的内核后依然会导致上述情况,请问这又是什么原因导致的呢?还是说安装的显卡驱动仅支持当前及以后更新的内核?

你难道没有意识到你安装驱动的前置准备就是下载对应版本的linux-headers ?

实际安装Nvidia驱动就是针对你的内核进行特定的编译吧,后来你升级了,内核版本变了,自然就不能用了。

再按之前的操作重新安装一次Nvidia驱动看看?

这样的话,apt upgrade导致的每一次的内核升级,原本只需要 下载和替换 内核,变成了 下载+编译+替换 内核?

不了解 N 卡驱动,不过关于 linux-headers 这个包,正确做法应该是安装 linux-headers-amd64 ,这个元包会正确指向最新的 linux-hdeaders-* 。类似的,正确引用最新的内核镜像的包也是 linux-image-amd64 而不是特定版本。

这一机制叫做 Dynamic Kernel Module System (aka DKMS),安装不包含在内核源码树的内核模块后,如果正确配置这一系统,每次更新内核版本时 DKMS 会自动编译并集成外的内核模块。DKMS 会自动编译并集成预先配置的外部内核模块。当然,编译并不总是成功的,这取决于内核变动,所以每次升级内核版本时应该特别注意 dkms 输出。

翻了一下 debian 12 的包,看上去有一个 non-free 的 nvidia-driver,版本 525.125.06-1~deb12u1。也许你应该先尝试一下这个。不过天知道你运行的那个安装脚本做了什么,我不确定如何才能清理掉上次安装留下的文件…

https://wiki.debian.org/NvidiaGraphicsDrivers#Debian_12_.22Bookworm.22

新手怎么确认安装哪些东西时会涉及到DKMS?
(我的意思是,比如在安装nvidia-driver前,就要提前知道会涉及dkms,需要额外注意一些)

我不觉得会有什么通用的解决方案,但是看文档总是有用的。

另外,一般需要 DKMS 的都是涉及到内核模块的软件,比如 CDEmu(https://cdemu.sourceforge.io/ ),显卡的私有驱动,或者是还没有进入内核的软件(比如之前的 WireGuard),这也许可以作为一个参考方向。我想对于新手而言,可能遇到的基本都是显卡驱动网卡驱动指纹驱动一类。

(值得注意的是,内核模块和硬件的固件是两个东西,前者用于扩展 linux 内核的能力,后者是加载到硬件里面的给硬件用的二进制文件,我想可能会有新手把这两个混淆在一起。只有内核模块才需要 DKMS。)


至于这个话题中提到的NVIDIA 显卡驱动,Wiki 里明确提到了需要 DKMS:

https://wiki.debian.org/NvidiaGraphicsDrivers

DKMS will build the nvidia module for your system, via the nvidia-kernel-dkms package.

(需要注意这个 Wiki 的中文版本年久失修,已经不具有参考价值了。)

不过我没有 N 卡,所以具体英伟达的驱动包怎么个安装步骤,需要什么,我也就不了解了。


其实 nvidia-driver 软件包的信息中也有写:

$ apt info nvidia-driver
Package: nvidia-driver
Version: 525.125.06-1~deb12u1
Priority: optional
Section: non-free/x11
Source: nvidia-graphics-drivers
Maintainer: Debian NVIDIA Maintainers pkg-nvidia-devel@lists.alioth.debian.org
Installed-Size: 1,406 kB
Provides: nvidia-driver-any, nvidia-glx-any
Pre-Depends: nvidia-installer-cleanup, nvidia-legacy-check (>= 495)
Depends: nvidia-driver-libs (= 525.125.06-1~deb12u1), nvidia-driver-bin (= 525.125.06-1~deb12u1), xserver-xorg-video-nvidia (= 525.125.06-1~deb12u1), nvidia-vdpau-driver (= 525.125.06-1~deb12u1), nvidia-alternative (= 525.125.06-1~deb12u1), nvidia-kernel-dkms (= 525.125.06-1~deb12u1) | nvidia-kernel-525.125.06 | nvidia-open-kernel-525.125.06 | nvidia-open-kernel-525.125.06, nvidia-support
Recommends: nvidia-settings (>= 525), libnvidia-cfg1 (= 525.125.06-1~deb12u1), nvidia-persistenced
Suggests: nvidia-kernel-dkms (>= 525.125.06) | nvidia-kernel-source (>= 525.125.06) | nvidia-open-kernel-source (>= 525.125.06) | nvidia-open-kernel-source (>= 525.125.06)
Homepage: https://www.nvidia.com
Download-Size: 498 kB
Description: NVIDIA metapackage
This metapackage depends on the NVIDIA binary driver and libraries
that provide optimized hardware acceleration of
OpenGL/GLX/EGL/GLES/Vulkan applications via a direct-rendering X Server.
.
Please see the nvidia-kernel-dkms (nvidia-open-kernel-dkms)
or nvidia-kernel-source (nvidia-open-kernel-source) packages
for building the kernel module required by this package.
This will provide nvidia-kernel-525.125.06
(nvidia-open-kernel-525.125.06).
.
This version only supports GeForce, NVS, Quadro, RTX, Tesla, … GPUs based on
the Maxwell, Pascal, Volta, Turing, Ampere or newer architectures.
Look at the legacy driver or Tesla driver packages for older cards.
.
See /usr/share/doc/nvidia-driver/README.txt.gz
for a complete list of supported GPUs and PCI IDs.
.
Building the kernel module has been tested up to Linux 6.4.

nvidia-driver 的依赖中包含 nvidia-kernel-dkms

$ apt info nvidia-kernel-dkms
Package: nvidia-kernel-dkms
Version: 525.125.06-1~deb12u1
Priority: optional
Section: non-free/kernel
Source: nvidia-graphics-drivers
Maintainer: Debian NVIDIA Maintainers pkg-nvidia-devel@lists.alioth.debian.org
Installed-Size: 72.5 MB
Provides: nvidia-kernel-525.125.06, nvidia-kernel-dkms-any (= 525.125.06)
Pre-Depends: nvidia-installer-cleanup
Depends: firmware-nvidia-gsp (= 525.125.06) | firmware-nvidia-gsp-525.125.06, nvidia-kernel-support–v1, dkms (>= 3.0.3-4~)
Recommends: nvidia-driver (>= 525.125.06) | libcuda1 (>= 525.125.06)
Homepage: https://www.nvidia.com
Download-Size: 44.2 MB
Description: NVIDIA binary kernel module DKMS source
This package builds the NVIDIA binary kernel modules needed by
nvidia-driver, using DKMS.

Provided that you have the kernel header packages installed, the kernel
module will be built for your running kernel and automatically rebuilt for
any new kernel headers that are installed.
.
The NVIDIA binary driver provides optimized hardware acceleration of
OpenGL/GLX/EGL/GLES applications via a direct-rendering X Server
for graphics cards using NVIDIA chip sets.
.
This version only supports GeForce, NVS, Quadro, RTX, Tesla, … GPUs based on
the Maxwell, Pascal, Volta, Turing, Ampere or newer architectures.
Look at the legacy driver or Tesla driver packages for older cards.
.
See /usr/share/doc/nvidia-kernel-dkms/README.txt.gz
for a complete list of supported GPUs and PCI IDs.
.
Building the kernel modules has been tested up to Linux 6.4.
.
Note: The new ‘non-free-firmware’ archive area has to be enabled in apt’s
sources.list(.d/) in order to install firmware-nvidia-gsp.

新手阅读文档有时候会出一些问题,这个问题感觉用概率的方法来处理更合适一些,就像你提到的,新手通常是因为驱动问题会遇到。

铜豌豆 Linux -- 使用技巧 -- 技术用户 ,供参考

可能是wayland的原因?我刚开始跟你一样,装了显卡驱动后就进不去系统,apt和官方安装包安装都是这样,切换X11就好了