Home
avatar

whohh

B85M + i5-4690 + HD4600 黑苹果排障实录:macOS 12 Monterey 从 7MB 到 1536MB 的 48 小时

手头有一台退役的技嘉 B85M-HD3-A,配的是 i5-4690 + HD4600 核显,128G SSD + 500G 机械盘。原本跑的 Windows 10,吃灰了一年多。

最近要搞 Flutter 开发,iOS 编译必须 macOS。买 Mac 是不可能买的,于是想起这坨老硬件——Haswell 平台在黑苹果圈子里是公认的”甜点老平台”,HD4600 在 macOS 12 Monterey 下半原生驱动。

说干就干。结果从装机到显卡正常,折腾了整整两天。这篇文章只记录真正踩过的坑和验证通过的方案,不写那些”理论上应该能行”的东西。


一、BIOS 里的第一课:DVMT 64M 不是玄学

进技嘉 BIOS,先把必须改的几项设好:

项目为什么
DVMT Pre-Allocated64MBHD4600 在 macOS 下就吃这个值,32M 画面撕裂,512M 直接起不来
CSM / LegacyDisabledOpenCore 要纯 UEFI
SATA ModeAHCImacOS 连 IDE 模式都懒得看一眼
VT-xEnabled不然虚拟机那一层直接废
Fast BootDisabled开了 OC 加载顺序会乱
XHCI / EHCI Hand-off都开USB 兼容性,不开装到一半键鼠失灵不是开玩笑的

DVMT 这个坑我必须单独说。

一开始我把 DVMT 设成 32MB(BIOS 默认值),心想 WEG 会自动处理。进系统后显存确实显示 1536MB,Dock 的毛玻璃也正常。但用了几分钟后桌面开始出现横条撕裂,开 Launchpad 动画掉帧到 5fps。

改 128MB 重启——直接 kIOFBNotifyDisplayModeWillChange 卡死。

改 512MB——连 OC 引导都进不去,黑屏,主板自检蜂鸣器没声。拔电池清 CMOS 才救回来。

回到 64MB,一切正常。

结论:HD4600 在 macOS 下 DVMT 只能是 64MB,多一分少一分都有不一样的妖蛾子。


二、platform-id 一个字符的恐怖:0D vs 0D

搞定 BIOS 后,开始搞 EFI。

我用 OpCore-Simplify 按 Haswell Desktop 生成了一份基础 EFI,SMBIOS 选 iMac16,2。这型号是 2015 款 21.5 寸 Retina iMac,原生就是 HD4600,理论上是最佳载体。

终端看显存:

system_profiler SPDisplaysDataType | grep "VRAM"

输出:

VRAM (Dynamic, Max): 7 MB

7MB。连菜单栏透明都不开。Dock 纯灰色方块。

我的第一反应:WhateverGreen 没加载?平台 ID 写错了?

挂载 EFI,用 ProperTree 打开 config.plist,看 DeviceProperties:

<key>AAPL,ig-platform-id</key>
<data>DQIjAA==</data>

这是 0D220003。OpCore-Simplify 默认生成了带独显的 Mobile HD4600 平台 ID。

桌面 HD4600 的正确 ID 应该是 0300220D

改过来:

<key>AAPL,ig-platform-id</key>
<data>AwAiDQ==</data>

清 NVRAM,重启。进桌面那一刻,Dock 的毛玻璃从灰色方块变成半透明,Genie 动画顺滑如丝。

system_profiler SPDisplaysDataType | grep "VRAM"

VRAM (Dynamic, Max): 1536 MB

一个字节顺序,7MB 到 1536MB 的距离。


三、手写 stolenmem 的诅咒

进系统后发现一个问题:Chrome 开了七八个标签页,切 Windows 的虚拟机窗口,显存偶尔掉到 31MB,然后桌面变幻灯片。

搜了一圈,StackExchange 和远景都有人建议手写 Framebuffer:

<key>framebuffer-stolenmem</key>
<data>AAAABAAAAA==</data>  <!-- 64MB -->
<key>framebuffer-fbmem</key>
<data>AACAAAAAA==</data>   <!-- 8MB -->
<key>framebuffer-patch-enable</key>
<data>AQAAAA==</data>

照抄上去。重启。

直接卡 kIOFBNotifyDisplayModeWillChange,一动不动。

进恢复环境,挂载 EFI:

diskutil mount disk0s1

