当前位置:
文章详情

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

2020-11-08 11:53:20 11点赞 39收藏 18评论

最近在折腾我的X1 Carbon黑苹果,我的型号是X1 Carbon Gen4,也就是X1C 2016,配置如下:

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)


由于硬件平台的高度通用性。我是用别人做好的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/

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

对于我来说这个方法无效。

如果你的黑苹果设备可以输出4K但某些电视/edid比较奇葩,那建议通过定制EDID的方式来解决:

https://wacky.one/blog/macos-hi-dpi/#one-key

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

如果你想在2K等低分屏下强制开启hidpi,你可以试试github上的Enable macOS HiDPI脚本,他的原理也和edid注入类似。

https://github.com/xzhih/one-key-hidpi

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)


(2)SwitchResX添加分辨率

方法(1)对我来说不可用。我是完全识别不出4K输出,于是根据搜索到的资料我打算使用SwitchResX,强行添加某个分辨率使用。添加3840x2160后外接4K显示器后,确实有4K输出可选,但非常糊,明显是用1080p分辨率强行缩放上去的,连点对点都做不到,更别提hidpi了,归根到底就是假的4K输出。

这个方法可以用来解一些奇葩显示问题,说不定能用上,大家可以自己使用SwitchResX看看。但对我是无效的。

调查问题

我本来都想放弃了,已经消耗了很多时间,太折腾了。但某天发现了一些很有意思的事情:

首先是一位大神的小米笔记本Pro黑苹果EFI仓库里,我发现这个讨论可能和我有关系:

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

随后另一个X1C的讨论也把问题指向了DVMT:

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(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大小:

黑苹果折腾篇(1)——为什么你的hackintosh没法输出4K(DVMT)

如果你的机型允许通过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的方式来解决,这样更加彻底,还会有更多可调节选项。

总结:

黑苹果真是小问题非常多,排查起来太杀时间了。


展开 收起
18评论

  • 精彩
  • 最新
  • 利用uefi的插件式注入,会为系统引入不必要的潜在风险

    校验提示文案

    提交
    这是用uefishell改bios固件里的某些设置,不是插件注入。

    校验提示文案

    提交
    收起所有回复
  • 大佬,机型Bios上锁了,UEFIShell也被锁了。CFL机型,在opencore中使用这样的patch,麻烦能给个教程吗?

    校验提示文案

    提交
    如果不开DVMT,要使用特殊的patch来开4K,好像也不一定成功,所以我没试过。。

    校验提示文案

    提交
    我的是THINKPAD X390 刚买了4k显示器,就是搞不定DVMT。。。。。试过补丁也不行了。。要刷BIOS吗?

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 你好,你后来刷bios成功了没?我的是T460p装的10.14.6 上周淘了个LG 27up600 本本有hdmi 和minidp接口,显示器自带的是hdmi和dp线,我用hdmi线外接显示器,提示我显示器的分辨率是2k让我设成4k,外接显示器后输了密码登陆系统要等好久才看到显示器最上面的菜单栏,桌面只有背景图片,桌面上的文件都看不到,还有字体很糊,我的EFi是github上找的 那人的机器配置和我的差不多,后来我搜t460p产品说明发现hdmi只支持4k@24hz mididp可以支持4k@60hz 昨天立马买了一根mididp--dp的线,我估计我这个也要改DVMT的值,我在BIOS里看到显存里设的是256M 可选512 我就改成了512 明天线到手后 晚上再折腾一下,上周5加周末2天 一直在网上搜解决办法,折腾了2天,汗!!!

    校验提示文案

    提交
    成功了啊,一开始就成功了

    校验提示文案

    提交
    我HDMI只能用4K 30hz

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 黑苹果确实折腾的很,所以很多人最后就白苹果了。
    想听你说下diy4k显示器的故事。

    校验提示文案

    提交
  • 老铁发个教程吧,情况跟你一样。BIOS刷不明白。。

    校验提示文案

    提交
  • 同个问题,折腾好久了,我蹲完厕所就去尝试下,好了回来感谢

    校验提示文案

    提交
  • 没折腾dvmt之前连接4k显示器能开2k60hz,折腾之后出现了缩放选项,但是显示器黑屏没图像…… [大囧] [大囧] [大囧]

    校验提示文案

    提交
    请问您这个问题解决了吗?

    校验提示文案

    提交
    收起所有回复
  • 没想到在这里还能看见黑苹果大佬

    校验提示文案

    提交
提示信息

取消
确认
评论举报

最新文章 热门文章
39
扫一下,分享更方便,购买更轻松