☰
麒麟V10安装RTX5090驱动:No devices were found排查全攻略
2026/10/19 9:47:18 网站建设 项目流程

第一次在一台麒麟V10桌面操作系统的机器上插上RTX5090,开机、进桌面、打开终端,一切看起来都很正常。等你敲下nvidia-smi想确认显卡状态时,屏幕上冷不丁弹出一句No devices were found,很多人第一反应是显卡坏了、PCIe插槽松了,或者这个系统压根不认新卡。其实这个问题在驱动层面有非常明确的解法,而且一旦搞懂了根因,整套排查思路可以复用到其他新显卡、新硬件在旧系统上认不到的场景里。

我这次把从报错到跑通的全过程完整整理出来,包括现象定位、根因分析、驱动安装、专项排雷和装完之后的长期维护,适合所有在国产Linux桌面上折腾新N卡的人。全文不绕弯子,直接给结论、给命令、给判断依据,你照着做基本能一次过关。

1. 问题现场回放:新显卡插上后,系统"看得见"却"用不了"

我手上的机器配置不算复杂:主板、电源、一张RTX5090,系统是麒麟V10桌面操作系统。装好显卡、接上DP线、通电开机,毫不夸张地说,开机画面、登录界面、桌面环境全都正常,分辨率和刷新率也没毛病。这时候绝大多数人会觉得显卡已经"被系统认到了",但实际这是个错觉——桌面能显示,只是说明系统通过某种显示输出路径把画面送到了屏幕上,跟NVIDIA驱动是否接管GPU完全是两码事。

真正让我意识到不对的,是打开终端执行那一串熟悉的命令:

$ nvidia-smi No devices were found

没有任何GPU列表,没有驱动版本号,没有显存容量,只有一句冷冰冰的报错。我用nvidia-settings再试,一样。这就说明NVIDIA的用户态工具能跑起来,说明驱动栈至少存在,但它在整个PCI设备列表里找不到一个它能认出来的NVIDIA GPU。

1.1 第一次跑 nvidia-smi 时看到了什么

为了让你对现象有更准确的判断,我把几个关键时间点的状态列出来:

检查项当时的状态
开机画面正常,能出logo
桌面登录正常,进入UKUI桌面无压力
显示输出DP线接在RTX5090上,1920x1080分辨率正常
lspci检查能看到NVIDIA的PCI设备条目,但名称显示为通用描述
nvidia-smi报 No devices were found
/dev/nvidia*设备节点不存在

这里有个非常误导人的点:显示器能出画面 ≠ NVIDIA驱动正常工作。在驱动没装好、甚至完全没有专有驱动的情况下,显示器照样可以亮——要么是nouveau开源驱动在撑场面,要么是固件framebuffer直接接管了输出。新显卡尤其如此,因为它太新了,nouveau连完整加速都做不到,但基本显示输出还是能凑合。

所以如果你也遇到"桌面正常但nvidia-smi不认识卡",先别怀疑显卡坏了,大概率是驱动层的问题,而且是"现有的驱动太老,不认识这张新卡"的问题。

1.2 "No devices were found"和"couldn't communicate"必须分清

很多人搜问题的时候把这两个报错混在一起,导致走弯路。我特意把它们拆开讲:

  • No devices were found:NVIDIA的驱动栈(内核模块或用户态库)已经能跑起来,但在它扫描总线之后,找不到它支持的设备。意思是"驱动活着,硬件没被它认出来"。
  • NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver:内核模块根本没加载成功,或者模块都没装上,用户态和内核态之间完全没有通信通道。

这两种报错的排查方向完全不同。前者优先怀疑驱动版本不够新、GPU ID不在支持列表里;后者优先怀疑模块编译失败、Secure Boot拦截、nouveau占用了设备。文章后面会把两边的坑都讲到,但你先记住这个区分,能省掉大量无用功。

2. 先别急着装驱动:三分钟确定问题边界

遇到"No devices were found"之后,最忌讳的就是直接跑去官网下一大包驱动开始装。磨刀不误砍柴工,先用三条命令把问题边界划清楚,再决定下一步干什么。

2.1 第一步:看lspci,确认PCI层到底认不认卡

