升级到 Linux Kernel 6.11.0-21.21
事情的原委很简单,Update Manager 疯狂地提醒我该升级 Kernel 了,正巧想玩玩 CUDA 升级一下 nvcc
,于是想顺便升级一下 nvidia-driver
.
但是很快就初见端倪,升级 Kernel 提示
1 | installed linux-image-6.11.0-21-generic package post-installation script subprocess returned error exit status 11 |
啊?报错了?又往前翻了翻,发现
1 | nvidia-fs/2.22.3 autoinstall failed due to missing dependencies: nvidia |
OK 破案了,原来又是英伟达驱动搞的鬼,那么先处理 nvidia-drvier 吧[1]
nvidia-driver-560
我现在已经在用 nvidia-driver-550 了,但是为什么会报错缺少 nvidia 呢?这里没有多想,就顺着上面的帖子,重装驱动了。
我是直接在 Driver Manager 里的 GUI 操作,但是报错安装失败。
man! 怎么个事?重启一下系统,虽然可以开机,但是默认切换到 Intel 核显了,并且 nvidia-smi
也提示无法链接 GPU.
值得一提的是,系统居然是 6.11 内核的……我还以为没安装成功呢 hhhh
那看来只能进 recovery-mode
了
Recovery Mode
进入 Recovery Mode 后,尝试用命令行删除驱动,再重新安装驱动。先移动到 network
打开网络,然后移动到 root
回车进入命令行。先删除所有英伟达的驱动
1 | apt purge ~nnvidia |
删除倒是挺简单的,然后安装驱动,我直接选择了 nvidia-driver-560-open
(这个版本是英伟达官方推荐 Ubuntu 24.04 系统使用的驱动版本,而我使用的 Linux Mint 也是基于 Ubuntu 24.04 制作的)
1 | apt install nvidia-driver-560-open |
回车等待结果,然而,在 Building for Linux-kernel-6.11.0-21.21-generic
的时候,却出现了报错
1 | nvidia-dkms-560 configuration failed |
不过在构建失败后,也给出了一个日志文件让我们去查看,日志目录是 /var/lib/dkms/nvidia/<版本号>/build/make.log
,我们用 vim
进行查看
1 | cc: unrecognized command line option '-ftrivial-auto-var-init=zero' |
然后又检查一下 cc -v
版本信息,发现是 11.4.0
,而 nvidia-driver-560-open
是用 gcc-13
构建的
所以问题很明晰了,nvidia-driver-560-open
用 gcc-13
进行构建,但是由于编译时,可执行文件用的是 cc
,而在我的机器上,我的 cc
版本为 gcc-11
,所以不支持这个命令行参数(即 ftrivial-auto-var-init=zero
),因此构建失败,也导致了后续一系列的问题。
好消息是,我本机已经安装过 gcc-13
,因此,我先删除了 gcc-11, g++-11, gcc-11-base
等包,然后用 symlink 将 cc
直接映射为 gcc-13
1 | ln -s /usr/bin/gcc-13 /usr/bin/cc |
再次安装 nvidia-driver-560-open
,成功!安装 Linux Kernel 6.11,也是成功!
还好没有心急让电脑 remake TAT