麒麟V10安装RTX5090驱动:No devices were found排查全攻略 第一次在一台麒麟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和couldnt communicate必须分清很多人搜问题的时候把这两个报错混在一起导致走弯路。我特意把它们拆开讲No devices were foundNVIDIA的驱动栈内核模块或用户态库已经能跑起来但在它扫描总线之后找不到它支持的设备。意思是驱动活着硬件没被它认出来。NVIDIA-SMI has failed because it couldnt 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 loadnouveau对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系列不支持太老设备表里根本没有Blackwell525/535不支持主流老卡能用新卡认不出545/550不支持RTX40系支持良好但还没加入Blackwell ID560/565部分支持要具体看版本推荐直接用570570及以上支持首次完整支持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) dkmsyum系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 modeset0 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 EndSectionBusID要通过实际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.16CUDA版本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报couldnt communicate或者干脆加载失败。解决方案有三种装驱动时顺手装dkms让它在内核升级时自动重编或者在系统里保留旧内核不升级内核包最省心的做法是升级完内核后主动重新跑一遍NVIDIA安装脚本加--no-x-check --dkms。我个人建议用dkms虽然第一次编译时间长一点但后面内核升级能省很多事。另外提醒一句在麒麟V10上尽量不要点自动安装全部安全更新之类的一键升级否则内核偷偷换了驱动一定会出问题到时候还得回头排查。最后写点个人体会。这次折腾下来我最深的感触是遇到新显卡在国产系统上认不到第一反应不要是怀疑硬件故障也不要反复卸载重装同一个老版本驱动。先花十分钟看PCI ID、看dmesg、查官方驱动支持矩阵往往能把问题定位到驱动版本太老不认识新卡这个唯一答案上。驱动版本一旦对了后面所有报错都会迎刃而解。这篇文章写到的每一条命令、每一个判断依据都是我从实际调试里一个字一个字敲出来的希望你少走点弯路。