Skip to content

黑苹果 P400 直通显示折腾全记录

🕒 Published at:

黑苹果 P400 直通显示折腾全记录 ​

日期: 2026-09-07 | 环境: PVE 8 + Debian 13 (KDE Plasma) + macOS Sonoma 14.8.9 VM 102 显卡: NVIDIA Quadro P400 (GP107 / Pascal / 2GB)


〇、最终成果速览 ​

项目状态说明
P400 直通 macOS✅hostpci0 直通, 2GB VRAM, HDMI 1080p@60Hz
WebDriver 驱动✅全部 4 个 kext 加载成功 (v10.3.3)
开机自动进系统✅OpenCore Timeout=2, 默认项已固定
VBIOS romfile✅GP107.rom (物理卡 nvflash 导出)
vga 配置⚠️必须保留 vga: vmware, 不能 vga: none

一、P400 驱动 (WebDriver) 折腾核心 ​

1.1 为什么 kext 装不上 ​

Sonoma 不再认 amfi_get_out_of_my_way=0x1 启动参数, kext 被拒:

kernelmanagerd: error: tried to insert an invalid codeful kernel extension in the restricted lookup table

1.2 正解 (缺一不可) ​

组件版本作用
AMFIPass1.4.1绕过 AMFI 限制, 让旧 kext 能加载 (手动加进 Kernel>Add, OCLP 自动逻辑因 iMacPro1,1 跳过了)
Lilu1.7.2必须 ≥1.6.8 才能带 AMFIPass
WhateverGreen1.7.0配合驱动
csr-active-configff0f0000 (4字节)注意必须精确 4 字节, 多了尾部字节会破坏 SIP 解析

1.3 Kernel>Add 条目必填字段 (踩坑) ​

AMFIPass 条目缺失 PlistPath 会导致 OpenCore 启动直接报错:

Injected kext 2() has invalid info

必须: PlistPath=Contents/Info.plist + Arch=Any + MinKernel=20.0.0

1.4 验证成功的日志标志 ​

NVDAStartupWeb: Web (set by nvda_drv_vrl)
NVDAGP100HAL loaded and registered
GeForceWeb v10.3.3

系统报告显示: NVIDIA Quadro P400, 2GB VRAM, Main Display: Yes


二、VBIOS / GOP 折腾 (血泪教训) ​

2.1 重大发现: P400 VBIOS 一直都有 GOP! ​

用 rom-parser (权威工具) 验证三个文件全部带 EFI 段:

$ ./rom-parser GP107.rom
Valid ROM signature found @fa00h, PCIR offset 1ch
    PCIR: type 3 (EFI), vendor: 10de, device: 1cb3, class: 030000
    EFI: Signature Valid, Subsystem: Boot, Machine: X64
    Last image

⚠️ 教训: 之前用 Python 自写解析 PCIR+13 判断类型, 结论是"无 GOP"——错的! rom-parser 才是正确判断工具。差点去刷 BIOS / 注入 GOP, 白折腾。

2.2 三个 ROM 文件对比 ​

文件来源大小MD5EFI段
GP107.romWin11 GPU-Z 提取2749442c3a5d2e...✅ type 3
262039.romTechPowerUp274944e3287604...✅ type 3
GP1071.romWin11 nvflash --save274944ac1a1122...✅ type 3

nvflash 从物理卡导出的最完整, 目前推荐用它 (GP1071.rom 已在 PVE /usr/share/kvm/)

2.3 vga: none 为什么黑屏 (关键认知) ​

因为 QEMU 在 vga: none 时没有任何虚拟显卡给 VNC 提供画面源 → VNC 必然黑屏!

  • VNC 黑屏 ≠ 系统没启动
  • P400 物理 HDMI 可能有画面, 但 VNC 永远看不到
  • 判断系统是否启动要看 SSH / tap 流量, 不能看 VNC

2.4 正确显示配置 (最终形态) ​

vga: vmware                    ← 必须保留! VNC 靠它出画面
hostpci0: 0000:01:00,x-vga=1,romfile=GP1071.rom

