升级到 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
2
nvidia-dkms-560 configuration failed
# 大致差不多长这样,其实就是提示你有两个组件构建失败

不过在构建失败后,也给出了一个日志文件让我们去查看,日志目录是 /var/lib/dkms/nvidia/<版本号>/build/make.log,我们用 vim 进行查看

1
2
cc: unrecognized command line option '-ftrivial-auto-var-init=zero'
# 大致是这么个意思

然后又检查一下 cc -v 版本信息,发现是 11.4.0,而 nvidia-driver-560-open 是用 gcc-13 构建的

所以问题很明晰了,nvidia-driver-560-opengcc-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


  1. https://answers.launchpad.net/ubuntu/+question/820141 ↩︎