Fork me on GitHub

[翻译][指南]英特尔IGPU HDMI/DP音频(Sandy/Ivy/Haswell/Broadwell/Skylake/Kabylake)

翻译[指南]英特尔IGPU HDMI/DP音频(Sandy/Ivy/Haswell/Broadwell/Skylake/Kabylake)

早上起床,习惯性打开手机浏览,随着macOS发布了最新的10.13.4,最近几天远景上面关于Intel核显的显卡驱动以及HDMI的声音输出的求助帖很多,于是就跑去[RehabMan](https://www.tonymacx86.com/members/rehabman.429483/)的大本营,就看到了这篇文章。之前也经常使用他发布的一些patch,包括很多笔记本机型专用的config.plist都来自这位大咖。

现将这篇让INTEL的HDMI/DP音频正确输出的帖子转译过来,让更多的人都能看到。

本人英语炒鸡辣鸡,使用的是google的机翻,其中难免会存在错误,请各位群友指正。

概述

本指南将介绍如何为连接到英特尔集成GPU的HDMI端口的笔记本电脑实现HDMI音频。其中一些内容也适用于配备DP连接器的笔记本电脑。

如果您的笔记本电脑有外部DP端口,您也可以阅读本指南。带有外部DP端口的笔记本电脑需要此处介绍的一部分补丁。

为了实现HDMI/DP,必须满足以下要求:

  • 使用AppleHDA的原生音频(有关更多信息,请阅读FAQ …实现板载音频不在本指南的范围内)

  • 适当的帧缓冲(kext)补丁更改连接器类型以匹配物理连接器。这通过修补与正在使用的ig-platform-id关联的数据来完成。

  • Haswell/Broadwell:将B0D3重命名为HDAU(设备位于0x00030000)

  • 在HDAU,IGPU,HDEF对象上注入属性"hda-gfx" = <"onboard-1">

  • Haswell/Broadwell:在HDAU上注入layout-id以匹配HDEF上的布局ID

  • Haswell:安装FakePCIID.kextFakePCIID_Intel_HDMI_Audio.kext

注意:通常,对于PC笔记本电脑,英特尔图形设备的ACPI标识符为GFX0产品使用VID)。由于此标识符通常更改为IGPU以启用IGPU电源管理,因此本指南将其称为IGPU。请记住,如果您尚未实施IGPU PM。

注意:如果您想知道Skylake(和Kaby Lake)与HD3000/HD4000类似,因为HDMI/DP编解码器在HDEF(通常是PC DSDT中的HDAS,更名为OS X的HDEF)上,而不是单独的设备HDAU 。

关于Clover和Clover笔记本电脑指南的注意事项

如果您按照此处的指南进行操作:https : //www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/

你的config.plist将已经包含所需的重命名。

您可以将config.plist/Devices中的#AddProperties重命名为AddProperties,它将启用所需的“hda-gfx”和其他音频注入。

看看它…

帧缓冲区修补

与ig-platform-id(或具有Sandy Bridge的snb-platform-id)关联的数据对于每个连接器具有代表连接器类型(以及其他连接器相关数据)的位。由于大多数Apple产品使用DP,因此大多数连接器默认为DP。为了使HDMI音频正常工作,您必须修补kext,使连接器数据与物理连接器匹配。如果您的连接器是DP,则无需执行任何操作,但如果您的端口是HDMI,则可能需要修补连接器,使其成为HDMI连接器而不是DP连接器。

DP连接器通过连接器类型在ioreg中标识<00 04 00 00>
HDMI连接器通过连接器类型在ioreg中标识<00 08 00 00>

在ioreg中标识。在我的向导中链接的plist中,您将找到各种连接器ig-platform-id数据。

http://www.tonymacx86.com/el-capita…de-boot-os-x-installer-laptops-clover.html

默认情况下,每个补丁都是禁用的。您可以阅读关于禁用的修补程序以及如何在指南的第2篇后启用它们。

您需要使用的补丁取决于HDMI连接器插入哪个端口。每个端口在IGPU下都有自己的AppleIntelFramebuffer节点。例如,该图像显示了我的Lenovo u430上的IGPU下的每个帧缓冲区节点:
IGPUframebuffers.png