$ lspci | grep -i nvidia 01:00.0 VGA compatible controller: NVIDIA Corporation Device 2b85 01:00.1 Audio device: NVIDIA Corporation Device 22c0 01:00.2 USB controller: NVIDIA Corporation Device 22c2

注意看,这里没有显示"GeForce RTX 5090"这种完整名字,只写了"NVIDIA Corporation Device 2b85"。别慌,这很正常。lspci显示出来的设备名来自一个本地的PCI ID数据库,如果数据库没更新到最新,新卡就只会显示一个原始设备ID。关键是:PCI层能看到这个设备,说明硬件链路、供电、插槽都没问题。

我还会顺手看一眼它的内核驱动状态:

$ lspci -nnk -d 10de: 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2b85] Subsystem: NVIDIA Corporation Device [10de:16bb] Kernel driver in use: nouveau Kernel modules: nouveau

看到"Kernel driver in use: nouveau"了吗?这说明目前是nouveau开源驱动在管理这张卡。问题已经很清楚了:设备在PCI层被发现了,但还没有NVIDIA专有驱动介入。

2.2 第二步:看dmesg,确认内核里有没有报错

$ dmesg | grep -i -E "nvidia|nouveau|nvrm"

这一步主要看两件事。第一,nouveau有没有尝试加载这张卡、加载后有没有报错;第二,如果之前装过NVIDIA驱动,内核日志里有没有留下模块加载失败的记录。

常见的几种输出:

  • nouveau ... unknown chipset或者failed to load:nouveau对Blackwell新卡支持很有限,报错不奇怪。
  • 大段NVRM相关日志:说明NVIDIA专有模块曾经尝试加载。
  • 什么都没有:说明NVIDIA模块根本没被加载,问题可能出在驱动根本没装上,或者被Secure Boot挡了。

在我这次的情况里,dmesg里全是nouveau的各种不认识新架构的报错,专有驱动的日志影子都没有。

2.3 第三步:看/dev/nvidia*节点有没有生成

正常情况下,只要NVIDIA专有驱动接管了设备,系统里就会出现这些设备节点:

$ ls /dev/nvidia* /dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm /dev/nvidia-modeset

如果这个列表是空的,说明驱动内核模块没有初始化GPU。这一步的判断价值在于:就算你装了驱动但节点没生成,那也不是用户态工具的问题,而是内核模块压根没跟硬件握手成功。

到这里,问题边界已经很清楚了:硬件被PCI层正常识别,内核有nouveau占用,NVIDIA专有驱动没接管,设备节点没生成,nvidia-smi自然报No devices。接下来要解决的就是为什么驱动没接管、以及怎么让正确版本的驱动接管。

3. 根因锁定:老驱动生态撞上新架构

排查到这一步,我开始意识到这不是操作问题,而是版本匹配问题。麒麟V10自带的内核和仓库里的驱动,大概率赶不上RTX5090的发布时间线。下面把这条逻辑链完整捋一遍。

3.1 Blackwell需要的驱动版本门槛

RTX5090用的是Blackwell架构,计算能力版本是sm_120。对于NVIDIA驱动来说,它内部维护着一张"我认识哪些GPU"的设备表,这张表是编译进驱动里的。驱动版本越老,认识的新卡就越少。

我查了一下官方支持矩阵,结论很明确:RTX5090需要R570及以上的Linux驱动分支才被正式支持。我装的时候拿到的版本号是570.86.16。对照表大致长这样:

驱动分支是否识别RTX5090备注
470系列不支持太老,设备表里根本没有Blackwell
525/535不支持主流老卡能用,新卡认不出
545/550不支持RTX40系支持良好,但还没加入Blackwell ID
560/565部分支持要具体看版本,推荐直接用570+
570及以上支持首次完整支持RTX5090/5080桌面卡

理解这里的关键点:驱动加载成功 ≠ 驱动认识你的卡。早期驱动模块加载到内核里之后,遍历PCI总线时看到10de:2b85这个设备ID,在自己的支持列表里搜不到,就会直接跳过。表现出来就是模块活着,但nvidia-smi报告No devices were found。

这跟"驱动装失败了"是完全不同的两码事。我见过不少人反复卸载重装同一个老版本驱动十几次,累死也解决不了,因为方向就不对。先确认驱动版本支不支持你的卡,比任何安装技巧都重要。

