Ubuntu下NVIDIA Quadro P620驱动安装实战:从nouveau到nvidia-smi正常输出
2026/9/16 21:16:37 网站建设 项目流程

这是一篇很典型的“老黄历项目复活”场景:手里有一张NVIDIA Quadro P620专业卡,换了一台Linux机器,或者给旧工作站重装了Ubuntu,结果开机进去发现图形界面分辨率奇怪、鼠标卡顿、甚至直接黑屏,一查才知道系统默认加载的是开源驱动nouveau,而NVIDIA官方闭源驱动压根还没装上。

我先说结论:Quadro P620在Linux下装驱动这件事,难度不高,但坑不少。尤其是Ubuntu 22.04之后的内核模块签名机制、Secure Boot、还有nvidia-smi报“couldn't communicate with the nvidia driver”这个经典错误,能拦住一大批人。这篇博客就是一次完整记录,从驱动选型、环境检测、禁用nouveau、安装闭源驱动,到处理各种翻车现场,全程复现我这次装机的实际操作。不管你是给设计工作站装卡,还是拿P620跑CUDA推理,照着这套流程走,基本能少踩一大半雷。

1. 动手之前,先把这张卡和这台机器的关系搞清楚

很多人装NVIDIA驱动翻车,不是因为命令敲错,而是因为没搞清楚自己这张卡是什么定位、系统是什么状态、驱动装上之后到底要解决什么问题。所以我不急着写命令,先把P620这张卡和安装环境的关系理清楚。

1.1 Quadro P620 到底是什么定位的显卡

Quadro P620是NVIDIA在2018年发布的一款入门级专业显卡,Pascal架构,GP107核心,512个CUDA核心,2GB GDDR5显存,显存位宽128bit,功耗只有40W左右,不需要外接供电。这个参数放到今天看,游戏性能连入门级GTX 1650都打不过,但它的价值不在游戏,而在于几个特殊点:

  • 它是一张专业卡,官方驱动对专业软件(CAD、SolidWorks、Maya、CATIA等)有优化认证,OpenGL性能比同价位游戏卡稳定得多;
  • 它是半高卡,很多小机箱、工作站、嵌入式整机只能用这种尺寸;
  • 它有4个miniDP接口,多屏输出比一般游戏卡方便;
  • 它支持CUDA,算力6.1,可以跑一些轻量级的深度学习推理、视频编解码任务。

所以你在Linux下装这张卡的驱动,基本逃不开这几个需求:提高桌面分辨率/多屏输出稳定性、让OpenGL应用正常工作、让CUDA程序能识别GPU。搞清楚自己装驱动是为了哪一个,后面遇到问题才知道排查方向。

1.2 装驱动前必须确认的三件事

我开始实际操作之前,先花十分钟把系统信息拉齐了。这一步看似多余,但能省掉后面大量无意义的报错排查。重点确认三件事:

**第一,系统版本和CPU架构。**P620的驱动对x86_64架构支持最完善;如果是ARM64的机器(比如某些国产整机),就得查NVIDIA官方有没有对应驱动分支,通常是要单独找ARM版驱动包的。

**第二,内核版本和gcc版本。**Ubuntu 22.04默认内核是5.15,23.04是6.2。NVIDIA闭源驱动通过DKMS注册到内核,内核版本和gcc版本不匹配,编译阶段就会挂掉。这也是很多人装完驱动重启后,nvidia-smi报通信失败的头号原因之一。

**第三,Secure Boot状态。**这一步最容易被忽略。如果你的机器开启了UEFI Secure Boot,那么安装NVIDIA驱动时,内核模块必须经过签名才能被加载。Ubuntu的官方驱动仓库automake工具会走签名流程,但runfile方式安装的模块不会自动签名,结果就是装完后驱动加载不了,报错信息却藏得很深。

这三项信息确认完之后,我才开始选安装方案。你可以用下面这段命令快速收集环境信息:

sudo lsb_release -a uname -r lspci | grep -i nvidia mokutil --sb-state gcc --version

其中mokutil --sb-state如果输出SecureBoot enabled,后面就得多做一步签名处理;输出SecureBoot disabled就省心很多。

2. 驱动安装方案怎么选:apt、runfile、还是别的方式