如果有HDMI设备插入其中一个帧缓冲区,您将在相应的帧缓冲区下看到AppleDisplay,就像您看到与LVDS相关的帧缓冲区下的AppleBacklightDisplay一样端口(笔记本电脑内部显示)。

在我的联想u430的情况下,HDMI端口与AppleIntelFramebuffer @ 2相关联。每个帧缓冲区(@ 0,@ 1,@ 2,@ 3)对应于驻留在帧缓冲区kext二进制文件中的ig-platform-id数据内的一组连接器数据。每个连接器都有一个描述端口号的前缀,并且每个连接器都位于kext中(例如:按照该顺序为0105,0204,0306)。提供的plists中的每个修补程序都用前缀进行注释,并按它们在平台数据中出现的顺序进行评论。因此,对于使用ig-platform-id 0xa260006的Lenovo u430,外部端口(@ 1和@ 2)标有0105和0204。由于u430上的HDMI端口连接到AppleIntelFramebuffer @ 2这是0204连接器,我们可以将其缩小到只适用于0xa260006的0204的修补程序。

plist中只有两个这样的补丁。对于每个连接器,都可以选择使用非(12)修补程序或(12)修补程序之一修补。不同之处在于“(12)”变体除了修补连接器类型外,还修补了一个据信定义某种延迟的字节。一些笔记本电脑需要将此延迟从默认(09)延长到(12)。在确定你需要什么的时候,这是试错的问题。假设您已满足所有其他HDMI音频要求,并且非12修补程序导致KP(内核崩溃) /重新启动,则可能需要12个变体。

对于HDMI监视器热插拔时KP(内核崩溃) /重新启动的情况,很难确定您的外部端口分配到了哪个端口(因为在监视器插入时无法查看ioreg)。在这种情况下,您应该应用适用于您正在使用的ig-platform-id的所有(12个变体)修补程序。这应该让你通过KP(内核崩溃)/重新启动,然后你可以看看ioreg,确定哪个端口实际使用,并且消除或禁用不需要的补丁。

在我的u430的情况下,我没有KP(内核崩溃) /重新启动问题,所以我可以通过插入显示器并查看ioreg来确定HDMI使用哪个端口。正如我之前提到的那样,它是0204连接器(framebuffer @ 2)。因此,Lenovo u430使用标有“HDMI-audio,端口0204,0x0a260005 0x0a260006”的补丁。

它出现在我的config.plist中(在Xcode中): 在修补HDMI音频之前,AppleIntelFramebuffer @ 2的连接器类型为<00 04 00 00>。修补后,它将变为<00 08 00 00>。 修补之前: 修补后: 如果您的物理连接器是DP,则无需为连接器类型打补丁。但是,您可能需要为09和12延迟打补丁。查看每个修补程序中替换的十六进制数据,应该很明显如何更改修补程序,使其保持<00 04 00 00>连接器类型而不是将其更改为<00 08 00 00>将B0D3重命名为HDAU:

0204patch.png

0204connector-type-HDMI.png

0204connector-type-DP.png

Sandy Bridge(HD3000)和Ivy Bridge(HD4000)使用具有多个编解码器的单个音频设备(HDEF)。板载音频和HDMI音频均位于同一HDEF设备上。因此,没有第二个设备,所以不需要将其重命名为HDAU。

Haswell和Broadwell为HDMI音频编解码器使用单独的设备。通常它被命名为B0D3(它可以在DSDT或OEM SSDT中定义)。您将在ioreg中看到PCI0下的B0D3节点。对于OS X,它必须重命名为HDAU。设备的地址始终为0x00030000。

您可以使用笔记本修补程序存储库中的“将B0D3重命名为HDAU”来重命名设备。该补丁应该适用于包含B0D3参考的任何DSDT或SSDT。同一个补丁还定义了一个在HDAU上注入“hda-gfx”=“onboard-1”的_DSM。它还包含一个补丁,为IGPU注入“hda-gfx”。

请参阅ACPI修补指南更多有关ACPI修补程序的信息:http : //www.tonymacx86.com/el-capitan-laptop-support/152573-guide-patching-laptop-dsdt-ssdts.html

注意:Skylake似乎使用单个音频设备,通常名为HDAS。它必须被重新命名为HDEF为OS X

注入性质HDA-GFX(和布局-ID)

