CMP 30HX 矿卡解锁 3D 渲染 — 完整技术文档
目标:让 NVIDIA CMP 30HX(TU116 矿卡,无视频输出)在 Linux 下获得 3D 渲染能力(OpenGL/Vulkan/CUDA)。
原理:官方驱动把矿卡标记为「计算加速器」并禁用图形功能,通过修改驱动的设备 ID 映射来解锁。
实测环境:Ubuntu 26.04 LTS,内核 7.0.0-28-generic,雷电 5 坞外接 CMP 30HX。
一、原理简述
CMP 矿卡(30HX/40HX/50HX/90HX 等)芯片与对应游戏卡相同,但 NVIDIA 在驱动里用设备 ID 把它们标记为
「processing accelerator」(PCI class 0x07),不提供 3D 加速、无视频输出。
本项目(dartraiden/NVIDIA-patcher)通过修改驱动内核模块
nv-kernel.o_binary 里的设备 ID 表,让驱动把矿卡当作可渲染的显卡处理,从而解锁 3D 加速。
关键限制(物理层面,无法通过软件绕过):
- 矿卡没有 HDMI/DP 视频输出接口 → 只能做「离屏渲染」,画面必须由核显或另一张显卡输出。
二、硬件/环境
| 项 | 值 |
|---|---|
| 主机 | 华硕无畏 Pro 15(Intel Ultra 9,Meteor Lake 核显 + RTX 4060) |
| 外接 | 雷电 5 坞(JHL9480)→ CMP 30HX(PCI ID 10de:2189) |
| 系统 | Ubuntu 26.04 LTS,内核 7.0.0-28-generic |
| 目标驱动 | NVIDIA 610.43.02(闭源内核模块) |
| 补丁工具 | NVIDIA-patcher 的 linux.sh |
三、前置条件
- 确认矿卡被系统识别:
lspci -nn | grep -i nvidia # 应看到:... 3D controller: NVIDIA Corporation TU116 [CMP 30HX] [10de:2189] - 关闭 UEFI Secure Boot(必须,否则未签名的 nvidia.ko 会被内核拒载):
- 重启进 BIOS(华硕 F2)→ Security/Boot → Secure Boot → Disabled
- 验证:
mokutil --sb-state输出SecureBoot disabled
- 安装编译依赖(通常已装):
gcc make+ 内核头文件sudo apt install -y build-essential linux-headers-$(uname -r)
四、完整步骤
步骤 1:下载官方驱动 + 补丁脚本
mkdir -p ~/nvidia-patch && cd ~/nvidia-patch
# 官方驱动(注意:必须带 Referer,否则 nvidia 的 CDN 返回 403)
curl -L -A "Mozilla/5.0" \
-e "https://www.nvidia.com/en-us/drivers/details/274183/" \
-o NVIDIA-Linux-x86_64-610.43.02.run \
"https://us.download.nvidia.cn/XFree86/Linux-x86_64/610.43.02/NVIDIA-Linux-x86_64-610.43.02.run"
# 补丁脚本 linux.sh(jsDelivr 镜像,国内可直连;GitHub 被墙时用它)
curl -o linux.sh \
"https://cdn.jsdelivr.net/gh/dartraiden/NVIDIA-patcher@610.43.03/linux.sh"
步骤 2:解包 + 打补丁
cd ~/nvidia-patch
chmod +x NVIDIA-Linux-x86_64-610.43.02.run
bash linux.sh
# 输出应包含:Found pattern: CMP — 1 occurrence(s) ... === SUCCESS ===
⚠️ 关键坑:版本匹配。官方 release 里那个
NVIDIA-Linux-x86_64-610.43.03.zip补丁包内部版本是
610.43.03,直接替换进 610.43.02 驱动会导致内核模块(03)与用户空间库(02)版本不一致,
nvidia-smi报Driver/library version mismatch。
正确做法是上面的linux.sh自己打补丁——只改设备 ID,版本保持 610.43.02。
步骤 3:卸载旧驱动
# 先看已装了什么
dpkg -l | grep -i nvidia | awk '{print $2}'
# 卸载(按实际包名调整)
sudo apt remove --purge -y \
nvidia-driver-595-open nvidia-kernel-common-595 nvidia-kernel-source-595-open
# 清理残留(含 i386 库和 firmware 包,否则也会导致版本错配)
sudo apt autoremove --purge -y
步骤 4:停图形服务 + 卸载模块(⚠️ 屏幕会黑屏,正常现象)
sudo systemctl stop gdm
sudo rmmod nvidia_drm nvidia_modeset nvidia 2>/dev/null
这一步屏幕会黑屏,是预期的——图形服务停掉了。别慌,继续往下跑,最后一步会自动重启恢复。
步骤 5:编译安装补丁驱动
cd ~/nvidia-patch/NVIDIA-Linux-x86_64-610.43.02
sudo ./nvidia-installer \
--no-x-check \
--no-nouveau-check \
--silent \
--kernel-module-type=proprietary
# 退出码 0 = 成功。--kernel-module-type=proprietary 必须加,否则装 open 模块补丁会失效
步骤 6:配置(blacklist nouveau + 禁用 GSP + 自动加载)
# blacklist nouveau(防止它抢卡)
sudo tee /etc/modprobe.d/blacklist-nouveau.conf >/dev/null <<'EOF'
blacklist nouveau
options nouveau modeset=0
EOF
# 禁用 GSP 固件(CMP 30HX/40HX 必须,否则游戏/计算不稳定)
sudo tee /etc/modprobe.d/nvidia.conf >/dev/null <<'EOF'
options nvidia NVreg_EnableGpuFirmware=0
EOF
# 开机自动加载
sudo tee /etc/modules-load.d/nvidia.conf >/dev/null <<'EOF'
nvidia
nvidia_uvm
EOF
# 重建 initramfs(Ubuntu 26.04 用 dracut)
sudo dracut --force
步骤 7:重启
sudo reboot
步骤 8:验证
# 模块加载
lsmod | grep nvidia
# 识别 + 版本正确(无 mismatch)
nvidia-smi
# 应显示 NVIDIA CMP 30HX,Driver 610.43.02,GSP Firmware: N/A
# Vulkan 识别为独立 GPU
vulkaninfo --summary | grep -iE 'deviceName|deviceType'
# deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, deviceName = NVIDIA CMP 30HX
# OpenGL 4.6 渲染器
sudo apt install -y mesa-utils
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo -B
# OpenGL renderer: NVIDIA CMP 30HX/PCIe/SSE2, version 4.6.0
五、使用方式(离屏渲染)
矿卡没视频口,用「核显显示 + 矿卡渲染」:
# OpenGL 程序强制走矿卡
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia <程序>
# Vulkan 程序自动选 DISCRETE_GPU(即矿卡)
<程序>
# CUDA 直接可用
nvidia-smi
六、踩坑记录(重要)
| # | 坑 | 现象 | 解法 |
|---|---|---|---|
| 1 | 补丁包版本错配 | Driver/library version mismatch |
用 linux.sh 自己打补丁,别用 release 的 zip |
| 2 | Secure Boot 开启 | Key was rejected by service / 模块拒载 |
BIOS 关闭 Secure Boot |
| 3 | nouveau 抢卡 | nvidia 模块加载失败 | blacklist + 重启 |
| 4 | GSP 固件 | CMP 卡游戏/计算不稳定 | NVreg_EnableGpuFirmware=0 |
| 5 | 残留 595 包 | 版本检测混乱 | apt autoremove --purge 清干净 |
| 6 | 官方驱动 403 | 直接下载被拒 | curl 加 Referer |
| 7 | 模块被占用 | 安装时 nvidia-drm in use |
先 stop gdm + rmmod |
| 8 | nouveau refcnt=-1 | rmmod 卡死 |
不硬刚,靠 blacklist + 重启 |
七、回滚
# 重新安装官方驱动(恢复未打补丁状态)
sudo apt update
sudo apt install -y nvidia-driver-595-open
sudo reboot
原始文件备份:
~/nvidia-patch/NVIDIA-Linux-x86_64-610.43.02/kernel/nvidia/nv-kernel.o_binary.backup(linux.sh 自动备份)~/nvidia-patch/nv-kernel.orig.6104302(手动备份的官方原始文件)
八、附录:一键自动化脚本
见同目录 unlock-30hx.sh。脚本会完成「下载 → 打补丁 → 卸载旧驱动 → 停 gdm → 安装 → 配置 → 自动重启」。
中间黑屏是正常现象,跑完自动重启恢复桌面。