3.2 麒麟V10仓库里的驱动指望不上

有一件事必须摆在前面说清楚:不要寄希望于直接apt install nvidia-driver或者yum install nvidia-driver就完事。国产Linux发行版的软件仓库更新节奏通常比较保守,里面的NVIDIA驱动大概率停留在一两年前的水平。放在老显卡上没问题,但放到RTX5090这种新架构卡上,仓库里那点旧驱动就是刚说的"加载成功但不认识硬件"。

我在V10上检查过,仓库里能拿到的驱动版本离R570差了很远,所以果断放弃仓库方案,直接从NVIDIA官网下载独立的runfile安装包。这也是我给所有类似情况下的建议:新硬件装老系统,优先用上游官方驱动包,而不是发行版仓库里的旧版。

3.3 另一个容易忽视的变量:驱动和X服务的配合

"This is especially true on desktop systems." 如果你的机器装了桌面环境,还会遇到另外一层问题——X服务(或者Wayland合成器)在启动时也要加载显示驱动。哪怕内核里的NVIDIA模块已经正常工作,如果Xorg还是用modesetting驱动去管这张卡,分辨率、色彩位深都可能不对,甚至直接黑屏。

麒麟V10桌面默认走X11,所以后续需要关注/etc/X11/xorg.conf里的配置,必要时用nvidia-xconfig生成独立的配置文件。这个放到驱动安装章节一起说。现在先把逻辑理顺:内核驱动 + 用户态工具 + X显示驱动,三个层面必须同时更新到位,才能真正把这张卡用起来。

4. 正确安装路径:先用官方run文件装新驱动,再谈调优

问题根因清楚了,后面就是实操。这一节我会把整个安装流程按顺序铺开,每一步都告诉你为什么这么干,避免你跳过某个不起眼但关键的步骤,最后卡在一个奇怪的地方。

4.1 先确认V10是apt系还是yum系

麒麟V10有个容易踩坑的地方:它有基于Debian/Ubuntu的apt系,也有基于CentOS/RHEL的yum系,命令不能混着用。先看是哪个体系:

$ cat /etc/os-release

输出里如果写着"Debian"相关字样,就用apt;如果是"CentOS"或者"rhel"字样,就用yum。这决定了你装依赖包时用哪套包管理器。我这次碰到的机器是apt系,但网上yum系的V10也不少,别拿到命令就复制粘贴。

4.2 准备内核头文件和编译环境

NVIDIA的runfile安装方式跟Windows驱动完全不同,它不是解压复制就完事,而是在你机器上现场编译内核模块。所以必须保证当前内核对应的头文件已经装好,否则百分百编译失败。

apt系:

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

yum系:

sudo yum install -y gcc make kernel-devel-$(uname -r) dkms

装完验证一下头文件路径是否存在:

$ ls /usr/src/kernels/$(uname -r)/ # yum系 $ ls /usr/src/linux-headers-$(uname -r)/ # apt系

这一步经常出幺蛾子:镜像源里找不到当前内核版本的头文件。此时不要硬扛,优先确认系统能不能更新到源里已有头文件的内核,或者直接挂载对应版本的ISO作为本地镜像源。内核头文件和运行内核版本不匹配时,NVIDIA安装器一定会报"The kernel module failed to build"之类错误。

4.3 屏蔽nouveau,避免两个驱动抢设备

前面lspci看到nouveau占用了这张卡。如果不把nouveau禁掉,NVIDIA专有驱动加载时就会跟它起冲突,结果往往是谁都干不好。屏蔽办法是创建黑名单文件:

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

然后重建initramfs让黑名单在下次启动时生效:

# apt系 sudo update-initramfs -u # yum系 sudo dracut --force

这个步骤不做,后面装驱动会装得稀里糊涂——NVIDIA模块明明装上了,但硬件一直被nouveau占着,结果还是No devices或者设备节点消失。

4.4 切换到多用户模式再装驱动

桌面环境下装NVIDIA驱动,一个常见问题是X服务正在使用GPU,安装器在初始化阶段可能会因为"显卡正在被占用"而失败。最干净的办法是先切到纯命令行模式:

