NVIDIA 驱动问题修复报告
问题现象
系统重启后 NVIDIA 驱动无法工作,执行 nvidia-smi 返回错误:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
Make sure that the latest NVIDIA driver is installed and running.
问题分析
硬件环境
- GPU: NVIDIA GeForce RTX 3090
- 操作系统: Ubuntu 22.04 LTS
- 内核版本: 6.8.0-106-generic
根因排查
| 检查步骤 | 发现 |
|---|---|
| `lspci | grep NVIDIA` |
dkms status |
显示 nvidia/550.163.01: added,但没有对应当前内核的编译结果 |
ls /var/lib/dkms/nvidia/550.163.01/6.8.0-106-generic/ |
目录不存在,确认模块未编译 |
编译错误分析
尝试手动 DKMS 编译时遇到错误:
cc: error: unrecognized command-line option '-ftrivial-auto-var-init=zero'
根本原因:
- 内核 6.8.0-106 配置了
CONFIG_INIT_STACK_ALL_ZERO=y,该选项开启后内核 Makefile 会自动添加-ftrivial-auto-var-init=zero编译标志 -ftrivial-auto-var-init=zero选项需要 GCC 12 或更高版本 支持- Ubuntu 22.04 默认 GCC 版本为 11.4.0,不支持该选项
- conda 环境将其 GCC 14 添加到
PATH优先级首部,导致 DKMS 编译使用 conda GCC 仍出现问题
修复过程
1. 尝试直接重新编译原有模块
bash
sudo dkms build -m nvidia/550.163.01 -k 6.8.0-106-generic
结果: 编译失败,确认 GCC 兼容性问题。
2. 尝试升级到 NVIDIA 580 驱动版本
系统中已经存在 linux-objects-nvidia-580-6.8.0-106-generic,说明 Ubuntu 仓库已经提供了适配 6.8.0-106 内核的预编译对象,但仍需要 DKMS 编译模块:
bash
sudo apt install nvidia-driver-580
结果: 遇到 dpkg 冲突,修复后继续,但仍然遇到相同的 GCC 编译错误。
3. 安装 GCC 12 并重新编译
bash
sudo dpkg --configure -a
sudo apt install gcc-12 g++-12
结果: 安装 GCC 12 后,dpkg 自动触发 DKMS 编译,编译成功完成。
验证修复
bash
$ nvidia-smi
Wed Apr 1 13:09:50 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.20 Driver Version: 580.126.20 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3090 Off | 00000000:17:00.0 Off | N/A |
| 30% 49C P0 93W / 350W | 0MiB / 24576MiB | 4% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
修复结论
| 项目 | 状态 |
|---|---|
| 驱动编译 | ✅ 成功 |
| 内核模块加载 | ✅ 成功 |
| nvidia-smi 工作 | ✅ 正常 |
| GPU 可被识别 | ✅ 正确识别 RTX 3090 |
最终驱动信息:
- 驱动版本: 580.126.20
- CUDA 版本: 13.0
- 可用显存: 24576 MiB
经验总结
- 内核更新后需要注意兼容性 - 新内核可能启用新的编译选项,需要对应版本的工具链支持
- conda 环境影响系统编译 - conda 将自己的 GCC 放入 PATH 会干扰 DKMS 内核模块编译
CONFIG_INIT_STACK_ALL_ZERO=y需要 GCC ≥ 12 - Ubuntu 22.04 用户升级内核后需要手动安装 GCC 12
相关文件位置
- DKMS 构建日志:
/var/lib/dkms/nvidia/580.126.20/build/make.log - 内核配置:
/boot/config-6.8.0-106-generic - NVIDIA 驱动包:
nvidia-driver-580