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
相关推荐
盐焗鹌鹑蛋1 小时前
【Linux】基本指令
linux
海阔天空任鸟飞~8 小时前
Linux 权限 777
linux·运维·服务器
Kina_C11 小时前
Linux iptables 防火墙原理与实操——从四表五链到 NAT 配置
linux·运维·服务器·iptables
wdfk_prog11 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
TARDIS_202015 小时前
VMware配置ubuntu26.04虚拟机桥接
ubuntu
雷工笔记16 小时前
什么是Ubuntu?
linux·运维·ubuntu
jsons116 小时前
autofs挂载
linux·服务器·网络
liwulin050617 小时前
【ollama】自定义结构化输出
linux·前端·数据库·ollama
gs8014017 小时前
【实战】记一次 Linux 服务器入侵排查:grok-agent 后门木马深度剖析与彻底清理
linux·运维·服务器
时空无限18 小时前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm