1. 问题现象与背景分析
最近在Ubuntu 22.04 LTS上安装NVIDIA显卡驱动时,遇到了一个经典报错:"ERROR: An error occurred while performing the step: 'Building kernel modules'. See..."。这个错误在Linux桌面用户中相当常见,特别是当系统内核版本与NVIDIA驱动版本不兼容时。
作为长期使用Linux的老用户,我经历过无数次显卡驱动的安装失败。这次遇到的问题特别典型——系统刚升级到最新内核(比如5.15.0-76-generic),而安装的NVIDIA驱动版本(例如525.85.05)却无法正确编译内核模块。错误通常发生在DKMS(Dynamic Kernel Module Support)尝试为当前运行的内核构建nvidia.ko模块时。
注意:这个错误不是Ubuntu特有的,任何基于Linux发行版(如Debian、CentOS等)都可能遇到,只是Ubuntu的自动硬件检测和驱动管理机制使得问题更显性化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 根本原因深度解析
2.1 内核与驱动版本不匹配
NVIDIA闭源驱动需要为每个特定的内核版本编译内核模块。当你的系统内核更新后(比如通过apt upgrade),原有的驱动模块需要重新编译。如果驱动版本太旧,可能无法支持新内核的API变更。
通过命令查看当前内核版本:
bash复制uname -r
2.2 头文件缺失问题
构建内核模块需要安装对应版本的内核头文件。如果系统中没有linux-headers-$(uname -r),DKMS就无法完成编译。这是新手最容易忽略的一点。
2.3 Secure Boot启用状态
现代UEFI系统默认启用Secure Boot,这会阻止加载未签名的内核模块。NVIDIA驱动默认没有微软的签名,导致模块加载失败。
检查Secure Boot状态:
bash复制mokutil --sb-state
2.4 残留驱动冲突
之前安装的NVIDIA驱动(如通过.run文件安装的版本)可能与apt仓库安装的版本产生冲突。特别是/lib/modules/下可能存在多个版本的nvidia模块。
3. 完整解决方案与实操步骤
3.1 准备工作与环境检查
首先确保系统是最新的:
bash复制sudo apt update && sudo apt upgrade -y
安装必备的构建工具和头文件:
bash复制sudo apt install build-essential linux-headers-$(uname -r) dkms
验证NVIDIA显卡是否被系统识别:
bash复制lspci | grep -i nvidia
3.2 彻底清理旧驱动
这一步至关重要!很多问题都源于残留文件:
bash复制sudo apt purge *nvidia*
sudo apt a