对于桑迪桥和常春藤桥(HD3000/HD4000),"hda-gfx" = <"onboard-1">必须在注入iGPU的和HDEF。

对于Haswell和Broadwell,必须在IGPU和HDAU上注入"hda-gfx" = <"onboard-1">。没有必要在HDEF上注入“hda-gfx”,尽管它似乎不会引起问题。

Audio Layout音色(Audio Layout 3Audio Layout 12或为您的布局ID自定义的音色)会在HDEF中注入“hda-gfx”。通常情况下,HDEF在DSDT中定义。

注意:HDAU/IGPU“hda-gfx”来自“将B0D3重命名为HDAU”,或者对于IGPU其他IGPU相关的修补程序。搜索“hda-gfx”的回购补丁,你会看到几个。

Rename B0D3 to HDAU"补丁也为IGPU注入“hda-gfx”。通常,HDAU和IGPU对象在相同的SSDT中定义,但有可能是一个不同的文件(如DSDT)。仅在应用修补程序时查看它是否适用于给定文件没有任何坏处。

通常情况下,以下工作将完成所有必需的重命名和注入操作:

  • 将“Audio Layout *”(布局ID取决于您修补的AppleHDA)应用于DSDT
  • Rename B0D3 to HDAU应用于DSDT和所有OEM SSDT。

另请注意,“将B0D3重命名为HDAU”补丁会在HDAU上注入布局ID。布局ID必须与HDEF上的布局ID匹配。在应用之前,根据需要修改修补程序中的布局ID。

注意:Haswell和Broadwell不需要HDEF上的hda-gfx。

安装FakePCIID.kext FakePCIID_Intel_HDMI_Audio

AppleHDAController kext实现了某些HDAU设备的白名单。一些PC使用不直接支持的设备。但FakePCIID_Intel_HDMI_Audio可以欺骗PCI ID以满足AppleHDAController

安装FakePCIID.kext和FakePCIID_Intel_HDMI_Audio.kext:https//github.com/RehabMan/OS-X-Fake-PCI-ID

阅读README以查找预构建的kext二进制文件。

即使在您拥有支持的HDAU设备的情况下,安装FakePCIID_Intel_HDMI_Audio也不会造成任何伤害。kext不会附加到本机支持的设备。

检查你的工作

你可以判断一切是否完全在IORegistryExplorer中实现。

初始IORegistryExplorer设置:

检查"hda-gfx" = <"onboard-1">

  • 在搜索框中输入”
  • 你应该在HDEF/IGPU(Sandy/Ivy/Skylake/Kabylake)和HDAU/IGPU(Haswell/Broadwell)上找到它。
  • 查看属性值,您应该看到“onboard-1”

检查HDAU(仅限Haswell/Broadwell):

  • 您应该在PCI0

检查layout-id 下找到HDAU(不是B0D3):

  • 在搜索框中键入“ layout-id“
  • 您应该在HDAU(如果适用)和HDEF上找到它
  • 如果您检查每个HDAU和HDEF中的值,HDAU应具有相同的值

检查帧缓冲区:

  • 检查与您的HDMI对应的IGPU下的帧缓冲区/ DP连接器
  • 它应该与物理连接器(DP:<00 04 00 00>,HDMI:<00 08 00 00>

匹配检查HDAU下的FakePCIID加载:

  • 如果您有不受支持的HDAU,您会注意到FakePCIID已连接到HDAU设备。

如果只有其中一项要求未得到满足,则不起作用。

关于打赏

您的支持就是我更新的动力!
如果不希望看到博主停更的话,请点击下方的 打赏 支持一下,有钱的捧个钱场,没钱的捧个人场,谢谢大家!

QQ群列表:

688324116 一起黑苹果 2000人群 已满
331686786 一起吃苹果 2000人群 尚有空位
257995340 一起啃苹果 2000人群 尚有空位
891434070 Mojave黑苹果交流群 2000人群 尚有空位
939122730 Mojave黑苹果交流II群 500人群
891677227 黑果小兵高级群 500人群 尚有空位
943307869 黑果小兵高级群II 2000人群 新开群,欢迎踊跃加入
943181023 联想小新Air黑苹果交流群 500人群 非专用机型请勿加入

-------------本文结束感谢您的阅读-------------
请站长喝杯咖啡吧 ´◡`
0%