Ubuntu 22.04安装NVIDIA驱动报错"Building kernel modules"的终极解决方案

当你兴奋地在新装的Ubuntu 22.04系统上准备安装NVIDIA显卡驱动,特别是为RTX 4090这样的新显卡配置深度学习环境时,突然在终端看到那个令人沮丧的错误信息:"ERROR: An error occurred while performing the step: 'Building kernel modules'",这感觉就像一盆冷水浇在头上。别担心,你不是一个人遇到这个问题,而且解决方案其实比你想象的要简单。

这个错误通常发生在较新的Linux内核版本与NVIDIA官方驱动之间出现兼容性问题时。Ubuntu 22.04默认会安装较新的内核版本,而NVIDIA驱动可能还没有及时跟进支持。下面我将详细介绍几种解决方法,从最简单的到最彻底的,让你能够根据自己的情况选择最适合的方案。

1. 理解问题根源

在深入解决方案之前,让我们先搞清楚为什么会出现这个错误。当你在Ubuntu上安装NVIDIA驱动时,安装程序需要为当前运行的内核构建内核模块(kernel modules)。这些模块是驱动程序与Linux内核通信的桥梁。

问题通常出现在以下几种情况:

  • 内核版本太新 :NVIDIA官方驱动可能还没有适配最新的Linux内核
  • 内核头文件缺失 :构建模块需要匹配的内核头文件
  • Secure Boot启用 :某些情况下Secure Boot会阻止未签名模块的加载
  • 之前安装残留 :之前安装的驱动或DKMS模块可能造成冲突

最常见的场景是第一种——你使用的Linux内核版本太新,而NVIDIA官方驱动尚未支持。这就是为什么降级内核版本往往能解决问题。

2. 快速检查与准备工作

在开始任何操作前,让我们先做一些基本检查:

# 查看当前内核版本
uname -r

# 查看已安装的所有内核
dpkg --list | grep linux-image

# 检查NVIDIA相关进程是否在运行(如果有则需要停止)
ps aux | grep -i nvidia

重要提示 :在进行任何系统级修改前,强烈建议:

  1. 备份重要数据
  2. 确保你有恢复模式或Live USB的访问权限
  3. 记录下你执行的每一步命令

3. 方法一:降级内核版本

这是解决"Building kernel modules"错误最可靠的方法。以下是详细步骤:

3.1 进入GRUB菜单

  1. 重启你的计算机
  2. 在启动时按住Shift键(某些系统可能是ESC键)进入GRUB菜单
  3. 选择"Advanced options for Ubuntu"

3.2 选择较低版本内核

在高级选项中,你会看到类似如下的列表:

Ubuntu, with Linux 5.15.0-76-generic
Ubuntu, with Linux 5.15.0-76-generic (recovery mode)
Ubuntu, with Linux 5.15.0-72-generic
Ubuntu, with Linux 5.15.0-72-generic (recovery mode)

选择**不带(recovery mode)**的较低版本内核启动。通常选择5.15.0-xx系列中数字较小的版本。

3.3 删除冲突的高版本内核

成功进入系统后,执行以下操作:

# 查看所有已安装的内核
dpkg --get-selections | grep linux-image

# 删除导致问题的高版本内核(替换为你系统中实际的高版本号)
sudo apt remove linux-image-6.2.0-26-generic

# 更新GRUB配置
sudo update-grub

# 重启系统
sudo reboot

重启后,系统应该会自动使用你保留的较低版本内核。

3.4 安装NVIDIA驱动

现在你可以尝试重新安装NVIDIA驱动:

# 添加官方NVIDIA驱动PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# 查找推荐的驱动版本
ubuntu-drivers devices

# 安装推荐的驱动版本(例如525)
sudo apt install nvidia-driver-525

4. 方法二:使用UKMS动态内核模块支持

如果你不想降级内核,可以尝试使用DKMS(Dynamic Kernel Module Support)来构建模块:

# 安装必要的工具和内核头文件
sudo apt install build-essential dkms linux-headers-$(uname -r)

# 如果之前安装失败,先清理
sudo nvidia-uninstall
sudo apt remove --purge '^nvidia-.*'

# 重新安装驱动
sudo apt install nvidia-driver-525

这种方法在内核头文件匹配的情况下通常有效,但如果内核版本太新,可能仍然会失败。

5. 方法三:从NVIDIA官网下载驱动手动安装

如果上述方法都无效,可以考虑直接从NVIDIA官网下载驱动并手动安装:

  1. 访问 NVIDIA驱动下载页面
  2. 选择你的显卡型号和操作系统
  3. 下载.run格式的驱动文件
  4. 执行以下命令:
# 停止图形界面
sudo systemctl stop gdm

# 给驱动文件添加执行权限
chmod +x NVIDIA-Linux-x86_64-525.105.17.run

# 运行安装程序
sudo ./NVIDIA-Linux-x86_64-525.105.17.run

手动安装时,安装程序会尝试为当前内核构建模块,如果失败,通常会提供更多详细的错误信息。

6. 安装后的重要配置

成功安装驱动后,有几个关键步骤不能忽略:

6.1 禁用自动内核更新

为了防止系统自动更新到不兼容的内核版本:

# 临时方案:仅保留当前版本
sudo apt-mark hold linux-image-generic linux-headers-generic

# 永久方案:禁用自动更新(谨慎使用)
sudo nano /etc/apt/apt.conf.d/20auto-upgrades

将内容修改为:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

6.2 验证驱动安装

# 检查驱动版本
nvidia-smi

# 检查3D加速是否工作
glxinfo | grep "OpenGL renderer"

# 检查CUDA是否可用(如果安装了)
nvcc --version

7. 常见问题与解决方案

Q:安装后黑屏或无法进入图形界面怎么办?

A:尝试以下步骤:

  1. 进入恢复模式
  2. 选择root shell
  3. 执行:
sudo apt remove --purge '^nvidia-.*'
sudo apt install ubuntu-desktop
sudo reboot

Q:如何完全卸载NVIDIA驱动?

A:使用以下命令彻底清理:

sudo apt remove --purge '^nvidia-.*'
sudo apt remove --purge '^libnvidia-.*'
sudo apt autoremove
sudo apt install --reinstall ubuntu-desktop

Q:Secure Boot导致的问题如何解决?

A:你有两个选择:

  1. 在BIOS中禁用Secure Boot
  2. 为NVIDIA模块创建签名密钥(更复杂但更安全)

8. 长期维护建议

为了避免将来再次遇到类似问题:

  • 定期检查NVIDIA驱动更新 :新驱动通常会支持更新的内核
  • 创建系统快照 :使用Timeshift等工具在重大变更前创建系统备份
  • 订阅内核更新通知 :关注Ubuntu安全公告,了解内核更新的兼容性信息
  • 考虑使用LTS内核 :长期支持版本通常更稳定,与驱动兼容性更好

记住,Linux系统管理是一个持续学习的过程。每次遇到问题并解决它,都是提升技能的机会。希望这篇指南能帮助你顺利解决"Building kernel modules"错误,让你的NVIDIA显卡在Ubuntu上发挥全部性能。

更多推荐