适用场景:Ubuntu Server / Ubuntu Desktop(无图形界面) + 使用 .run 安装 CUDA 或 NVIDIA 驱动 + apt upgrade 后 nvidia-smi 报错

✅ 快速解决方案(直接复制粘贴)

如果你正面临 nvidia-smi 报错,且系统刚升级过内核,请按以下步骤操作:


# 1. 安装必要工具

sudo apt update

sudo apt install -y dkms build-essential linux-headers-$(uname -r)

# 2. 查看驱动版本(通常在 /usr/src/nvidia-*)

ls /usr/src | grep nvidia

# 假设输出为 nvidia-575.57.08,则执行:

sudo dkms add -m nvidia -v 575.57.08

sudo dkms build -m nvidia -v 575.57.08 -k $(uname -r)

sudo dkms install -m nvidia -v 575.57.08 -k $(uname -r)

# 3. 加载驱动

sudo depmod -a

sudo modprobe nvidia

# 4. 验证

nvidia-smi

✅ 如果 nvidia-smi 正常输出 GPU 信息,恭喜你,驱动已恢复!

💡 提示:如果你不知道驱动版本,跳到下文“如何查找原始驱动版本”一节。


📚 详细教程:为什么升级后会“掉驱动”?如何彻底解决?

❓ 问题现象

你在 Ubuntu Server 上使用 apt upgrade 后重启,发现:


nvidia-smi

# 输出:

# NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

但你记得之前明明装好了驱动,这是为什么?


🔍 根本原因:内核升级导致驱动模块失效

当你执行 apt upgrade 时,系统可能升级了 Linux 内核(例如从 6.14.0-27-generic → 6.14.0-28-generic)。

而 NVIDIA 驱动是一个 内核模块.ko 文件),它必须为当前运行的内核版本专门编译。

如果你是通过 NVIDIA 官方 .run 文件 安装的驱动:

  • 它只会在安装时的内核上编译模块;

  • 不自动注册到 DKMS(Dynamic Kernel Module Support);

  • 因此,内核一升级,旧模块无法加载,新内核没有模块 → 驱动“消失”


🧩 修复原理:把 .run 驱动“纳入”DKMS 管理

虽然 .run 安装默认不使用 DKMS,但它通常会在 /usr/src/ 留下驱动源码和 dkms.conf 文件。

我们可以通过手动命令,将这些源码注册到 DKMS,并为当前内核重新构建模块。

这样,未来再升级内核,DKMS 会自动为你重建驱动!


🛠️ 详细操作步骤(含容错处理)

Step 1:确认问题


# 查看当前内核

uname -r

# 输出示例:6.14.0-28-generic

# 检查 nvidia-smi 是否失败

nvidia-smi

# 如果报错,继续

Step 2:安装 DKMS 和编译依赖


sudo apt update

sudo apt install -y dkms build-essential linux-headers-$(uname -r)

✅ dkms:动态重建内核模块

✅ build-essential:编译工具链(gcc, make 等)

✅ linux-headers-$(uname -r):当前内核的头文件(必须!)


Step 3:查找原始 NVIDIA 驱动版本

如果你不知道自己的驱动版本,执行:


ls /usr/src | grep nvidia

输出可能类似:


nvidia-575.57.08

nvidia-535.161.07

✅ 这就是你的驱动模块目录名,也是版本号。

📌 命名规则nvidia-<驱动版本号>,如 nvidia-575.57.08


Step 4:使用 DKMS 重建驱动模块

假设你查到的版本是 nvidia-575.57.08,执行:


# 注册模块

sudo dkms add -m nvidia -v 575.57.08

# 为当前内核构建模块

sudo dkms build -m nvidia -v 575.57.08 -k $(uname -r)

# 安装模块

sudo dkms install -m nvidia -v 575.57.08 -k $(uname -r)

📌 参数说明:

  • -m nvidia:模块名
  • -v 575.57.08:驱动版本
  • -k $(uname -r):目标内核版本

