admin 发表于 22/4/12 21:06:32

使用Hackintool的通用缓冲区补丁修复Intel核显HDMI接口黑屏

这份教程适用于如下情况:有比较新的主板,并且使用的是Intel的核心显卡,主板上的HDMI接口不工作。

使用360、370、390系列的主板,桌面Coffee Lake 处理器,HDMI或者DP显示器,主板品牌为技嘉、华硕、华擎、微星,想使用别人已经做的好的缓冲帧补丁碰碰运气。可以试试本教程结尾的补丁兼容列表。

这个教程最适合较新的主板、较新的配件。
包括(a)较新的CPU   (b)较新的主板   (c)较新的显示器 (很重要!)
很多问题都是因为使用了电视、较老的显示器,或者显示器不支持Displayport1.2+ 或者 HDMI1.4+.

这个教程的主要目的是启用主板上的HDMI口(这个接口只接一个单独的HDMI显示器)。这个教程不推荐在使用核心显卡的情况下使用多显示器。
对多显示器支持最好的还是AMD的独立显卡。


内容:
这个教程包含如下几部分。
1.理论
2.检查单
3.准备工作
4.处理
5.大功告成
6.引用的文章
7.补丁兼容列表
8.帮助他人


物理显示器接口:主板上的DP、HDMI、VGA、DVI接口。


1.理论
主板的品牌有很多,比如华擎、华硕、EVGA、技嘉、微星或者其他。板载的视频接口有很多不同种类的组合。有些主板提供一个HDMI接口,两个DP接口。有一些主板,提供两个HDMI接口。其他的可能提供DVI接口或VGA接口。
macOS10.14 Mojavecoffee lake CPU,已经有两个成功工作的VGA接口案例,所以VGA接口可以考虑被支持了。

当MacOS初始化核芯显卡的驱动(AppleIntelFramebuffer)时,系统不知道哪个接口是HDMI,哪个是DVI等等。系统会根据你选择的Platform ID做默认的假设。 比如PlatformID 0x3E9B0007, 默认情况下,所有的接口都会被当做DP接口,
(VGA接口也被当做DP接口处理)。所以,如果你将DP或者VGA显示器接到主板上的话,显示器马上会正常工作。但是如果你接的是HDMI或者DVI显示器,可能根本不工作,因为MacOS默认连接的是DP显示器。


幸运的是,有相对直接的办法改变默认的端口映射。每个主板上的物理显示器接口被关联到一个Port Number。Port Number 为0x05, 0x06, 0x07,在不同的主板上会被映射到不同的物理显示器接口。MacOS中核显最多支持3个外接显示器。


一些主板上,Port 0x05 可能被连接到HDMI接口,而在其他的主板上可能被连接到DP、DVI或者是VGA。同样的,Port 0x06、Port 0x07在不同的主板上会被连接到不同的物理显示接口。为了解决HDMI/DVI黑屏的问题,我们首先需要确定主板上的哪个显示接口连接到了HDMI接口(如果主板上有HDMI接口的话),哪些连接到了DVI,哪些链接到了DP或者VGA接口。


一旦我们确定了物理接口和PortID之间的对应关系,我们通过一个简单的Framebuffer表格,将这个信息传递给MacOS。因为MacOS最多支持3个外部显示器接口,我们可以定义三个“软件连接器(Software Connector)”即“cons”。任意一个“软件连接器”可以被映射到任意一个物理显示器接口。

三个“软件连接器”被命名为con0,con1,con2.
Port 0x05, Port 0x06, Port 0x07又叫 Softwart Indexes 1,2,3.

Software Index 1 一般代表 Port 0x05.
Software Index 2 一般代表 Port 0x06
Software Index 3 一般代表 Port 0x07.
HDMI、DVI接口被认为是一样的。可以将HDMI、DVI接口类型(Type)都设置为HDMI。
DP、VGA接口被认为是一样的。可以将DP、VGA接口类型设置为DP。


例如:
如果Port 0x06接口类型是HDMI,那么将Index2 类型设置为HDMI
如果Port 0x05接口类型是DVI,那么将Index1类型设置为HDMI(因为MacOS中DVI等价于HDMI)
如果Port 0x07接口类型是DP,那么将Index3类型设置为DP
如果Port 0x07接口类型是VGA,那么将Index3类型设置为DP(因为MacOS中VGA等价于DP)

除了指定接口类型之外,我们还需要确定另外一个参数:BusID, 必须为每一个“软件连接器”分配一个唯一的BusID。同类型的接口,可用的BusID值不同。

*DP是最灵活的,BusID可以为 0x02, 0x04, 0x05, 0x06。这四个值中的任何一个一般适用于任何主板。这4个值对VGA接口也适用。

