除英特尔卡外,大多数笔记本电脑还具有Nvidia或AMD显卡。这些卡不能与macOS一起使用。如果未从系统中关闭这些卡,则它们会导致更多的电源使用和更快的风扇运行,从而降低电池寿命。我将在下面的指南中尝试说明如何关闭这些卡。该指南可能很长,但是如果您逐步按照指南进行操作,并理解为什么我们要执行每个步骤,那么您应该不会有任何问题。我在此处包含了示例计算机的文件,以使指南更加清晰。您也可以尝试一下。
[警告]以下补丁用于关闭图形卡。如果您有电池声卡等的补丁,请重新操作。[/警告]目录

  1. 首先,我们需要您的原始DSDT和SSDT文件。为此,请按照此处的指南将文件提取到文件夹中。删除时,请遵循第4章:使用“ refs.txt”删除ACPI文件
  2. 下载MaciASL
  3. 将以下内容添加到MaciASL / Preferences / Sources部分中。
  4. 如果在用Clover提取的文件中有以x结尾的文件,请删除这些文件。
  5. 查找要修补的文件
  6. 将GFX0重命名为IGPU补丁
  7. 显卡关闭
  8. 制作其他必要的补丁。

让我们从示例文件的第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阅读本指南的人员应该注意它。[/警告]如

您所见,由于指南很长,不保证每个人的都能顺利操作成功,但是希望对你有帮助。

附加的文件:1620559650-Ornekdosyalar