Ubuntu22.04重装显卡驱动

适用场景

  • 需要升级 NVIDIA 驱动以满足 CUDA 版本要求
  • 当前驱动版本过低(如 550 支持 CUDA 12.4,但某些工程需要 CUDA 12.6+)
  • 从手动安装的驱动切换到系统推荐版本

步骤 1:查看当前驱动版本

bash 复制代码
nvidia-smi

记录 Driver Version 和 CUDA Version(驱动支持的 CUDA 上限)。

步骤 2:查看系统可用驱动

bash 复制代码
ubuntu-drivers devices

找到标记 recommended 的版本(如 nvidia-driver-595)。

步骤 3:确认之前驱动安装方式

bash 复制代码
nvidia-uninstall
结果 说明 处理方式
命令不存在 apt 安装 apt purge 卸载
命令存在 .run 文件安装 nvidia-uninstall 卸载

步骤 4:卸载旧驱动

bash 复制代码
# apt 安装的驱动
sudo apt purge nvidia-* nvidia-driver-*

# 清理残留
sudo apt autoremove

步骤 5:安装系统推荐驱动

bash 复制代码
sudo ubuntu-drivers autoinstall

自动安装 recommended 标记的驱动版本。

步骤 6:重启生效

bash 复制代码
sudo reboot

步骤 7:验证新驱动

bash 复制代码
nvidia-smi

确认 Driver Version 和 CUDA Version 已更新。

驱动版本与 CUDA 对应关系

驱动版本 支持 CUDA 上限
535 12.2
545 12.3
550 12.4
560+ 12.6+
580 12.8
595 12.9

常见问题

问题 原因 解决
Driver/library version mismatch 新驱动安装后未重启 执行 sudo reboot
nvidia-smi 失败 驱动未正确加载 重启或检查安装日志

快速命令汇总

bash 复制代码
# 一键操作(从卸载到安装)
sudo apt purge nvidia-* nvidia-driver-* && sudo apt autoremove && sudo ubuntu-drivers autoinstall && sudo reboot

内核版本与驱动冲突问题

问题背景

内核版本 支持的最高 NVIDIA 驱动 CUDA 版本
6.8.0-52-generic nvidia-550 CUDA 12.4
6.8.0-100+ nvidia-560/570/580/595 CUDA 12.6+

SAM3 官方要求 CUDA ≥ 12.6

冲突场景

当内核被 apt-mark hold 锁定在旧版本(如 6.8.0-52),但需要新驱动(如 nvidia-595)时:

复制代码
HWE 元包机制 → 自动拉取最新内核的驱动模块
用户内核锁定 → 内核不升级
结果 → 驱动模块装到不存在的内核版本,nvidia-smi 失败

临时解决方案:双内核切换

适用于两个程序不同时使用、需要远程切换的场景。

1. 锁定旧内核防止被删除
bash 复制代码
sudo apt-mark hold linux-image-6.8.0-52-generic
2. 切换到新内核环境(SAM3)
bash 复制代码
# 设置默认启动内核(修改 /etc/default/grub)
sudo sed -i 's/6.8.0-52-generic/6.8.0-111-generic/' /etc/default/grub
sudo update-grub

# 安装新驱动(会自动卸载旧驱动)
sudo apt install nvidia-driver-595 linux-modules-nvidia-595-6.8.0-111-generic

# 重启
sudo reboot
3. 切换回旧内核环境(其他程序)
bash 复制代码
# 设置默认启动内核
sudo sed -i 's/6.8.0-111-generic/6.8.0-52-generic/' /etc/default/grub
sudo update-grub

# 安装旧驱动
sudo apt install nvidia-driver-550 linux-modules-nvidia-550-6.8.0-52-generic

# 重启
sudo reboot
4. 创建一键切换脚本(可选)
bash 复制代码
# 切换到 SAM3 环境
echo '#!/bin/bash
sudo sed -i "s/6.8.0-52-generic/6.8.0-111-generic/" /etc/default/grub
sudo update-grub
sudo apt install nvidia-driver-595 linux-modules-nvidia-595-6.8.0-111-generic -y
sudo reboot' > ~/switch_to_sam3.sh && chmod +x ~/switch_to_sam3.sh

# 切换到其他程序环境
echo '#!/bin/bash
sudo sed -i "s/6.8.0-111-generic/6.8.0-52-generic/" /etc/default/grub
sudo update-grub
sudo apt install nvidia-driver-550 linux-modules-nvidia-550-6.8.0-52-generic -y
sudo reboot' > ~/switch_to_other.sh && chmod +x ~/switch_to_other.sh

使用:

bash 复制代码
~/switch_to_sam3.sh    # 一键切换到 SAM3 环境
~/switch_to_other.sh   # 一键切换回其他程序环境

常用命令

bash 复制代码
# 查看当前运行的内核
uname -r

# 查看 GRUB 默认启动的内核
grep GRUB_DEFAULT /etc/default/grub

# 查看已安装的内核
dpkg -l | grep linux-image | grep -v meta

# 查看被锁定的包,支持锁住多个
apt-mark showhold
apt-mark showhold | grep linux-image

# 锁定内核
sudo apt-mark hold linux-image-6.8.0-52-generic

# 解锁内核
sudo apt-mark unhold linux-image-6.8.0-52-generic

相关推荐
朦胧之10 小时前
AI 编程-老项目改造篇
java·前端·后端
swipe12 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
爱勇宝13 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
甲维斯13 小时前
用AI还原《坦克大战》并3D化升级!
前端·人工智能·游戏开发
IT_陈寒14 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
kyriewen14 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
谷子在生长14 小时前
纯血鸿蒙自定义弹窗最佳实践:从「到处复制」到「一行调用」
前端·harmonyos
壹方秘境14 小时前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
神秘面具男14 小时前
HarmonyOS 6.0跨端远程控制
前端·后端
枫树下x14 小时前
NestJS基础框架
前端