Linux下装NVIDIA驱动,主流方案就那么几种:用Ubuntu官方源(ubuntu-drivers)、用NVIDIA官网runfile包、用NVIDIA官方apt仓库、或者在装CUDA toolkit时把驱动一起装进来。每种方案都有优缺点,不是越新越好,更不是官网下载一定最好。

2.1 三种安装方式的优缺点对比

我整理了一张表,这几种方案的核心差异一目了然。

安装方式适用场景优点缺点
ubuntu-drivers(apt)绝大多数Ubuntu桌面/服务器自动匹配版本、无需手动编译、自动处理DKMS和签名流程、升级内核后自动重建模块版本可能不是最新,但稳定
NVIDIA官网runfile需要特定驱动版本、其他发行版、喜欢手动掌控版本最全、可自定义参数(放弃nouveau、不装OpenGL等)编译时依赖gcc/make/headers,容易因环境问题失败;升级内核后需自己重新执行一遍
NVIDIA官方apt仓库Debian/Ubuntu长期维护、追求新版本版本新、官方源稳定、更新方便需要添加GPG密钥和source list,国内网络环境拉取速度可能不理想
随CUDA toolkit安装恰好要装CUDA环境一步到位,版互相兼容驱动版本被CUDA绑定,后期单独升级驱动容易破坏CUDA环境

我这次的目标是给一台跑图形设计和轻量CUDA推理的工作站装驱动,系统是Ubuntu 22.04,无特殊驱动版本需求,所以直接选了最省事的ubuntu-drivers方案。

2.2 我为什么选了 ubuntu-drivers 这条路线

理由很简单:它把环境差异和编译流程全部挡在身后了。

ubuntu-drivers devices命令,系统会自动识别显卡型号,然后列出推荐安装的驱动版本。这个推荐版本是Ubuntu开发者基于当前内核版本、显卡型号和DCC生态测试过的,可靠性最高。比如我的P620,命令输出推荐的是nvidia-driver-525nvidia-driver-535,我选了535,没任何特殊理由,就是它是当时源里比较新的稳定分支。

另外还有一个非常关键的点:通过apt安装的NVIDIA驱动会注册到DKMS(Dynamic Kernel Module Support)。很多装驱动的人不知道DKMS是什么,简单说,它是一套“内核模块自动跟随内核升级重新编译”的机制。如果你用runfile方式装驱动,之后每次系统更新内核,驱动模块和内核版本不匹配,重启必挂。而用apt装驱动,DKMS会在内核升级时自动重建nvidia.ko模块。这对长期使用的机器来说,省心程度完全不是一个量级。

2.3 那个内置的开源驱动必须先处理掉

NVIDIA P620在Linux下默认会被nouveau开源驱动接管。nouveau是社区逆向工程开发的,能亮机,能显示桌面,但性能拉胯,而且最主要的问题在于:nouveau和NVIDIA闭源驱动会抢占同一个硬件资源,不彻底禁用nouveau,闭源驱动根本没法加载。

很多人的报错"Failed to initialize the NVIDIA kernel module"或者"nvidia-smi has failed because it couldn't communicate with the nvidia driver",原因之一就是nouveau没被完全禁用,系统启动时nouveau先加载,NVIDIA驱动模块加载时检测到硬件被占用,直接放弃。所以安装闭源驱动之前,必须把nouveau列入黑名单。

禁用的标准姿势是创建一个modprobe配置,写入黑名单和加载选项:

sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf <<EOF blacklist nouveau options nouveau modeset=0 EOF

然后更新initramfs并重启:

sudo update-initramfs -u sudo reboot

重启后可以确认nouveau是否还在运行:

lsmod | grep nouveau

如果什么输出都没有,说明nouveau已经彻底休眠了。此时系统大概率会处于一个没有显卡驱动的“半裸奔”状态,桌面可能卡、分辨率可能低,不用慌,这正是预期中的中间态,下一步就装正主。

3. 安装实操全程记录:从黑屏边缘到 nvidia-smi 正常输出

下面这部分是我这次安装的完整过程。我会把每一步的命令、预期输出、卡点、补救方式都写出来。整个过程大概40分钟,其中一半时间是等驱动下载和系统重启。

3.1 第一步:确认系统环境和驱动推荐

