硬件:4060外卡安装nvidia驱动(oculink)

结论(2026-10-07,NixOS)

外接 RTX 4060(OcuLink)在 max2(GPD G1619-04)上的 Linux 驱动问题已解决:内核模块与用户态驱动 595.71.05 装载成功,nvidia-smi 正常识别(44°C,无 NVRM 错误、无 Xid)。以下为驱动安装侧的定版事实;显示链路与多屏布局另见相关笔记,不在本文。

最终生效配置(/etc/nixos/hardware-configuration.nix,逐行均为实测定版,无浮动别名)

# 内核钉 6.18:linuxPackages_6_18 = 6.18.54 LTS(原因见 B02)
boot.kernelPackages = pkgs.linuxPackages_6_18;

# 驱动包:mkDriver 钉版 + 五个哈希(缺任一无法构建)
nvidiaPkg = config.boot.kernelPackages.nvidiaPackages.mkDriver {
  version = "595.71.05";
  sha256_64bit = "sha256-NiA7iWC35JyKQva6H1hjzeNKBek9KyS3mK8G3YRva4I=";
  sha256_aarch64 = "sha256-XzKloS00dFKTd4ATWkTIhm9eG/OzR/Sim6MboNZWPu8=";
  openSha256 = "sha256-Lfz71QWKM6x/jD2B22SWpUi7/og30HRlXg1kL3EWzEw=";
  settingsSha256 = "sha256-mXnf3jyvznfB3OfKd657rxv0rYHQb/dX/Riw/+N9EKU=";
  persistencedSha256 = "sha256-Z/6IvEEa/XfZ5F5qoSIPvXJLGtscYVqjFxHZaN/M2Ts=";
};
hardware.nvidia = {
  open = true;                               # 595 系强制 open 内核模块(B04)
  modesetting.enable = true;                 # nvidia_drm.modeset=1
  nvidiaSettings = true;
  powerManagement.enable = false;            # eGPU 热插拔(B08),不做运行时电源管理
  package = nvidiaPkg;
  prime = {
    offload.enable = true;
    reverseSync.enable = true;               # 4060 输出接进核显主屏(显示主题,另见笔记)
    amdgpuBusId = "PCI:102:0:0";
    nvidiaBusId = "PCI:1:0:0";               # = 0000:01:00.0 (B06)
  };
};
services.xserver.videoDrivers = [ "amdgpu" "nvidia" ];
services.hardware.bolt.enable = true;        # 雷雳授权,不装 bolt 设备不上 PCIe(坑5)

定版依据(逐条实测,B01–B08)

编号观测结论
B01/sys/module/nvidia/version = 595.71.05;驱动绑定 0000:01:00.0(driver=nvidia)内核模块装载成功并已接管设备
B026.18 长期链上 mkDriver 构建 nvidia-drm 正常;本机曾测的另一内核链编译失败必须 boot.kernelPackages = pkgs.linuxPackages_6_18(6.18.54 LTS),禁用浮动别名
B03nvidia-smi:NVIDIA GeForce RTX 4060, driver_version 595.71.05, 44°C;modinfo -F version nvidia = 595.71.05用户态与内核态版本一致
B04595 驱动链在 nixpkgs 里对非 open 模块断言不通过hardware.nvidia.open = true 对 595 不是可选项
B05mkDriver 五个哈希(64bit/aarch64/open/settings/persistenced)均可取到并被构建接受钉版 + 哈希 = 可复现构建
B06PCIe 枚举:0000:01:00.0 [10de:2882] type 00 class 0x030000 PCIe Legacy Endpoint,上游 root port 0000:00:01.1;nvidia 0000:01:00.0: enabling device (0000 -> 0003)按原生 PCIe 设备处理,无需 VFIO/直通
B0763.012 Gb/s available PCIe bandwidth, limited by 16.0 GT/s PCIe x4 link at 0000:00:01.1 (capable of 126.024 Gb/s with x8)当前链路 PCIe4 x4(内核自动打印;x8 为理论上限说明)
B08pciehp: Slot #0 AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surprise+ ...槽位热插拔已生效;配合 powerManagement.enable = false

踩坑要点(按主题归组)

  • 内核版本×驱动编译:禁用 linuxPackages_latest/linuxPackages 浮动别名——驱动升级时先看编译日志,失败就钉 LTS;本次定版 6.18(B02)。
  • open 模块:595 起 open 内核模块是唯一选择(B04);不再尝试 non-open。
  • 电源管理×热插拔:eGPU 场景 powerManagement.enable 保持 false(B08);运行态电源管理与热插拔/低功耗切换冲突。
  • 雷雳授权:services.hardware.bolt.enable = true 必须有(本机 TB 安全等级 user);否则设备根本不出现在 PCIe 上,驱动侧无从谈起。
  • BusID:prime.nvidiaBusId = "PCI:1:0:0"(= 0000:01:00.0;X 的 Device 段用同一 BusID)。
  • display 与配置落点:NixOS 下这类改动一律落在 /etc/nixos/hardware-configuration.nix(改前备份、build+预检后 switch,流程复用既有脚本)。

验证记录(2026-10-07 实测命令与结果)

命令结果
nvidia-smi --query-gpu=name,driver_version,temperature.gpu --format=csvNVIDIA GeForce RTX 4060, 595.71.05, 44
cat /sys/module/nvidia/version595.71.05
modinfo -F version nvidia595.71.05
journalctl -k -b | grep 0000:01:00.0PCIe 枚举 + enabling device (0000 -> 0003),无 NVRM 错误、无 Xid

边界(本文不覆盖)

  • 显示链路/多屏输出(reverse PRIME、GPU Screen NVIDIA-G0、两路菊花链场景)是另一主题,见「多屏扩展时内屏竖块乱序问题」(JRIPwT8qe7O2)与其相关笔记。