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 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
_艾伦 耶格尔.2 天前
进程间通信
linux
Liuqy-052 天前
Linux IO编程——静态库、动态库
linux
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK2 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid
琥珀色糖2 天前
SimlpeHttp
linux·服务器
qeen872 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
Zenova EdgeOS2 天前
Linux ss 工业边缘网络分析实战
linux·python·边缘计算·工业网关