删掉那三行 FB 参数:

plutil -convert xml1 /Volumes/EFI/EFI/OC/config.plist
vi /Volumes/EFI/EFI/OC/config.plist
# 删掉 framebuffer-stolenmem / framebuffer-fbmem / framebuffer-patch-enable 三个 key
plutil -convert binary1 /Volumes/EFI/EFI/OC/config.plist

重启,一切恢复正常。

后来才想明白:

DVMT 64MB → BIOS 预分配 64MB 给核显
WEG 检测到 DVMT 64MB → 自动计算 Framebuffer
手写 stolenmem=64MB → WEG 又分配 64MB → 64+64=128MB → 显存寻址冲突

关键逻辑:BIOS 设了 DVMT 64M,WEG 会自动算 FB,绝对不要手写。 手写是给 DVMT 改不了的情况用的(比如部分笔记本 BIOS 锁了 DVMT),台式机技嘉 BIOS 能随便改 DVMT,手写就是自找麻烦。


四、安装流程实录

EFI 验证通过后,实际安装反而顺利。

# 在另一台 Mac 上下载 Monterey 安装器
softwareupdate --fetch-full-installer --full-installer-version 12.7.6

# 写入 U 盘
sudo /Applications/Install\ macOS\ Monterey.app/Contents/Resources/createinstallmedia \
  --volume /Volumes/MyUSB

把验证过的 EFI 复制到 U 盘 EFI 分区,插老机器 F12 启动。

OC 菜单 → Install macOS Monterey → 磁盘工具抹 SSD → 选 SSD 安装。

重启了三次,每次记得从 U 盘 EFI 进。最后进桌面,系统信息确认:

  • 显卡:Intel HD Graphics 4600 1536 MB ✅
  • 声卡:ALC887 layout-id=3 ✅
  • 网卡:RTL8111 千兆 ✅

把 U 盘的 EFI 搬到内置 SSD:

diskutil mount disk0s1
cp -R /Volumes/MyUSB/EFI /Volumes/EFI/
diskutil unmount disk0s1

拔 U 盘,重启,从 SSD 直启成功。


五、最终配置速查

<!-- SMBIOS -->
<key>SystemProductName</key>
<string>iMac16,2</string>

<!-- 显卡:只要这一项 -->
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
<dict>
    <key>AAPL,ig-platform-id</key>
    <data>AwAiDQ==</data>  <!-- 0300220D -->
</dict>

<!-- boot-args -->
<key>boot-args</key>
<string>-v debug=0x100 keepsyms=1</string>

<!-- SIP 半关 -->
<key>csr-active-config</key>
<data>AwoAAA==</data>  <!-- 0x803 -->

<!-- SecureBootModel -->
<key>SecureBootModel</key>
<string>Default</string>

Kext 列表:Lilu → WhateverGreen → AppleALC (layout-id=3) → VirtualSMC → SMCProcessor → SMCSuperIO → RealtekRTL8111 → USBToolBox + UTBDefault


六、排查清单

以后同类问题,按这个顺序查:

  • BIOS DVMT = 64MB?32M 撕裂/512M 黑屏
  • platform-id 是 0300220D?不是 0D220003
  • DeviceProperties 有没有残留手写的 stolenmem/fbmem?
  • WhateverGreen.kext 在 Kernel → Add 里启用了吗?
  • OC 菜单 Reset NVRAM 后再试一次?
  • 声卡无声:layout-id 先试 3,不行依次试 1/2/5/7
  • U 盘 EFI 验证通过后,记得搬到内置 SSD 的 EFI 分区

七、最后的结论

Monterey 12 是 Haswell HD4600 在半原生驱动条件下最稳的一个系统。

不需要 OCLP、不需要 Root Patch、不需要 spoof 机型。SmBIOS 选 iMac16,2,BIOS 设对 DVMT,platform-id 填对,就够了。

从 7MB 到 1536MB,这条路我走了一遍,把坑都标注好了。如果你也有块 B85 + i5-4690 在吃灰,这套配置照抄就能用。


测试环境:技嘉 B85M-HD3-A / i5-4690 / HD4600 / macOS 12.7.6 Monterey EFI 版本:OpenCore 0.9.x | 工具链:OpCore-Simplify + OCAT 参考:司波图 B站视频 BV1RtqEBiEDr

Hackintosh OpenCore i5-4690 HD4600 Monterey B85 Haswell