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
相关推荐
ltl2 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??2 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
Shell运维手记3 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
测试运维日常笔记4 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器
雾时之林5 小时前
Linux----cron定时服务
linux·运维·服务器
sunly_6 小时前
TypeScript:3、类型声明与类型推断
javascript·ubuntu·typescript
wengqidaifeng7 小时前
1.从“会敲命令”到理解 Linux:15 个基础指令、文件树与命令执行的本质
linux·运维·服务器·ubuntu
奔跑的架构师8 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
(╹◡╹)9 小时前
11.RK3588本地大模型内存评估优化
java·linux·前端
码农客栈9 小时前
Linux 设备树
linux