sudo systemctl set-default multi-user.target sudo reboot

重启之后你会直接进到命令行登录界面,没有桌面环境。装完驱动、验证通过之后再切回来:

sudo systemctl set-default graphical.target

这一步能省掉很多奇怪的"安装成功了但一进桌面黑屏"的问题。

4.5 下载并运行官方runfile

用浏览器或者另一台机器从NVIDIA官网Linux驱动页面下载对应RTX5090的驱动。以我当时拿到的版本为例,文件名类似NVIDIA-Linux-x86_64-570.86.16.run。把文件放到家目录下,然后:

chmod +x NVIDIA-Linux-x86_64-570.86.16.run sudo ./NVIDIA-Linux-x86_64-570.86.16.run --no-x-check

安装器会走一遍检查流程,然后开始编译内核模块。整个编译过程根据CPU性能需要几分钟到十几分钟不等。中间可能会问你要不要运行nvidia-xconfig,建议选是,让它帮你生成Xorg配置。装完后别急着重启,先看一眼模块信息:

$ modinfo nvidia | grep -E "filename|version" filename: /lib/modules/5.10.0-x86_64-generic/updates/dkms/nvidia.ko version: 570.86.16

模块存在、版本对,再重启。

4.6 重建xorg.conf

重启之前,或者重启后发现桌面起不来,就手动检查一下X配置。nvidia-xconfig生成的配置文件通常长这样:

Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BusID "PCI:1:0:0" Option "AllowEmptyInitialConfiguration" "true" Option "NoLogo" "true" EndSection

BusID要通过实际PCI位置填,可以从lspci输出推导。比如lspci里显卡在01:00.0,那xorg.conf里就写PCI:1:0:0,注意格式和lspci略有不同。如果显示器接在这张新卡上,但X起不来,多半就是少了这一段。

假如你装完驱动重启后直接进不了图形界面,在命令行登录后执行:

pkill X sudo nvidia-xconfig sudo systemctl start display-manager # 或者 startx

把显示管理器拉起来,通常能救回来。

5. 专项排雷:装完驱动重启后依然No devices,逐个排除

实操中最折磨人的情况是:明明装的是新驱动,nvidia-smi还是报"No devices were found"。如果你正好卡在这一步,按照下面的排查链路走一遍,基本能定位。

5.1 第一梯队排查命令

重启后,先别慌,按顺序执行以下命令:

