- 首先,我们需要您的原始DSDT和SSDT文件。为此,请按照此处的指南将文件提取到文件夹中。删除时,请遵循第4章:使用“ refs.txt”删除ACPI文件。
- 下载MaciASL
- 将以下内容添加到MaciASL / Preferences / Sources部分中。
- Name: RehabMan Laptop
- URL: http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
- 如果在用Clover提取的文件中有以x结尾的文件,请删除这些文件。
- 查找要修补的文件
- 将GFX0重命名为IGPU补丁
- 显卡关闭
- 制作其他必要的补丁。
让我们从示例文件的第4步开始。当打开文件夹时,我们看到以下以x结尾的文件并将其删除。
4.删除文件
- SSDT-3x.dsl
- SSDT-4x.dsl
- SSDT-5x.dsl
5.查找要修补的文件
首先,我们找到所有通过GFX0的文件。我们转到包含文件的文件夹,然后将其输入终端。
grep -l GFX0 *.dsl
结果如下。
DSDT.dsl
SSDT-0.dsl
SSDT-1.dsl
SSDT-10.dsl
SSDT-11.dsl
SSDT-12.dsl
SSDT-2.dsl
SSDT-6.dsl
SSDT-7.dsl
SSDT-8.dsl
SSDT-9.dsl
[警告]所有这些文件将被打补丁。让您做的第一个补丁始终是将_DSM方法重命名为XDSM。这些包含设备设置的方法需要删除或重命名,某些文件可能不需要此修补程序。[/警告]
6.将GFX0重命名为IGPU补丁
DSDT.dsl
- 将_DSM方法重命名为XDSM
- OS Check Fix(Windows 8)此处的目的是将macOS引入Windows。例如,因为某些设备仅在相应版本的Windows可用时才打开。您可以针对设备上最高的Windows进行修补。
- 要将GFX0重命名为IGPU
图形卡,必须首先在所有修补程序中应用。 - 别忘了为电池等贴上其他补丁。
SSDT-0.dsl
- 将_DSM方法重命名为XDSM
- 将GFX0重命名为IGPU
SSDT-1.dsl
- 将GFX0重命名为IGPU
当我们这样做并说编译时,我们得到以下错误。-
- 246, 6126, syntax error, unexpected PARSEOP_PACKAGE
-
- 这是我们看到此错误时将制作的补丁:
- [syn] Remove _PSS placeholders
SSDT-2.dsl
- 将GFX0重命名为IGPU
SSDT-6.dsl
- 将GFX0重命名为IGPU
SSDT-7.dsl
- 将GFX0重命名为IGPU
SSDT-8.dsl
- 将GFX0重命名为IGPU
如您所见,此文件中有多个名称更改。请记住,此文件中可能还有其他图形卡。
SSDT-9.dsl
- 将GFX0重命名为IGPU
SSDT-10.dsl
- 将B0D3重命名为HDAU
图形卡和与音频相关的补丁。它使用布局ID 12。如果您使用其他编号进行声音布局,则可以更改它。 - 如
您所见,将GFX0重命名为IGPU 。此文件中有多个重命名。请记住,此文件中可能还有其他图形卡。
SSDT-11.dsl
- 如您所见,将GFX0重命名为IGPU 。此文件中有多个重命名。请记住,此文件中可能还有其他图形卡。
SSDT-12.dsl
- 如您所见,将GFX0重命名为IGPU 。此文件中有多个重命名。请记住,此文件中可能还有其他图形卡。
- 当我们尝试编译此文件时,我们得到1324, 6126, syntax error, unexpected PARSEOP_NAMESEG错误。出现此错误时要应用的补丁:
[gfx0] Cleanup/Fix Errors (SSDT)
7.关闭图形卡
现在,我们已经完成了补丁的第一步,即将GFX0重命名为IGPU。现在,我们将找到外部卡SSDT,并在该卡的_INI(初始)部分调用_OFF方法。
让我们在DSDT / SSDT文件中找到带有_OFF的文件。再次,我们转到命令行并键入。
grep -l Method.*_OFF *.dsl
结果将是:
- SSDT-12.dsl
因此,我们的屏幕关闭部分在此文件中。现在,让我们找到初始化视频卡的文件:
grep -l Method.*_INI *.dsl
- DSDT.dsl
- SSDT-10.dsl
- SSDT-11.dsl
- SSDT-12.dsl
外部图形卡通常称为PEGP。现在,让我们逐一查看SSDT文件,并找到图形卡的_INI部分。
- SSDT-10.dsl中的_正在寻找:
没有视频卡。 - SSDT-11.dsl
Method (_INI, 0, NotSerialized) // _INI: Initialize { Store (Zero, \_SB.PCI0.RP05.PEGP._ADR) }
我们将在_INI(开始)部分中调用_OFF方法。如果_INI和_OFF在同一文件中,则从_INI调用_OFF方法,但是如果它们在不同的文件中,则情况会更加复杂。
如您所见,这是我们的_INI方法,但是我们的_OFF方法在另一个文件中。发生这种情况时,我们必须注意一些事项。
有时,_OFF部分提供了对EC (嵌入式控制器)的访问。当我们从_INI调用_OFF时,此EC可能未激活,因此会出现问题。因此,让我们检查一下SSDT-12.dsl文件中的_OFF部分:
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
如您所见,EC访问由\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)提供。我们必须照顾这一点。我们将从该文件中删除它,并将其添加到另一个文件中。我们删除该行,使其像这样,然后说编译
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
它也可以调用一种方法来调用EC,尽管有时很少。检查该方法,并确保没有从EC调用任何内容。我们按如下所示执行
SSDT-11.dsl文件的_INI部分:
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj) // ekran kartinin adresi
_OFF()
}
如您所见,由于_OFF方法位于SSDT-12.dsl中,所以我们通过说External ...来指定该方法。然后用_OFF()将其关闭。在这里注意。您需要在SSDT-12.dsl文件中键入图形卡的地址路径。对于不同的设备,此地址可能有所不同。像SB.PCI0.PEG0.PEGP。
我们的工作仍未完成。我们需要添加删除的行\ _SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) 。使用DSDT文件启动EC。我们将这一行添加到DSDT文件中。
我们打开DSDT.dsl文件。
EC0 的reg方法如下:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
}
我们将其更改为以下内容:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
// EC0 kodunu ekliyoruz.
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
}
}
这些修补程序将关闭另一个视频卡。但是,在某些情况下,由于这些补丁,可能会出现入睡的问题。
因此,我们也在制作以下补丁。使用下面的修补程序,视频卡在进入睡眠之前打开,在唤醒后再次关闭。您将这些补丁写在MaciASL的文本框中,显示补丁并称其为补丁。
DSDT.dsl
into method label _PTS code_regex ([\s\S]*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._ON, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._ON)) { \\_SB.PCI0.RP05.PEGP._ON() }\n
%1
end;
into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._OFF, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._OFF)) { \\_SB.PCI0.RP05.PEGP._OFF() }\n
%1
end;
[警告]这里的重点是每个图形卡的_SB.PCI0.RP05.PEGP部分可以不同。在某些情况下,例如SB.PCI0.PEG0.PEGP阅读本指南的人员应该注意它。[/警告]如
您所见,由于指南很长,不保证每个人的都能顺利操作成功,但是希望对你有帮助。
评论0