黑苹果折腾篇(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的方式来解决,这样更加彻底,还会有更多可调节选项。
总结:
黑苹果真是小问题非常多,排查起来太杀时间了。
NAOKIZXX
校验提示文案
兰斯洛特林
校验提示文案
Heartless2016
校验提示文案
值友5378851811
想听你说下diy4k显示器的故事。
校验提示文案
干噎
校验提示文案
拿铁男友
校验提示文案
墨几张
校验提示文案
值友2173136007
校验提示文案
Heartless2016
校验提示文案
兰斯洛特林
校验提示文案
值友2173136007
校验提示文案
墨几张
校验提示文案
拿铁男友
校验提示文案
干噎
校验提示文案
值友5378851811
想听你说下diy4k显示器的故事。
校验提示文案
NAOKIZXX
校验提示文案