$ cat /proc/driver/nvidia/gpus/*/information

如果这个文件存在,说明内核模块已经认到GPU了,还可以看到类似"GPU: 10de:2b85"的信息。此时驱动模块没问题,问题多半在用户态工具版本偏老或者配置没刷新。如果文件不存在,继续往下查:

$ dmesg | grep -i nvidia $ dmesg | grep -i nvrm

重点关注这几类日志:

  • 出现NVRM相关的初始化信息:模块加载了,但需要看有没有报某个GPU被跳过。
  • 出现No NVIDIA GPU found之类的字眼:驱动遍历设备表时没匹配上。
  • 完全没有NVRM日志:模块压根没加载,查lsmod看模块状态。

再看一眼模块是否真的在跑:

$ lsmod | grep nvidia nvidia_drm 69632 0 nvidia_modeset 1138688 0 nvidia_uvm 1421312 0 nvidia 56762368 0

如果这四个模块都在,但/proc/driver/nvidia/gpus下面空无一物,那基本可以断言:驱动版本不够新,设备ID不在支持表里。这种情况下的唯一解法是再去官网拉一个更新版本的驱动重新装,而不是在系统配置层面找问题。

5.2 Secure Boot和nouveau残留这两块遮羞布

接下来查两个非常经典的干扰项。

第一个是Secure Boot。如果固件开启了Secure Boot,而NVIDIA内核模块没有经过签名注册,模块会被内核直接拒绝加载。检查方法:

$ mokutil --sb-state SecureBoot disabled

如果显示enabled,你有两条路:要么在固件里关掉Secure Boot,要么用mokutil --import导入模块签名。对于大多数人来说,在自己可控的机器上直接关掉更快。

第二个是nouveau残留。我之前禁了nouveau,但重启后如果lspci显示驱动还是nouveau,说明黑名单没生效。原因可能是initramfs没有正确重建,或者有其他模块依赖把nouveau重新拉起来了。检查:

$ lspci -nnk -d 10de: | grep "Kernel driver in use" Kernel driver in use: nvidia

如果显示的还是nouveau,回第4.3节重新做一遍黑名单和initramfs重建。千万不要嫌麻烦,这个问题我见得太多了。

5.3 装了多个驱动版本导致的"四不像"状态

还有一种隐蔽情况:系统里残留着多个NVIDIA驱动版本。apt系和yum系的包管理器可能装过一套仓库版驱动,后来你又手动跑过runfile,两组文件混在一起,模块和工具链版本对不上。

这时候不要继续打补丁,直接全部卸掉重来:

# 先跑官方卸载脚本(如果存在) sudo /usr/bin/nvidia-uninstall # 再清理发行版包装的驱动 # apt系 sudo apt remove --purge -y '^nvidia-.*' # yum系 sudo yum remove -y nvidia* # 手动清理残余模块和文件夹 sudo rm -rf /usr/lib/xorg/modules/drivers/nvidia_drv.so sudo rm -rf /lib/modules/$(uname -r)/updates/dkms/nvidia* sudo rm -f /etc/modprobe.d/nvidia*.conf

然后重新走一遍第4节的正常安装流程。干净环境下的安装成功率比打补丁高出一个量级。

6. 验证通过后的落脚点:这不是终点,还有一堆后续坑

经过以上操作,nvidia-smi终于吐出了正常的GPU信息,那一刻是真的舒坦。但装好驱动只是开始,后面还有几个高频出现的坑值得提前打疫苗。

6.1 nvidia-smi跑通后的正常样貌

能看到类似下面的输出,才叫真正跑起来了:

+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.86.16 Driver Version: 570.86.16 CUDA Version: 12.8 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | 0 GeForce RTX 5090 Off | 00000000:01:00.0 On | N/A | | 30% 45C P0 N/A / 575W | 1637MiB / 32702MiB | 2% Default | +-----------------------------------------------------------------------------------------+

32GB显存赫然在列,驱动版本号570.86.16,CUDA版本12.8,这时的系统才算真正拥有了这张卡的计算能力。

6.2 CUDA版本同样卡脖子

驱动装上只解决了一半问题。如果你要跑AI推理、模型训练这类负载,还需要装CUDA工具包。RTX5090的Blackwell架构要求CUDA 12.8及以上,太老的CUDA运行时一样会报0 GPU。装完CUDA后记得验证:

$ nvcc -V $ python -c "import torch; print(torch.cuda.is_available())"

很多人在驱动正常之后卡在这一步,跑PyTorch发现还是CPU Only,原因就是PyTorch自带的CUDA运行时版本太旧。所以看驱动支持矩阵的时候,顺手把CUDA版本支持矩阵一起查了。

6.3 内核升级会让驱动失效

这是个几乎每个人都会踩的坑。NVIDIA的runfile驱动是绑定内核版本编译的,一旦系统升级内核,旧内核模块就废了。表现就是重启后nvidia-smi报couldn't communicate,或者干脆加载失败。

解决方案有三种:装驱动时顺手装dkms,让它在内核升级时自动重编;或者在系统里保留旧内核,不升级内核包;最省心的做法是升级完内核后主动重新跑一遍NVIDIA安装脚本加--no-x-check --dkms。我个人建议用dkms,虽然第一次编译时间长一点,但后面内核升级能省很多事。

另外提醒一句,在麒麟V10上尽量不要点"自动安装全部安全更新"之类的一键升级,否则内核偷偷换了,驱动一定会出问题,到时候还得回头排查。


最后写点个人体会。这次折腾下来,我最深的感触是:遇到新显卡在国产系统上认不到,第一反应不要是怀疑硬件故障,也不要反复卸载重装同一个老版本驱动。先花十分钟看PCI ID、看dmesg、查官方驱动支持矩阵,往往能把问题定位到"驱动版本太老不认识新卡"这个唯一答案上。驱动版本一旦对了,后面所有报错都会迎刃而解。这篇文章写到的每一条命令、每一个判断依据,都是我从实际调试里一个字一个字敲出来的,希望你少走点弯路。

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

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

立即咨询