*HDMI要求比较严格。只可以用0x01, 0x02, 0x04, 0x06。但是一些主板只能用这四个中的一个或者两个,比如技嘉Z390主板,只能用0x04.

*DVI接口的要求与HDMI接口一样。


通过上面的介绍,我们对 Ports, Connectors, Indexes, Types, BusID已经有了初步认识,那么可以进入正题了。

从确定每一个物理接口的类型开始。只要确定了每一个接口的物理类型后,剩下的就比较简单了。
我们从三个问题开始:
* Port 0x05 (Index 1) 是什么类型?
* Port 0x06 (Index 2) 是什么类型?
* Port 0x07 (Index 3) 是什么类型?
流程如下:


开始前的检查清单:

注意:如果你用了DP to DVI的转换器,或者HDMI to DP的转换器,请看这两个帖子。
https://www.tonymacx86.com/threads/guide-general-framebuffer-patching-guide-hdmi-black-screen-problem.269149/post-2141095
https://www.tonymacx86.com/threads/guide-general-framebuffer-patching-guide-hdmi-black-screen-problem.269149/post-2169249

1.下载Hackintools
2.确定已经安装了Lilu和WhateverGreen两个Kext
3.MacOS必须使用正确的核显DeviceID和PlatformID启动。

4.对于大部分Coffee Lake架构的桌面CPU来说,一般使用Device ID 0x3E9B 和Platform ID 0x3E9B0007。
请根据这个教程来确定你的系统的正确的值。这两个值决定了是否为核显加载了正确的驱动。
如果默认的(非加速?)驱动被加载了,那么这个教程就不起作用了。我们必须避免使用所有connector的Index值为-1的PlatformID(这种是无头平台),比如Platform ID 0x3E920003


5.但是这带来了一个问题,当正确的(可加速)的核显驱动被加载的时候,主板上的HDMI、DVI接口会停止工作。
所以,
(1)需要将你的显示器连接到一个其他的正常工作的端口上(比如DP口)
(2)使用独立显卡(或外接显卡),并将显示器接到独立显卡的接口上。
6.使用Hackintool来确定是否已经为核显加载了正确的驱动。如果GPU信息和下面的图片一样,那么驱动应该是被正确加载了。如果显示GPU:???,那么你需要从头再逐条检查一下检查清单,或者发帖求助。
注:左图为老版的Hackintool界面,新版界面为右图。
7.将主板上的显示接口列一个清单(比如HDMI, DP, DVI-D, VGA)
8.我们需要测试每个显示接口,所以,你必须有每个显示接口对应的显示器和连接线缆(俗称信号线)。在缺少一种连接线缆或者显示器的情况下也能继续,但是会增加猜的部分。
9.现在,你的电脑已经启动到MacOS中,并加载了正确的核显驱动。无论是使用Clover Configurator设置ig-platform-id 和显卡 Device ID还是在Devices-->Properties中进行了设置。只要是加载了正确的加速显卡驱动就行。
如果有如下的设置,需要使用Clover Configurator.从config.plist中清除掉,但千万别重启!!!千万别重启!!!千万别重启!!!
      *Devices --> Fake ID --> IntelGFX --> 清除这里你做所有设置。
      *Graphics --> Inject Intel --> 取消勾选
      *Graphics --> ig-platform-id --> 清除这里你做所有设置。
注:现在大部分已经使用opencore了,显卡相关的设置都在Device Properties中。

10.保存config.plist 并退出 Clover Configurator.


准备工作:


1.打开Hackintool。点击菜单栏【Framebuffer---MacOS 10.14】。

2.点击【Patch---Apply Current Patches】,并确认Apply Current Patches前面已经有对号。注:这个选项在Connectors 选项卡中显示系统当前生效的framebuffer设置,并不会对当前系统应用任何改变。但如果像本教程后续所述做了改变的话,并且重启了系统。这个选项将显示改变后的设置,而不是默认的framebuffer设置。所以,如果了你做了并应用了一些改动,重启后在Hackintool中没有看到这些改动,这是因为Apply Current Patches前没打✓。无论什么时候你在下拉菜单里选择了一个新的Platform ID,这个Platform ID对应的默认设置会出现在Connectors 中。如果你想看你之前应用的设置,再点击一下Apply Current Patches。
3.选择与你主板最接近的Platform ID。参考Which ig-platform-id should I use for my system. 不同的Platform ID会有不同的connectors组合。如果你选择了一个无头platform ID,所有的connectors的Index 值为 -1。(也就是全部为关闭状态)。