Step 5:加载驱动并验证


# 更新模块依赖

sudo depmod -a

# 加载 NVIDIA 驱动

sudo modprobe nvidia

# 验证

nvidia-smi

✅ 如果看到 GPU 信息,说明成功!


Step 6:检查 DKMS 状态(可选)


sudo dkms status

你应该看到类似:


nvidia, 575.57.08, 6.14.0-28-generic, x86_64: installed

这表示驱动已成功注册并为当前内核安装。


🛡️ 长期预防:避免未来再“掉驱动”

✅ 方法一:确保 dkms 和 linux-headers 始终安装


# 检查是否安装

dpkg -l | grep linux-headers-$(uname -r)

dpkg -l | grep dkms

# 如果没有,安装

sudo apt install -y dkms linux-headers-$(uname -r)

✅ 一旦驱动被 DKMS 管理,每次内核升级后系统会自动重建模块


✅ 方法二:改用 .deb 包安装(推荐)

避免使用 .run 文件,改用 NVIDIA 官方 .deb + APT 安装,完全自动化:


# 添加 CUDA 仓库(Ubuntu 24.04 兼容)

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb

sudo dpkg -i cuda-keyring_1.1-1_all.deb

sudo apt update

# 安装驱动(自动依赖 DKMS)

sudo apt install -y nvidia-driver-575

✅ 从此以后apt upgrade 不再怕!


✅ 方法三:禁用 Secure Boot(避免签名问题)

如果系统提示 kmodsign 或 MOK 相关错误:

  1. 重启进入 BIOS

  2. 找到 Secure Boot 选项

  3. 设置为 Disabled

✅ 否则每次重建模块都需要手动签名。


🧰 实用脚本:一键检查 & 修复

创建脚本 /usr/local/bin/nvidia-fix.sh:


#!/bin/bash

# nvidia-fix.sh - 一键修复 NVIDIA 驱动

set -e

echo "🔧 正在修复 NVIDIA 驱动..."

# 查找最新 nvidia-xxx 目录

NVIDIA_SRC=$(ls /usr/src/ | grep nvidia | head -n1)

if [ -z "$NVIDIA_SRC" ]; then

    echo "❌ 未找到 /usr/src/nvidia-* 目录"

    exit 1

fi

VERSION=$(echo $NVIDIA_SRC | cut -d'-' -f2)

echo "📦 检测到驱动版本: $VERSION"

# 安装依赖

sudo apt install -y dkms build-essential linux-headers-$(uname -r) >/dev/null 2>&1

# DKMS 操作

sudo dkms add -m nvidia -v $VERSION >/dev/null 2>&1 || true

sudo dkms build -m nvidia -v $VERSION -k $(uname -r)

sudo dkms install -m nvidia -v $VERSION -k $(uname -r)

# 加载

sudo depmod -a

sudo modprobe nvidia

# 验证

echo "✅ 驱动修复完成!"

nvidia-smi | head -5

赋予执行权限:


sudo chmod +x /usr/local/bin/nvidia-fix.sh

以后只需:


sudo nvidia-fix.sh

📝 写在最后

这个问题在使用 .run 安装 CUDA 的用户中非常普遍,但官方文档并未强调“内核升级风险”。

通过本文的方法,你不仅快速修复了问题,还建立了长期稳定的驱动管理机制

希望这篇教程能帮助更多人少走弯路!


如果你觉得有用,欢迎点赞、收藏、转发!也欢迎在评论区分享你的修复经验。

📬 作者:Geek XiaoCheng

🗓️ 发布日期:2025年8月21日

🏷️ 标签Ubuntu NVIDIA CUDA dkms Linux 深度学习 服务器维护


本文适用系统:Ubuntu 20.04 / 22.04 / 24.04 / 25.04(Server 或 Desktop)

适用显卡:NVIDIA GeForce / RTX / Tesla / A100 等所有支持 Linux 驱动的型号