ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

海光3490搭配RTX 5060:Ubuntu 22.04英伟达驱动安装排障

海光3490搭配RTX 5060:Ubuntu 22.04英伟达驱动安装排障 这台机器的配置单拿到手的时候我心里其实先打了个问号海光 3490 的板子配 RTX 5060两头都是新面孔——一边是国产 x86_64 兼容平台BIOS 里不少选项跟消费级主板长得不太一样另一边是 Blackwell 架构的 50 系显卡驱动门槛比 40 系高了一整档。把这两样塞进 Ubuntu 22.04能不能一次点亮、nvidia-smi能不能正常出图说实话我在动手之前是没有百分百把握的。这篇文章就是这次完整实操的记录从环境盘点、BIOS 选项、nouveau 屏蔽、驱动包选择一直写到黑屏排查、内核升级后驱动掉链子的补救以及nvidia-smi最后稳定出图之后的算力链路验证。如果你手上也是国产 x86_64 工作站配 RTX 5060或者你在 Ubuntu 22.04 上装英伟达驱动时遇到过装完黑屏No devices were found内核一升级驱动就消失这类问题这篇东西应该能省你不少时间。我会把每一步为什么这么做讲清楚包括那些常规教程里不写、但真正会卡住人的细节比如 PCIe BAR 分配、Secure Boot 下的 MOK 签名、open kernel module 到底要不要开。全程只用命令行和官方安装包不依赖任何第三方脚本方便你逐条复现。1. 这套组合为什么不是插上就能跑很多人对装显卡驱动的印象还停留在跑个脚本、重启、完事这套印象在十年前的单路消费级平台上基本成立但放到海光 3490 加 RTX 5060 这个组合上会立刻失效。原因不复杂一边是平台侧的固件与 PCIe 资源分配逻辑另一边是显卡侧对驱动版本的硬性要求两个变量同时踩坑的概率其实不低。先把这两头讲明白后面所有操作才有依据。1.1 海光 3490 平台的几个先天特点海光 3490 属于国产 x86_64 兼容处理器里比较常见的一档微架构带 Zen 血统指令集层面跟主流 x86 平台是兼容的所以 Ubuntu 22.04 的桌面版镜像可以直接装不需要任何特殊编译。但能装系统和能正常驱动一块 8GB 显存的新显卡是两件事中间隔着固件层的几个开关。第一个要留意的是Above 4G Decoding。RTX 5060 的显存是 8GB GDDR7加上显存映射和 BAR 空间整卡需要申请的 MMIO 地址空间相当可观。如果 BIOS 里 Above 4G Decoding 是关闭状态PCIe 设备只能在 4GB 以下的地址窗口里分配资源一块 8GB 显存的卡根本放不下。表现出来就是系统能认到设备型号但驱动加载时报 BAR 分配失败nvidia-smi直接给你一句 No devices were found。第二个是Resizable BAR。50 系显卡对 ReBAR 的依赖比前几代更明显开启后 CPU 可以一次性访问整块显存而不是按 256MB 窗口分批走对显存密集型的推理和渲染任务有实打实的收益。海光平台的部分主板默认是关的需要在 BIOS 的 PCIe 配置页里手动打开。第三个是CSM 与启动模式。CSM兼容性支持模块开着的时候系统可能以 Legacy 模式引导PCIe 资源分配走的是老路径跟新卡的地址需求容易打架。建议统一成纯 UEFI 引导CSM 关掉。这三点确认完平台侧的坑基本就填掉大半了。提示海光平台的 BIOS 界面跟常见的华硕、微星不太一样PCIe 相关选项有时藏在 Advanced 下的 PCI Subsystem Settings 或者 NBIO 子菜单里找的时候耐心一点别只翻第一层。1.2 RTX 5060 的驱动门槛顺便纠正一个流传很广的说法搜索热词里有一条是rtx5060显卡安装nvidia535驱动我实测下来的结论很直接535 驱动带不动 RTX 5060。这不是配置问题是驱动本身的架构支持范围问题。RTX 5060 用的是 Blackwell 架构核心英伟达在 Linux 侧对 Blackwell 的支持是从 570 系列驱动开始正式铺开的更早的 535、550 分支压根没有对应的设备 ID 和固件路径。你就算把 535 硬装上去驱动模块能编译、能加载但初始化阶段认不到核心最后的表现就是nvidia-smi报通信失败dmesg里能看到设备被识别但 probe 失败。截至我这次操作时的情况能稳定驱动 RTX 5060 的版本区间大致是这样的驱动分支对 RTX 5060 的支持配套 CUDA 版本说明535.x不支持CUDA 12.2无 Blackwell 设备 ID装了也白装550.x不支持CUDA 12.4同上属于过渡分支570.x支持起步版本CUDA 12.8首个正式支持 Blackwell 的稳定分支575.x / 580.x支持推荐CUDA 12.9 / 13.x修复了早期版本的若干电源管理与显示问题所以正确的思路是先别管网上说什么版本先去英伟达官网用显卡型号查驱动或者直接上 570 以上的分支。我这次选的是 580 系列的官方.run包原因在后面讲选型的时候会展开。另外还有一个容易被忽略的点Blackwell 及之后的显卡英伟达主推open kernel module开源内核模块官方安装包在检测到新架构时会建议你走这条路。实测下来走 open module 在这块卡上比走闭源 module 更省心后面安装环节我会给出具体参数。1.3 三条安装路线的取舍逻辑Ubuntu 22.04 上装英伟达驱动本质上就三条路各有各的适用场景没有绝对好坏关键看你后面要干什么。第一条是发行版仓库路线也就是ubuntu-drivers devices看推荐版本然后apt install安装。优点是省心依赖自动处理内核升级后一般能跟着走缺点是版本受仓库限制Ubuntu 22.04 官方仓库里压根没有能驱动 50 系的版本你得先挂上英伟达自己的 CUDA 仓库cuda-keyring才有新版本可选。第二条是英伟达官方.run安装包。优点是版本完全自主想装哪个装哪个自带 DKMS 支持安装日志完整便于排错缺点是需要手动屏蔽 nouveau、手动处理 Secure Boot 签名装错了卸载也稍微麻烦一点。我这次走的就是这条路因为海光平台上仓库路线的版本更新有明显滞后而.run包能让我精确控制版本号。第三条是容器化方案也就是主机只装基础驱动训练和推理环境全部塞进容器用nvidia-container-toolkit把显卡透进去。这条路适合多人共用一台机器、或者需要频繁切换 CUDA 版本的场景。我这次还是先把主机驱动打稳容器方案留到后面再上毕竟底座不稳上面搭什么都白搭。三条路的取舍逻辑一句话总结要省事就挂官方仓库走 apt要控版本就走.run要多环境隔离就走容器。三者的底座是同一个——内核模块必须跟当前内核匹配这一点绕不过去。2. 动手之前的盘点与准备驱动这东西装的过程可能就十分钟出问题排查能花一整天。把准备阶段的活儿做扎实等于把排查时间提前省掉了。这一节的三件事——信息采集、BIOS 确认、依赖准备——看起来琐碎但每一项在后面都可能救你一命。2.1 一份五分钟能跑完的信息采集清单正式动手之前先把下面这套命令跑一遍把结果记到一个文本文件里。后面无论出什么问题对照这份基线都能快速定位差异。# 系统与内核版本 lsb_release -a uname -r # 主板与固件信息 sudo dmidecode -t baseboard | head -20 sudo dmidecode -t bios | head -20 # 处理器信息 lscpu | head -20 # 显卡是否被 PCIe 正确识别 lspci -nn | grep -i nvidia lspci -vv -s $(lspci | grep -i nvidia | head -1 | cut -d -f1) | grep -i -E bar|lnk # 当前加载的显卡相关模块 lsmod | grep -E nouveau|nvidia # 安全启动状态1 表示开启0 表示关闭 mokutil --sb-state 2/dev/null || echo mokutil 未安装 # 当前使用的显示服务器 echo $XDG_SESSION_TYPE这几个输出里重点看三处。lspci -nn里的方括号会显示厂商 ID 和设备 ID确认是英伟达的设备而不是认成了别的类目lspci -vv里的 BAR 那几行会显示每个 BAR 被分配到了什么地址如果看到 Region 1: Memory at 基本就是 BIOS 里 Above 4G 没开mokutil --sb-state的结果决定后面要不要处理 MOK 签名这个环节很多人跳过结果装完重启驱动死活加载不上就是因为签名没过。顺手把lspci -vv里 Link 的速率和宽度也看一眼正常应该显示 16GT/s 或 32GT/s取决于插槽代数宽度 x8 或 x16。如果显示 x1 或者速率掉到 2.5GT/s说明卡的物理位置或者插槽本身有问题这种状态下装驱动也会有一堆怪毛病。注意mokutil默认可能没装sudo apt install mokutil补一下。另外如果dmidecode提示权限不足记得加sudo。2.2 BIOS 里那几个必须确认的开关进 BIOS 之后按下面的清单逐项确认。不同主板菜单路径有差异但关键词基本一致。Above 4G Decoding必须 Enabled。这是整卡显存能映射进地址空间的前提不开的话后面全是白忙。Resizable BAR / Re-Size BAR Support建议 Enabled。对显存访问性能有正向作用。CSM Support建议 Disabled走纯 UEFI 引导。IOMMU如果只是单机跑推理Enabled 或 Disabled 都能用如果后面要上虚拟化透传保持 Enabled同时在系统侧考虑加iommupt内核参数。PCIe 插槽代数与通道确认显卡插在直连 CPU 的插槽上别插到走芯片组的槽位后者带宽和延迟都吃亏。改完 BIOS 别急着装驱动先重启进系统再跑一次lspci -vv确认 BAR 有正常地址、Link 宽度正常这一步过了再往下走。我见过有人跳过这步直接装驱动装完黑屏回头查了半天才发现是 BIOS 没保存重启后设置全丢了。2.3 依赖包、内核头文件与内核版本选择Ubuntu 22.04 默认内核是 5.15 分支跑 RTX 5060 理论上可以但我建议直接升到 HWE 的 6.8 内核再用。原因有两点一是新内核对新 PCIe 设备的电源管理和错误恢复处理更完善二是英伟达的 open kernel module 在较新的内核 API 上编译成功率更高能少踩一些编译报错的坑。升级内核的命令很直接sudo apt update sudo apt install --install-recommends linux-generic-hwe-22.04 sudo reboot重启后uname -r确认内核已经是 6.8 分支。然后把编译环境一次性装齐这套是.run包安装的必备依赖sudo apt install build-essential dkms pkg-config libglvnd-dev \ linux-headers-$(uname -r) linux-modules-extra-$(uname -r) \ mokutil vim curl wget这里有个坑要提前说linux-headers-$(uname -r)必须和当前运行内核严格对应。如果你升级了内核但没重启uname -r还是旧版本头文件装了也是给旧内核装的重启后驱动编译照样失败。所以顺序一定是升级内核 → 重启 → 确认uname -r→ 装对应头文件 → 装驱动。另外如果机器原来装过任何形式的英伟达驱动哪怕是仓库里装的旧版本先彻底清掉再装新的别让两套东西混在一起sudo apt purge -y ^nvidia-.* ^libnvidia-.* ^cuda-.* sudo apt autoremove -y清完之后检查一下/etc/modprobe.d/目录里有没有残留的 nvidia 配置文件有的话删掉避免旧配置干扰新驱动。3. 完整安装实录从屏蔽 nouveau 到 nvidia-smi 出图准备工作做完正式进入安装环节。我把整个过程拆成四步屏蔽 nouveau、跑官方安装包、处理 Secure Boot 签名、三层校验。每一步我都会给出实际执行的命令和预期输出方便你对照。3.1 屏蔽 nouveau 并重建 initramfsnouveau 是 Linux 内核自带的开源英伟达驱动Ubuntu 装完系统默认就会加载它。问题是它和官方驱动不能共存——nouveau 一旦占住设备官方驱动的模块加载时会直接报 Nouveau kernel driver is currently in use 然后退出。所以第一步必须把它屏蔽掉。创建屏蔽配置sudo tee /etc/modprobe.d/blacklist-nouveau.conf EOF blacklist nouveau options nouveau modeset0 EOF第一行是黑名单第二行是关键——modeset0让 nouveau 不参与显示模式设置双保险。写完更新 initramfs 让配置在内核启动早期就生效sudo update-initramfs -u sudo reboot重启之后验证屏蔽是否成功lsmod | grep nouveau正常情况下应该什么输出都没有。如果还能看到 nouveau 模块说明它在 initramfs 里被提前加载了需要再加一道保险sudo bash -c echo blacklist nouveau /etc/initramfs-tools/modules sudo update-initramfs -u sudo reboot屏蔽这一步做完系统显示会退回到软件渲染分辨率可能变低、动画变卡这都属于预期行为装完驱动就恢复了别慌。3.2 官方.run安装包的完整参数与执行过程下载安装包。去英伟达官网驱动下载页选好显卡型号和系统拿到类似于NVIDIA-Linux-x86_64-580.xx.xx.run的文件。也可以直接拼下载地址格式固定把版本号和文件名替换掉就行wget https://us.download.nvidia.com/XFree86/Linux-x86_64/580.95.05/NVIDIA-Linux-x86_64-580.95.05.run chmod x NVIDIA-Linux-x86_64-580.95.05.run注意具体版本号以官网当前提供为准我写的这个号只是举例别照抄。装之前用nvidia-smi那个官网查询功能确认一下你的卡在支持列表里。安装前先切到文本模式避免图形界面占用设备导致安装器报错sudo systemctl set-default multi-user.target sudo reboot重启后你会进到纯命令行界面登录之后跑安装命令。参数这一段是整篇文章最值得记的地方sudo ./NVIDIA-Linux-x86_64-580.95.05.run \ --dkms \ --silent \ -mkernel-open \ -s逐条解释这些参数的作用--dkms注册到 DKMS 框架。这是最关键的一个参数意味着以后系统内核升级DKMS 会自动帮你重新编译驱动模块不用每次手动重装。省掉这个参数后面内核一升驱动就掉。-mkernel-open使用开源内核模块。RTX 5060 属于 Blackwell 架构英伟达官方推荐这条路实测下来编译成功率更高和较新内核的兼容性也更好。--silent和-s静默安装不弹交互界面。第一次装建议先不加这两个参数看看安装器给出的检测报告确认没问题后再用静默参数重跑。如果 Secure Boot 是关的安装器会直接编译安装如果开着它会问你要不要签名这时候会进入下一小节讲的 MOK 流程。整个编译过程大概一到三分钟取决于 CPU 性能。海光 3490 跑这个编译没什么压力我等了不到两分钟就完成了。安装器最后会提示 Installation has completed successfully看到这句话基本就成了一半。装完把默认启动目标切回图形界面sudo systemctl set-default graphical.target sudo reboot3.3 Secure Boot 下的 MOK 签名处理如果你的mokutil --sb-state显示 Secure Boot 是开启状态绝大多数品牌机和工作站默认开着那么没签名或者签名没注册的内核模块是加载不了的nvidia-smi会直接报 couldnt communicate with the NVIDIA driver。处理流程是这样的安装器在编译完成后会问你 Do you want to sign the NVIDIA kernel module with a key?选 Yes然后它会要求你设置一个密码——这个密码是临时的用于重启后注册密钥记住它就行不用太复杂但别忘。重启之后屏幕会先进入蓝色的 MOK Manager 界面这时候选Enroll MOK选Continue选Yes确认输入刚才设置的密码选Reboot。重启完成后用下面的命令确认密钥已经注册成功mokutil --list-enrolled | grep -i nvidia能看到英伟达相关的条目就说明签名链条打通了。这个环节是很多人卡住的地方——装完驱动重启界面进不去nvidia-smi报错回头查半天发现签名没注册。mokutil 界面只在重启时出现一次错过就得重新签名所以看到蓝色界面别手快跳过。3.4 安装结果的三层校验驱动装完不能只看nvidia-smi一条命令最好做三层验证确保显示、计算、内核模块三条链路都是通的。第一层内核模块加载状态lsmod | grep nvidia cat /proc/driver/nvidia/version前者应该能看到nvidia、nvidia_modeset、nvidia_uvm等一系列模块后者会输出驱动版本号和内核模块编译信息。第二层设备通信状态nvidia-smi预期输出会包含驱动版本、CUDA 版本、显卡型号、显存总量RTX 5060 应显示约 8151MiB、当前功耗和温度。如果这一条过了说明驱动和设备通信完全正常了。第三层图形渲染链路sudo apt install mesa-utils glxinfo | grep -E OpenGL renderer|OpenGL version输出里应该能看到你的显卡型号出现在 renderer 后面。如果显示的是 llvmpipe说明图形栈还在走 CPU 软件渲染驱动虽然装了但没被显示服务器用上这时候要检查 Xorg 配置或者显示管理器是否正常。三层都过了这台机器的驱动底座就算打稳了。4. 踩坑实录与排查手册装驱动这件事顺利的话半小时搞定不顺利的话一整天都在黑屏和命令行之间来回。这一节我把自己实际遇到的三个典型问题以及社区里高频出现的故障整理出来配上排查思路和速查表你可以直接拿来对照。4.1 装完重启黑屏只剩一个光标这是最高频的问题症状是系统能启动、能看到主板 Logo、之后屏幕变黑只有一个左上角的闪烁光标键盘还能响应切 CtrlAltF2 能进 TTY。排查顺序按下面走。先切到 TTYCtrlAltF2登录之后看内核日志dmesg | grep -i -E nvidia|nouveau|drm journalctl -b -p err | tail -50如果日志里有 NVRM: Xid 开头的报错说明是驱动初始化失败重点看 Xid 后面的错误码常见的有 Xid 62地址映射问题多半指回 BIOS 的 Above 4G、Xid 79设备从总线上掉了通常是供电或插槽问题。如果没有明显报错那大概率是显示服务器的问题。Ubuntu 22.04 默认走 Wayland而英伟达驱动在 Wayland 下的兼容性一直不算完美。临时方案是切回 Xorg在登录界面点右下角的齿轮图标选 Ubuntu on Xorg。永久方案是编辑/etc/gdm3/custom.confsudo vim /etc/gdm3/custom.conf # 取消这一行的注释 WaylandEnablefalse保存后重启问题通常就解决了。我自己这台机器就是切到 Xorg 之后一次点亮Wayland 下偶尔会有窗口闪烁。还有一种黑屏是 grub 阶段就黑连 TTY 都进不去。这种要在 grub 启动参数里加nomodeset临时进系统进去后再处理驱动。nomodeset会禁用内核级显示模式设置属于紧急手段不是长期方案。4.2nvidia-smi报 No devices were found这个报错跟黑屏不一定是同一类问题它比较特殊——系统能正常显示但nvidia-smi就是找不到设备。按下面顺序排查。第一步确认设备在总线上lspci | grep -i nvidia如果这条都没有输出那是硬件层面没认到卡检查供电、插槽、金手指跟驱动无关。第二步如果设备在看 BAR 分配sudo lspci -vv -s 01:00.0 | grep -A5 Region出现 Region 1: Memory at 或者 unassigned基本就是 BIOS 的 Above 4G Decoding 没开。这是海光平台上最容易踩的一个坑我这次第一次装的时候就是这个问题回头进 BIOS 打开 Above 4G重启就正常了。第三步如果 BAR 正常但nvidia-smi还是报错看驱动模块加载情况lsmod | grep nvidia dmesg | grep -i nvidia | tail -30模块没加载多半是签名问题回去看 MOK 那一节。模块加载了但 probe 失败看dmesg里具体的失败原因通常是固件版本或者设备初始化时序问题。第四步检查/dev/nvidia*设备节点是否生成ls -l /dev/nvidia*正常应该能看到/dev/nvidia0、/dev/nvidiactl、/dev/nvidia-uvm这几个节点。缺失的话可以手动跑sudo nvidia-modprobe -c 0 -u尝试生成但更根本的还是要解决模块加载问题。4.3 内核一升级驱动就掉链子这是仅次于黑屏的高频问题。症状是系统更新之后重启nvidia-smi报 couldnt communicate with the NVIDIA driverlsmod里找不到 nvidia 模块。根本原因是新内核的模块目录里没
返回列表