Proxmox 教程作者也确认: 禁用 vmware 显示会导致 VM 无法启动。 想真正 vga:none 独立显示, 需要物理显示器直连 P400 + 放弃 VNC, 折腾风险高, 不建议。


三、开机自动启动配置 ​

3.1 配置项 ​

Misc > Boot > Timeout = 2        (2 秒后自动启动默认项)
Misc > Boot > ShowPicker = true  (保留菜单兜底)
Misc > Security > AllowSetDefault = true  (允许 Ctrl+Enter 固定默认项)

3.2 设置默认项的关键操作 ​

在 OpenCore 菜单里:

  • 方向键选中 Macintosh HD
  • Ctrl+Enter = 固定为默认项 + 立即启动 (Enter 只是临时启动一次)

3.3 Timeout 校准血泪史 ​

Timeout结果
5太快, 来不及按 Ctrl+Enter
20用于首次设置默认项
30从容设置默认项 (最终设置时用的)
2最终值, 默认项固定后自动进

3.4 失败还原流程 (救急) ​

SSH 进 macOS:
  diskutil mount disk0s1
  cp /Volumes/EFI/EFI/OC/config.plist.bak-t2 /Volumes/EFI/EFI/OC/config.plist
  diskutil unmount /Volumes/EFI

PVE 侧备用 (VM 起不来时):

qm stop 102
mount -t vfat -o rw,loop,offset=20480,sizelimit=209715200 /dev/pve/vm-102-disk-2 /mnt/efi
# 改完 umount

完整备份: /tmp/EFI-current-20260907-030508.tar.gz (MD5 517f03ee03a3c8925a57822ee3afaf53)


四、已尝试但放弃的路线 (记录防重复) ​

路线结论
EnableGOP (vBiosInsert.sh + EnableGop.efi)只能替换已有 GOP 段, 不能凭空创建; BaseTools EfiRom 是 Mach-O 跑不了
NVIDIA 官方 UEFI Update Tool官方支持列表只有 GeForce, Quadro 需联系 OEM
GOP_Updater (YTEC-info)仓库基本只有 README, 无成品工具
vga: noneVNC 必然黑屏, 无虚拟画面源, 死路
刷写物理 BIOS零收益 (VBIOS 本来就有 GOP), 高风险可能砖卡

五、当前 VM 102 最终配置 ​

hostpci0: 0000:01:00,x-vga=1,romfile=GP1071.rom
vga: vmware
bios: ovmf
boot: order=virtio1;hostpci0;net0;usb0;usb1
boot-args: keepsyms=1 -v ngfxgl=1 ngfxcompat=1 nvda_drv_vrl=1 amfi_get_out_of_my_way=0x1
csr-active-config: ff0f0000 (4字节)
nvda_drv: 1
Timeout: 2 | ShowPicker: true | AllowSetDefault: true

六、常用命令速查 ​

bash
# SSH
ssh macos            # 192.168.31.109 root/123456
ssh pve              # 192.168.31.225 root/123456
ssh win11            # 192.168.31.201

# PVE 管理
qm start 102 / qm stop 102 / qm status 102
qm set 102 -hostpci0 "0000:01:00,x-vga=1,romfile=GP1071.rom"

# VBIOS 检查 (rom-parser 编译自 https://github.com/awilliam/rom-parser)
gcc -o rom-parser rom-parser.c
./rom-parser /usr/share/kvm/GP1071.rom

# macOS EFI 编辑
diskutil mount disk0s1
/usr/libexec/PlistBuddy -c "Set :Misc:Boot:Timeout 2" /Volumes/EFI/EFI/OC/config.plist
plutil -lint /Volumes/EFI/EFI/OC/config.plist
diskutil unmount /Volumes/EFI

七、给未来的自己 ​

  1. VBIOS 判断 GOP 用 rom-parser, 别自己写解析 (吃过大亏)
  2. VNC 黑屏先查 SSH / tap 流量, 别急着下结论
  3. 改 EFI 前必备份, 失败 30 秒还原
  4. Timeout 先用大值设置默认项, 再改小
  5. P400 完美形态 = vga: vmware + romfile + Timeout=2 自动进, 别再折腾显示