4.我们以Platform ID 0x3E9B0007为例,Platform选择0x3E9B0007后,点击Connectors选项卡,这是我们最需要关注的地方:connector映射表,分配 Index, BusID, Pipe, Type和Flags.表格中的每一行对应一个software connector。Connectors从0开始依次编号,即con0, con1, and con2. 但是此时,我们不相信表中的任何值。

5.如果显示器接到了主板上的显示接口上,表格中的其中一行会红色高亮显示。因为我只用了一个DP显示器,所以只有一行高亮了。这非常直接的告诉我们,高亮的红色的行对应一个DP接口。所以,现在,我需要点击红色行,然后在窗口的右下角读出它的Port number。
其他接口以此类推。现在我们知道Port 0x05 ---Index1---DP接口。
即Port 0x05(Index1)为DP接口。
注意,不要混淆了Port 的0x05与busid的0x05.

过程
      1.你的主显示器一直处于连接状态。Keep your primary monitor connected at all times.
      2.将另一个主板上的显示接口连接到显示器。例如,主板有一个DVI接口,把它与有DVI接口的显示器连接起来。很有可能所有的DP接口都能点亮显示器,但是你的DVI和HDMI接口有可能亮也有可能不亮。Do not use video adapters (e.g. DP-to-HDMI, DVI-to-HDMI, etc.) during this procedure. Instead, use straight connections (HDMI-to-HDMI, DP-to-DP, DVI-to-DVI, etc.).这个操作不要使用转换头(比如DP-to-HDMI, DVI-to-HDMI等等)。使用直连线(HDMI-to-HDMI, DP-to-DP, DVI-to-DVI, 等等).
      3.Hackintool中的一行会变为红色高亮。因为我的主板有两个DP接口,将DP线从第一个DP口拔出并插到第二个DP口中。另一行会被高亮为红色。我们再次通过单击红色行来确定Port number。本例中第二个DP接口的Port number为0x06. 我们目前得到的结果如下:
*Port 0x05 (Index 1) 为 DisplayPort
                *Port 0x06 (Index 2) 为DisplayPort
      4.因为这个主板只有三个视频接口,并且HDMI接口不工作。连接HDMI接口没有意义,但连接一次试试,确认是否黑屏。通过排除法,我们能推断出Port 0x07 (Index 3)一定是 HDMI。现在我们得到:

                *Port 0x05 (Index 1) 为 DisplayPort
                *Port 0x06 (Index 2) 为DisplayPort
                *Port 0x07 (Index 3) 一定是 HDMI
      5.现在看Type和Index列。我们看到这三行Type 都被设置为DP,Index的值为1,2,3.前两行看起来是正确的,我们刚刚确定Index3一定是HDMI。
      6.所以我们通过下拉菜单把Index3的Type改为HDMI,同时把它的BusID改为0x04。为什么是0x04? BusID还有其他可用的值,我们每次试一个值然后测试这个值是否可用。由于BusID 0x04当前被分配给Index2,我们交换一下这两个值。Index2 的BusID变为0x06(0x06是DP口的有效值),Index2 的BusID变为0x04。结果如下图所示:
7.现在我们可以试一试了。点击Patch选项卡,然后在General 和Advanced 子选项卡中勾选相关选项(由于我使用了coffee lake 架构的CPU,Advanced子选项卡中的 Device ID设为0x3E9B:Intel UHD Graphics 630。你需要使用和你自己的CPU最接近的Device ID。
8.有些时候勾选特定的选项后,Hackintool会重设 Connectors 页面。这时返回Connectors 页,再次确认你的设置(如果需要的话,就再设置一次),然后返回Patch页。最后点击Generate Patch。
9.现在我们需要将补丁插入到当前的config.plist中。使用Clover Configurator 或者EFI Mounter v3.挂载Mojave所在硬盘的EFI分区。
      10.如下图所示,点击菜单栏中国的File --> Export --> Clover config.plist。
11.从窗口中选择Mojave硬盘EFI分区中的CLOVER文件夹,选择已经存在的config.plist文件。Hackintool会备份当前的config.plist,然后将补丁以非破坏性的方式插入到config.plist中。
      12.现在,补丁已经应用了。重启电脑测试下。
      13.启动Mojave后,登陆系统,然后将主板上的HDMI口连接到显示器的HDMI接口。显示器亮了吗?到这步,有可能没亮。但是如果亮了,就说明搞定了。
      14.如果HDMI(或者DVI)接口没亮,试一下另一个可以使用的BusID。再次打开Hackintool ,选择 Framebuffer --> macOS 10.14 ,确定 Patch --> Apply Current Patches处于勾选状态。从下面列表中换一个BusID,重复5-13步。
15.如果你的视频端口数少于3个,有2中方式来禁用未使用的Index。方法1,将Index的值设为-1.方法2保持Index的值不动,将BusID值设为0x00. 根据一些用户的反馈,建议首先尝试方法2.例如,如果你只有一个HDMI口,对应Port 0x07 (Index 3)。你可以尝试下表中的任何一个配置。
Index 3: BusID 0x04, Type HDMI
Index 1: BusID 0x00, Type DUMMY
Index 2: BusID 0x00, Type DUMMY
Index -1: BusID 0x00, Type DUMMY

or

Index 1: BusID 0x00, Type DUMMY
Index 3: BusID 0x04, Type HDMI
Index 2: BusID 0x00, Type DUMMY
Index -1: BusID 0x00, Type DUMMY

or

Index 1: BusID 0x00, Type DUMMY
Index 2: BusID 0x00, Type DUMMY
Index 3: BusID 0x04, Type HDMI
Index -1: BusID 0x00, Type DUMMY16.为了减少显卡的小毛病,并且避免一些少见的启动失败。推荐启用disablegfxfirmware选项。



收尾工作

收尾工作相对简单,因为三个接口中有两个默认配置是正确的几乎没有需要猜测的部分。但是如果连接其它视频接口时没有红色高亮呢?这种情况下你需要反复试验。希望其中一个接口是已知的,你只需要弄清楚一个或两个接口。

例如,你已经确定Port 0x05 (Index 1)是DisplayPort,除此之外没有其他行变红。如果接下来需要配置的接口是HDMI,你需要假定HDMI端口为Port 0x06 (Index 2),并且设置相应的Type和BusID。如果仍然不行,仍旧使用Port0x06尝试不同的BusID. Port0x07也是如此,直到你找到可用的设置组合。
一旦HDMI/DVI被成功启用,我们可以再次运行Hackintool来检查Port Number。首先,我们看被标记为HDMI的行现在已红色高亮(第一行是DP接口),如果我们点击红色行,我们可以确定它的Port number 确实是0x07.
大功告成。

References引用
      1.本教程中的技术来源于Lilu和它的插件以及WhateverGreen. Lilu及插件的完整说明 located here. 作者@jaymonkey, 更加深入并且有大量的例子.
      2.Hackintool的作者@headkaze, this guide 包括了很多代IntelCPU的信息。


原帖下方有很多网友贡献的配置,有兴趣,有能力的可以自取。


补丁列表
见原帖https://www.tonymacx86.com/threa ... een-problem.269149/


如果你成功为你的主板找到了正确的配置,请通过发送HackintoolConnectors 页面的截图,以及必要的配置。你可能需要在Connectors页面重新输入你的更改。你可以把截图发在原帖主题下,原作者将根据各位的回复整理一个列表。


admin 发表于 22/4/12 21:06:44

总结一下就是:1.正确驱动核显后,使用Hackintool确定下表红色字体到底是哪一个值。

物理接口Port IDIndexcon
DP1 / DP2 / HDMI ?0x0510
DP1 / DP2 / HDMI ?0x0621
DP1 / DP2 / HDMI ?0x0732

2.通过修改配置,重启验证busid组合是否可用,不行的话就换一种组合。注意,每个BusID在列中唯一,不可使用两次。
Type(DATA类型)
DisplayPort对应00040000
HDMI对应00080000

物理接口BusIDTypeType(DATA类型)
DP10x02 / 0x04 / 0x05 / 0x06 ?DisplayPort00040000
DP20x02 / 0x04 / 0x05 / 0x06 ?DisplayPort00040000
HDMI0x01 / 0x02 / 0x04 / 0x06 ?HDMI00080000


参考OpenCore设置项---与上表字段对应关系,下表以con0为例:

OpenCore设置项对应上表中字段备注
framebuffer-con0-busidbusid
framebuffer-con0-enable端口启用:
01000000
framebuffer-con0-flagsC7030000
framebuffer-con0-indexindexcon0---取值1
con1---取值2
con2---取值3
framebuffer-con0-typetype
framebuffer-portcount物理端口数量
本例子中为3个

--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下图的表格和图片是对应的,有兴趣的朋友可以对照看下。


Port IDIndexcon物理接口BusIDTypeType(DATA类型)
0x0510DP10x05DisplayPort00040000
0x0621DP20x04DisplayPort00040000
0x0732HDMI0x06HDMI00080000

z05052353 发表于 24/4/8 09:40:06

完全看不懂····
页: [1]
查看完整版本: 使用Hackintool的通用缓冲区补丁修复Intel核显HDMI接口黑屏