黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)
最近在折腾我的X1 Carbon黑苹果,我的型号是X1 Carbon Gen4,也就是X1C 2016,配置如下:
由于硬件平台的高度通用性。我是用别人做好的T460s OpenCore EFI和几个X1C EFI混搭,成功安装了MacOS Catalina 10.15.6,并在系统内直接升级为了10.15.7。
遇到的问题
基本上系统可用性很高,但在我使用自己的4K显示器时,发现了很不寻常的问题:
1.连上显示器后,需要开关一下笔记本的盖子,不然内屏会一直黑屏,这个问题我倒是无所谓,而且看了下没人修复,无所谓了。
2.连上自己DIY的4K显示器后,最高输出只能到2K,而且画面非常糊。一开始以为是EDID的问题,但连上正常厂家的4K显示器后,效果一样,看来和EDID关系不是很大。
于是就开始了排坑之路,到处查资料,试了好多方法还是不行,我就把填坑之路一步步记录下来吧。
(1)EDID修正/Hackintool定制外部显示接口法(失败)
握手参考了这篇教程,由于smzdm的链接系统太反人类了,你可以直接搜索《使用 Hackintool 修复黑苹果 Intel 核显驱动外部显示器紫屏问题》,Sukka大大的这篇文章对于解决hackintosh的其他显示问题很有用:
https://blog.skk.moe/post/hackintosh-fix-magenta-screen/
对于我来说这个方法无效。
如果你的黑苹果设备可以输出4K但某些电视/edid比较奇葩,那建议通过定制EDID的方式来解决:
https://wacky.one/blog/macos-hi-dpi/#one-key
如果你想在2K等低分屏下强制开启hidpi,你可以试试github上的Enable macOS HiDPI脚本,他的原理也和edid注入类似。
https://github.com/xzhih/one-key-hidpi
(2)SwitchResX添加分辨率
方法(1)对我来说不可用。我是完全识别不出4K输出,于是根据搜索到的资料我打算使用SwitchResX,强行添加某个分辨率使用。添加3840x2160后外接4K显示器后,确实有4K输出可选,但非常糊,明显是用1080p分辨率强行缩放上去的,连点对点都做不到,更别提hidpi了,归根到底就是假的4K输出。
这个方法可以用来解一些奇葩显示问题,说不定能用上,大家可以自己使用SwitchResX看看。但对我是无效的。
调查问题
我本来都想放弃了,已经消耗了很多时间,太折腾了。但某天发现了一些很有意思的事情:
首先是一位大神的小米笔记本Pro黑苹果EFI仓库里,我发现这个讨论可能和我有关系:
随后另一个X1C的讨论也把问题指向了DVMT:
虽然我的机型并不是X1C Gen5或者小米笔记本,但我们都是使用skylake的衍生平台,核显也是HD520的马甲产品,也就都是核显机型。
DVMT是什么
DVMT (Dynamic Video Memory Technology 即动态分配共享显存技术)。在很多黑苹果的教程中,都会要求对bios中的dvmt pre-allocated选项进行修改,调整到至少64MB以上(mac机型就是这个设置),如果无法调整,则需要配合framebuffer-stolenmem:00003001的patch来"借用"显存,但会存在我这种4K输出的问题;但对于很多隐藏了dvmt pre-allocated选项的笔记本来说,只能通过UEFIShell的方式来改动。而我手里的thinkpad连UEFIShell都锁定了,这就非常蛋疼了。
前面提到的小米笔记本Pro倒是可以直接在windows下使用网友制作的脚本来修改dvmt pre-allocated大小:
如果你的机型允许通过UEFIShell来修改DVMT设置,使用UEFIShell是更好的选择,顺便可以解决cfg-lock的问题,关键字搜索UEFIShell+DVMT即可。
Patch修复DVMT问题
如果你的机型Bios上锁了,UEFIShell也被锁了。可以通过打patch的方式来修复,以kabylake机型为例,在opencore中使用这样的patch:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>ACPI</key> <dict> <key>DeviceProperties</key> <dict> <key>Add</key> <dict> <key>PciRoot(0x0)/Pci(0x2,0x0)</key> <dict> <key>AAPL,ig-platform-id</key> <data> BAAnWQ== </data> <key>device-id</key> <data> FlkAAA== </data> <key>framebuffer-con1-enable</key> <data> AQAAAA== </data> <key>framebuffer-con1-type</key> <data> AAgAAA== </data> <key>framebuffer-patch-enable</key> <data> AQAAAA== </data> </dict> </dict> </dict> <key>Kernel</key> <dict> <key>Patch</key> <array> <dict> <key>Base</key> <string></string> <key>Comment</key> <string>KBL-DVMTpatch-10.15-10.15.1-10.15.2-10.15.3 (Enable 4K UHD HDMI/DisplayPort Output)</string> <key>Count</key> <integer>0</integer> <key>Enabled</key> <true/> <key>Find</key> <data> D4KnAwAA </data> <key>Identifier</key> <string>com.apple.driver.AppleIntelKBLGraphicsFramebuffer</string> <key>Limit</key> <integer>0</integer> <key>Mask</key> <data> </data> <key>MaxKernel</key> <string>19.3.0</string> <key>MinKernel</key> <string></string> <key>Replace</key> <data> D4IAAAAA </data> <key>ReplaceMask</key> <data> </data> <key>Skip</key> <integer>0</integer> </dict> <dict> <key>Base</key> <string></string> <key>Comment</key> <string>KBL-DVMTpatch-10.15.4 (Enable 4K UHD HDMI/DisplayPort Output)</string> <key>Count</key> <integer>0</integer> <key>Enabled</key> <true/> <key>Find</key> <data> D4KPAwAA </data> <key>Identifier</key> <string>com.apple.driver.AppleIntelKBLGraphicsFramebuffer</string> <key>Limit</key> <integer>0</integer> <key>Mask</key> <data> </data> <key>MaxKernel</key> <string></string> <key>MinKernel</key> <string>19.4.0</string> <key>Replace</key> <data> D4IAAAAA </data> <key>ReplaceMask</key> <data> </data> <key>Skip</key> <integer>0</integer> </dict> </array> </dict> </dict></dict></plist><?xml version="1.0" encoding="UTF-8"?>
Skylake机型改下名字也行,这么做完你就可以外接4K显示器了。不过我打算使用刷Bios的方式来解决,这样更加彻底,还会有更多可调节选项。
总结:
黑苹果真是小问题非常多,排查起来太杀时间了。









校验提示文案
校验提示文案
校验提示文案
想听你说下diy4k显示器的故事。
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
想听你说下diy4k显示器的故事。
校验提示文案
校验提示文案