进系统打开终端,先把环境信息拉一遍:

lsb_release -a uname -r sudo lspci | grep NVIDIA

我看到的信息是:

  • Ubuntu 22.04.3 LTS
  • 内核 5.15.0-91-generic
  • NVIDIA Quadro P620(lspci输出显示NVIDIA Corporation GP107GL [Quadro P620]

接着运行ubuntu-drivers devices,这个命令会扫描硬件并推荐合适的驱动:

sudo ubuntu-drivers devices

输出大概是这样的:

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 == modalias : pci:v000010DEd00001CBFsv000010DEsd0000128Bbc03sc00i00 vendor : NVIDIA Corporation driver : nvidia-driver-535 - third-party - recommended driver : nvidia-driver-470 - third-party - distro non-free driver : nvidia-driver-390 - third-party - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin

注意recommended标记,这里推荐的是nvidia-driver-535。如果你的ubuntu-drivers输出没有任何NVIDIA驱动推荐,说明这台机器没联网,或者显卡PCI设备没被正确识别,先检查lspci和网络。

顺带提一下,网上有些教程教人用nvidia-smi来检测驱动是否安装,但这招在没装驱动时根本不适用,因为nvidia-smi这个命令本身就是NVIDIA驱动包提供的,驱动没装,命令根本不存在。正确判断驱动状态的时机是在装完之后。

3.2 第二步:禁用nouveau并更新initramfs

按前面第2.3节创建黑名单文件,然后更新initramfs。这里有个细节:禁用nouveau之后,重启进入系统时桌面大概率会变得很难看或者分辨率极低,这是正常现象,不要以为是系统坏了。

sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf <<EOF blacklist nouveau options nouveau modeset=0 EOF sudo update-initramfs -u

这里有个我踩过的坑:update-initramfs -u输出繁冗,容易让人以为失败了。其实只要最后没有明显报错,基本就是成功了。如果你想确认,可以看命令是否返回了包含I: The initramfs will now be regenerated with the DKMS modules present之类的输出,没有报错就是OK。

重启后,如果发现系统卡在登录界面循环或者黑屏,不要慌,按住Ctrl+Alt+F2可以进入纯命令行tty。我在这次安装中虽然没遇到黑屏,但前几次装旧卡驱动时经常碰到,所以记住这条逃生通道能救大命。

3.3 第三步:通过apt安装NVIDIA闭源驱动

禁用nouveau并重启后,就可以正式安装驱动了。我这次的命令:

sudo apt update sudo apt install -y nvidia-driver-535

等待下载和安装。这个过程会自动装nvidia-kernel-module、nvidia-utils、libnvidia-gl、DKMS配置等一整套配套包。期间会看到DKMS在编译内核模块,这一步如果卡住或者报错,多半是内核headers没装,需要先执行:

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

安装结束后,重启系统:

sudo reboot

重启之后,很多人习惯立刻敲nvidia-smi看结果。我告诉你,这一步最容易翻车的就是这个动作,因为重启后驱动模块可能没被正确加载,至少得等系统进桌面跑稳了,或者登录进tty再检测。如果重启后直接黑屏,别慌,进tty先跑一遍这个诊断命令:

dmesg | grep nvidia

dmesg输出里能看到nvidia模块加载成功与否的关键日志。如果看到NVRM: loading NVIDIA UNIX x86_64 Kernel Module,说明模块加载成功了;如果看到NVRM: failed to initialize之类,说明有模块冲突或签名问题。

3.4 第四步:重启后验证,处理 nvidia-smi 通信失败

顺利进桌面后,打开终端,运行:

nvidia-smi

正常情况下,你会看到一张显卡信息表,显示驱动版本、CUDA版本号、显存使用量、当前运行进程。如果到这里你看到了以上内容,那恭喜你,安装已经成功了90%。

但如果你看到的是这个经典报错:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

别慌,这是装机阶段最常见的错误之一,而且成因有好几种。我这次就遇到了,当时的处理办法我用几个小命令逐一排查:

1. 先看硬件是否被系统识别到:

lspci | grep -i nvidia

如果输出正常,说明PCI层面没问题,问题出在驱动模块没加载到内核里。

2. 再看模块是否存在:

lsmod | grep nvidia

如果这里没有任何输出,说明nvidia.ko模块根本没被加载。

3. 尝试手动加载一次:

sudo modprobe nvidia

如果手动加载也报错,用dmesg | tail -30看最后的日志。我这次看到的日志是:

NVRM: API mismatch: the client has the version 535.xx, but this kernel module has version 470.xx.

这就是典型的版本错配。原因是我之前用runfile装过470版本驱动,后来用apt装535时,runfile留下的内核模块还残留在/lib/modules/里面,导致系统加载时取到了旧的470模块。处理办法是彻底清理老驱动,把runfile装过的nvidia相关文件全部删除后再重新安装:

sudo apt purge nvidia-* sudo apt autoremove

如果还残留有runfile装过的痕迹,可能还需要手动执行runfile卸载脚本:

sudo /usr/bin/nvidia-uninstall

清干净之后,再次sudo apt install nvidia-driver-535,重启,问题就解决了。所以对于曾经装过其他NVIDIA驱动的机器,安装前一定要彻底清理过旧驱动,不然后面报的错会让你怀疑人生。

3.5 驱动安装后的附加配置

P620这张卡装完驱动后,光有nvidia-smi还不够,最好把NVIDIA Settings也装上,方便调整显示输出模式、多屏布局、风扇策略等:

sudo apt install -y nvidia-settings

另外,如果你后面要跑CUDA,建议单独装CUDA Toolkit,但不建议用apt直接装源里的CUDA包,因为版本经常会比nvidia-smi显示的CUDA版本旧。我用的是NVIDIA官方runfile方式装CUDA,这里就不展开写了,否则篇幅撑不住。

4. 常见问题与排查技巧实录(基于真实踩坑)

这部分是纯干活记录。我整理了一下这次安装过程和以往装别的N卡驱动时遇到的高频问题,统一写成速查表,配合详细说明,方便你遇到问题时直接对号入座。

4.1 nvidia-smi通信失败的多种成因

这个报错我前面提了一嘴,但值得单独拉出来再讲一遍,因为它太太太常出现了。我把成因、症状、解决手段整理成下面这张表。

报错触发场景可能原因排查手段解决方式
刚装完驱动,重启后报错DKMS没编译成功或没加载模块lsmod | grep nvidiadmesg | grep NVRM确认内核headers完整,sudo dkms install nvidia/535
更新内核后报错新内核没有对应驱动模块被重建sudo dkms status重新生成模块,或删除新内核、回退旧内核
旧驱动残留新旧版本模块同时存在dmesg显示API mismatch清理旧驱动残留,彻底重装
Secure Boot开启且未做签名模块被UEFI拒之门外mokutil --sb-state关闭Secure Boot,或签名MOK
nouveau未禁干净两个驱动打架lsmod | grep nouveau确认黑名单和initramfs更新

其中dkms install命令是最容易被忽略的。如果你发现重启之后nvidia-smi连不上,先跑一句dkms status看看模块是built还是installed状态。如果显示没有installed,说明模块编译了但没注册进内核,此时运行sudo dkms install -m nvidia -v 535.xx.xx(版本号换成你实际装的)能救回来。

4.2 Secure Boot 导致模块加载失败

现在的品牌工作站很多出厂默认开启Secure Boot,比如我这次用的Dell T系列机器,就默认开着。如果你装驱动时根本没有意识到要管它,那么重启后大概率会出现模块加载失败的情况。

判断方式很简单:

mokutil --sb-state

如果显示SecureBoot enabled,那么你要么进BIOS关掉它,要么给NVIDIA模块做签名。关掉Secure Boot最省事,但如果你需要满足某些安全要求不能关,那就走MOK签名流程。Ubuntu的shim机制支持“Enroll key”流程,但这个过程略微繁琐,新手建议直接在BIOS里关了,之后再开也影响不大,NVIDIA模块一旦被系统接受,后续内核升级通过DKMS重建模块时仍然会有签名问题,除非做成自动化签名脚本,否则不省心。

我这次的操作选择是:直接进BIOS禁用Secure Boot。因为这台机器不跑什么对启动链完整性要求极高的业务,性能优先。

4.3 升级内核后驱动失效

这是Ubuntu用户最常遇到的长期问题。你装好驱动用了一个月,有一天系统提示“有更新”,你点了个升级,重启之后发现桌面分辨率异常、nvidia-smi连不上。原因很简单:内核升级了,DKMS触发了NVIDIA模块重建,但重建失败。

排查步骤:

dkms status

如果看到类似nvidia/535.xx.x: failed的字样,说明重建失败了。失败原因大多是内核headers不匹配。解决方式:

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

这个命令会自动为当前所有内核重建DKMS模块。如果还是失败,检查是不是gcc版本和编译内核时的不一样,必要时sudo apt install gcc-12并指定编译器。

4.4 黑屏、登录循环、分辨率异常

这三个问题其实是三个不同阶段的表现:

  • 黑屏可能出现在驱动加载阶段(模块崩溃)或显示服务器初始化时;
  • 登录循环通常是NVIDIA的OpenGL库接管了Xorg显示,但Xorg配置或权限不对;
  • 分辨率异常往往是没装nvidia-settings,或驱动版本过老,对显示器的EDID识别错误。

黑屏时,第一时间切到tty(Ctrl+Alt+F2),执行:

sudo dmesg | grep NVRM

如果看到Xid相关的错误,直接重启并按Shift进恢复模式,在root shell里重装驱动。如果你确认是显示服务器的问题,可以在tty里装个轻量桌面环境试试,或者把Xorg配置改成使用nvidia驱动而不是modesetting

sudo nvidia-xconfig

这条命令会自动生成一个使用nvidia驱动的xorg.conf,很多人重启后分辨率恢复正常。

4.5 其他几个值得记录的坑

**卸载驱动残留问题。**如果你打算换驱动版本,最好是sudo apt purge nvidia-*之后重启,再装新版。不重启直接装新版,有时会出现旧模块仍被占用的情况。

**CUDA版本和驱动版本的匹配问题。**P620是Pascal架构,CUDA支持到12.x没问题,但如果你装了最新的CUDA 12.4,需要驱动版本不低于550.x。用Ubuntu源里的535驱动,配CUDA 12.2或者12.3更稳。我推荐一个判断方式:nvidia-smi输出顶部会显示“CUDA Version: 12.2”,这个值代表该驱动支持的最高CUDA版本,只要你的CUDA toolkit不高于这个值,基本不会出问题。

**关于nvidia-persistenced。**如果你拿P620做长期CUDA推理任务,建议开启nvidia-persistenced服务,防止GPU在一段时间空闲后进入低功耗状态导致程序初始化变慢:

sudo systemctl enable nvidia-persistenced sudo systemctl start nvidia-persistenced

5. 后面再装卡,我的一些固定流程和心得

写到这里,核心内容基本结束了。最后分享一点我个人在多次装NVIDIA驱动过程中固定下来的流程和套路,也算给这篇文章收个尾,而不是用“以上就是……希望对你有所帮助”这种空话。

我的固定流程大概是这样:查环境 -> 清旧驱动 -> 禁用nouveau -> 装驱动 -> 验内核模块 -> 重启用nvidia-smi确认 -> 装CUDA(如果需要)。每换一台机器我都是这个套路,极少失手。即使遇到新报错,也优先用dmesg | grep NVRMdkms status定位,不要一上来就格式化重装系统。

另外说一句P620的使用心得。这张卡虽然老,但在Linux下当“亮机卡+轻量CUDA计算卡”其实非常稳。它的驱动在Debian/Ubuntu生态里维护得很成熟,性能释放虽然不强,但胜在省心。如果你只是拿它做多屏输出,或者跑一些轻量级的PyTorch CPU/GPU推理任务,可以说绰绰有余。真遇到算力瓶颈,问题也一定出在显存大小上,2GB跑大模型是肯定不行的,但做视频硬件转码、实时渲染辅助、小模型推理,还是有一战之力的。

最后再补一个小技巧:装完驱动后,如果你发现系统里gcc版本比较高,而编译NVIDIA模块时报错,不一定是你源码问题,先看看是不是没装linux-headers-$(uname -r)这个包。这个问题在全新Ubuntu系统上尤其常见,系统默认只有build-essential,没有对应的headers包,导致DKMS编译时找不到内核源码树。这个坑我踩过好几次,记住就好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询