Ubuntu 22.04 NVIDIA 驱动问题修复报告

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'

根本原因:

  1. 内核 6.8.0-106 配置了 CONFIG_INIT_STACK_ALL_ZERO=y,该选项开启后内核 Makefile 会自动添加 -ftrivial-auto-var-init=zero 编译标志
  2. -ftrivial-auto-var-init=zero 选项需要 GCC 12 或更高版本 支持
  3. Ubuntu 22.04 默认 GCC 版本为 11.4.0,不支持该选项
  4. 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

经验总结

  1. 内核更新后需要注意兼容性 - 新内核可能启用新的编译选项,需要对应版本的工具链支持
  2. conda 环境影响系统编译 - conda 将自己的 GCC 放入 PATH 会干扰 DKMS 内核模块编译
  3. 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
相关推荐
暂未成功人士!2 小时前
在windows电脑上的vscode使用sftp将项目文件与嵌入式平台(Ubuntu)同步的方法
linux·运维·vscode·ubuntu·ssh
Amnesia0_02 小时前
linux中的git和gdb
linux·运维·git
浅念-2 小时前
Linux 进程与操作系统
linux·运维·服务器·网络·数据结构·笔记·网络协议
顶点多余2 小时前
POSIX信号量+生产消费模型应用+环形缓冲区实现
linux·c++
Qinti_mm2 小时前
Linux NUMA自动优化机制全解析
linux·服务器·numa balancing
桌面运维家3 小时前
KVM虚拟机:存储IO瓶颈诊断与Linux性能优化实战
linux·运维·性能优化
M1nat0_3 小时前
Linux 基础 IO 全解析:从文件本质到重定向与缓冲区
linux·运维·服务器
l1t3 小时前
在aarch64 Linux环境编译安装CinderX
linux·python
Lugas Luo3 小时前
SATA 协议报错信号与根因定位分析指南
linux·嵌入式硬件