天天看點

[翻譯] 禁用雙GPU筆記本電腦的獨顯 Disabling discrete graphics in dual-GPU laptops

來源:https://www.tonymacx86.com/threads/guide-disabling-discrete-graphics-in-dual-gpu-laptops.163772/

Overview 概述

The purpose of this guide is to show you how to disable the discrete graphics device with DSDT/SSDT edits in “switched” dual-GPU laptops (eg. Intel+Nvidia[Optimus] and Intel+Radeon).

本指南的目的是向您展示如何通過編輯 DSDT/SSDT 禁用可切換雙GPU的筆記本電腦的獨顯(如:Intel+Nvidia[Optimus] 和 Intel+Radeon )。

Because only the Intel device can be used in these laptops, the discrete device is generally left active and using power, contributing to heat, noise, and battery usage. Although the device can usually be disabled in BIOS, it is better to disable it with a custom ACPI setup so the device can still be used when booting Windows.

由于這些筆記本電腦通常隻能使用英特爾核顯, 此時獨顯卻仍然保持活動并消耗電力, 導緻更大熱量、噪音和電池消耗。盡管通常可以在 BIOS 中禁用該裝置, 但最好通過自定義 ACPI 設定以禁用該裝置, 這樣在使用 Windows 時仍可使用獨顯。

Although it is a relatively simple patch (sometimes only a one line change), because of the fact that the patch is done to one or more SSDTs, there are many pitfalls to fall into. Also, certain machine/ACPI configurations require different approaches, leading to more complexity. The example DSDT/SSDT set that this guide uses is one of the more complex setups, so it covers most of the issues you might run into with your own.

雖然屏蔽獨顯是一個相對簡單的更新檔 (有時隻有一行更改), 但由于修補涵蓋一個或多個 SSDT 檔案, 是以其中還是會有許多坑。此外, 某些特定機型或ACPI設定需要特定的方法, 以緻情況更為複雜。本指南使用的 DSDT/SSDT 示範的是其中一種較為複雜的情況, 是以它可能涵蓋了您會遇到的大多數問題。

You should follow this walkthrough with the example before patching your own.

在修補自己的DSDT前, 請通讀全文并用本例進行演練。

The laptop being used for this guide/example is an “Asus UX303LN” with Intel HD4400 + Nvidia. The Clover F4 extracted tables (ACPI/origin directory) are provided in an attachment to this post.

本指南使用 Asus UX303LN 筆記本電腦作為例子,它内置了Intel HD4400 和 Nvidia 顯示卡。本文附件提供了通過 Clover F4 指令提取 (ACPI/origin 目錄)的檔案。

Note: There is also a full hotpatch guide (for this same computer) here

注: 對于該型機器,這裡有一份完整的熱更新檔指南 (适用于同一台計算機): https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/

Patching requirements(修補要求)

The goal is quite simple. These machines provide an

_OFF

method, usually in an SSDT, that can be called to power down the discrete device. The easiest fix is to call

_OFF

from the corresponding

_INI

method. Note that the

_OFF

method may be in DSDT or may have a different name (

GPOF

,

OPOF

,

_PS3

, etc.)

目标很簡單。這些計算機通常在 SSDT 中提供了

_OFF

方法 , 調用該方法可以關閉獨顯的電源。最簡單的修補方法是在相應的

_INI

方法中調用

_OFF

。請注意,

_OFF

方法可能位于 DSDT 中, 也可能具有不同的名稱 (

GPOF

OPOF

_PS3

等)

Certain implementations of

_OFF

cannot be called from

_INI

as they access the EC (Embedded Controller) space. For these machines,

_OFF

(or a portion of it) must be delayed until

_REG

(when Arg0==3 and Arg1==1, see ACPI spec for more information regarding

_REG

). In some cases, calling from

_REG

is too late and it is either not effective or leads to a crash. In such a case, editing

_OFF

to remove EC dependencies is necessary, so it can be called from

_INI

. The code that was removed from

_OFF

is then inserted into

_REG

so the effect is the same although the EC work is done later. This is the case with the example ACPI setup in this guide.

但某些通路了 EC (嵌入式控制器) 空間的

_OFF

實作不能從

_INI

調用。對于這些機器,

_OFF

(或它的一部分) 必須推遲到

_REG

(當 Arg0==3 且 Arg1==1, 請參閱 ACPI 規範中有關

_REG

的細節)。有時, 在

_REG

中調用由于為時已晚, 以緻修補失敗或崩潰。此時, 就必須編輯

_OFF

, 删除其中依賴 EC 的部分, 比如說把這部分挪到

_INI

裡。即将

_OFF

中删除的代碼插入到

_REG

中, 是以盡管 EC 代碼執行推遲了一些, 但效果是一樣的。本指南中的 ACPI 設定示例就是這種情況。

Note #1: Not all

_OFF

implementations have EC related code. In that case, no need to move any such code to

_REG

as it simply didn’t exist in the first place.

注1: 并非所有

_OFF

實作都具有與 EC 相關的代碼。此時, 無需将本就不存在的此類任何代碼移至

_REG

Note: #2: Not all ACPI sets have an

_INI

at the

_OFF

path. In that case, you simply add an

_INI

that calls off. Easiest to add it just before the

_OFF

method:

注2: 并非所有的 ACPI 代碼在

_OFF

路徑上都有

_INI

。此時, 隻需添加一個會調用關閉方法的

_INI

。最簡單的辦法是在

_INI

方法最前面添加

_OFF

:

Method(_INI) { _OFF() }
           

Basic patching 基本更新檔

It is important to understand how to extract, disassemble and patch your DSDT/SSDT files, and how to install them for your bootloader, etc. This subject is covered in my guide: http://www.tonymacx86.com/yosemite-laptop-support/152573-guide-patching-laptop-dsdt-ssdts.html. You should be familiar with it before attempting this guide.

了解如何提取、反編譯和修補 DSDT/SSDT 檔案以及如何為引導加載程式安裝這些檔案及其相關知識非常重要。我的指南中涵蓋了這方面内容。在嘗試本指南之前, 您應該先熟悉上述連結中的相關内容。

Because patching for the basics is important, we’ll do that first here before getting started on the patching required for disabling the Nvidia card in the example.

由于基礎修補很重要, 是以, 本例在示範如何通過修補禁用 Nvidia 顯示卡之前, 我們首先搞好基礎修補。

This guide will assume that most common rename patches are done in

config.plist/ACPI/DSDT/Patches

. And it will assume that

AutoMerge=true

(relatively new Clover feature, added by RehabMan). These patches and settings are default in the guide plists: https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/

本指南将假定大多數常見的重命名更新檔都是在

config.plist/ACPI/DSDT/Patches

中完成的。同時假設

AutoMerge=true

(RehabMan 添加的, 相對較新的 Clover 功能)。這些更新檔和設定在本指南的 plists 中是預設的:

In the ACPI patching guide (linked above), the kind of ACPI configuration assumed by this guide is “Partial hotpatch with patched SSDTs”, as described in “Recommended configurations”.

在 ACPI 修補指南 (上述連結) 中, 其假定的 ACPI 配置項設定為 “應用 SSDT 局部熱修複更新檔”, 如 “推薦配置” 中所述。

First, the files are extracted (you can simply download the example files), then disassembled with iasl:

首先, 提取檔案 (您隻需下載下傳示例檔案), 然後用 iasl 反彙編:

iasl -da -dl *.aml
           
After disassembly we can proceed to patch the various files. Because we have common renames in config.plist, and are using

AutoMerge=true

, we only need to apply functional patches not covered by the defaults from config.plist. And there is no need to correct errors in a file when it requires no patching. The file is, instead, simply omitted from ACPI/patched.

反編譯後, 我們可以開始對各種檔案進行修補。由于我們在 config. plist 中已經設定了

AutoMerge = true

和常見的重命名更新檔, 是以我們隻需對 config. plist 預設設定未涵蓋的部分進行修補。而且, 當檔案無需修補時, 就不需要更正反編譯檔案中的錯誤, 也無需放到 ACPI/patched 檔案夾中。

For DSDT.dsl:

以下是适用于 DSDT.dsl 檔案的常見更新檔:

"Fix PARSEOP_ZERO Error (agressive)"
"Fix ADBG Error"
"Rename _DSM methods to XDSM"
"IRQ Fix"
"SMBUS Fix"
"OS Check Fix (Windows 8)"
"Add IMEI"
"RTC Fix"
"Fix _WAK Arg0 v2"
"ASUS N55SL/VivoBook"
"USB3 _PRW 0x6D (instant wake)"
"Audio Layout 12"
           
Since our config.plist has the common renames, none of the SSDTs need any patching, except those required to disable the discrete graphics device. At this point, we are ready to look at the SSDTs to determine the patches needed to disable the device.

由于我們的 config. plist 中已經設定了常見的重命名更新檔, 是以除了禁用獨顯所需的更新檔外, 其它 SSDT 無需作任何修補。此時, 我們已準備好檢視 SSDT, 以确定禁用裝置所需的修補程式。

Patching for discrete disable 屏蔽獨顯更新檔

Remember the goal? Call

_OFF

from

_INI

還記得目标嗎?在

_INI

裡調用

_OFF

Now… how to find the SSDT that has

_OFF

. We can use grep:

我們可以使用

grep

指令找出含有

_OFF

字元串的 SSDT 檔案:

grep -l Method.*_OFF *.dsl
           
Which shows:

結果顯示:

SSDT-7.dsl
SSDT-8.dsl
           
Also, it is nice to know where the

_INI

methods are:

同樣,搜尋含有

_INI

方法的檔案:

grep -l Method.*_INI *.dsl
           
Which shows:

結果顯示:

DSDT.dsl
SSDT-6.dsl
SSDT-7.dsl
SSDT-8.dsl
           
Note: SSDT-7 and SSDT-8 are listed again. This is likely where the

_OFF

and associated

_INI

are located…

注: SSDT-7 和 SSDT-8 出現了兩次。這很可能就是

_OFF

及其關聯的

_INI

所在的檔案。

We could also open each file individually into MaciASL and search for

_OFF

and

_INI

, but using grep is a bit easier and faster.

我們也可以用 MaciASL 分别打開每個檔案, 并搜尋

_OFF

_INI

, 但使用

grep

更容易也更快。

When we open SSDT-7.dsl and look for “Method (_INI”, we find this:

當我們打開 SSDT-7.dsl 并查找 “

Method (_INI

” 時, 我們發現:

Method (_INI, 0, NotSerialized)  // _INI: Initialize
{
    Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
}
           
This is a typical

_INI

method for a discrete device, and one that we want to patch so it calls

_OFF

.

這是獨立裝置的一種典型的

_INI

方法, 我們希望對其進行修補, 使其調用

_OFF

If we click in the method body, we can see the ACPI “path” that this method lives in. MaciASL shows it on the status bar: SSDT -> \_SB.PCI0.RP05.PEGP -> _INI. Now we know that the path to

_OFF

should also be _SB.PCI0.RP05.PEGP._OFF.

如果我們在方法體中單擊, 我們可以看到此方法所在的 ACPI “路徑”。MaciASL 狀态欄上顯示: SSDT -> \_SB.PCI0.RP05.PEGP -> _INI。現在我們知道, 到

_OFF

的路徑也應該是 \_SB.PCI0.RP05.PEGP._OFF 。

So, we know that

_OFF

is either in SSDT-7.dsl or SSDT-8.dsl. If you open SSDT-7.dsl and look for

_OFF

, you find it is a method inside a PowerResource macro. This is not the

_OFF

method we want. Open SSDT-8.dsl and look for

_OFF

there and you’ll find a regular

_OFF

method, which is what we are looking for. So now we know where

_OFF

is. We need to know, as it is necessary to review the code for potential EC access.

現在, 我們知道

_OFF

是在 SST-7.dsl 和 SST-8.dsl 裡面。如果打開 SSDT-7.dsl 并查找

_OFF

, 則會發現它是 PowerResource 宏中的一種方法。這不是我們想要的

_OFF

方法。打開 SSDT-8.dsl, 并搜尋

_OFF

, 你會發現一個正常的

_OFF

方法, 這就是我們要找的。是以現在我們知道

_OFF

在哪裡了。我們還需檢查代碼, 以了解

_OFF

是否含有潛在 EC 通路。

In SSDT-8.dsl,

_OFF

is defined as follows:

在 SSDT-8.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 ()
}
           
If you examine the code, you can see it accesses the EC ( \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero). This is going to be a problem and will prevent

_OFF

from executing fully when called from

_INI

. Keep in mind it is not always this obvious. The code could have called a method not directly related to the EC, which in turn calls a method in the EC (indirect access). So you may need to do some digging. This example was obvious as the method path includes EC0.

如果您檢查代碼, 您可以看到它通路了 EC (\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)。這會導緻以後

_INI

調用

_OFF

時無法完整執行的問題。切記, 這種情況有時并不明顯。代碼可以調用一個表面上與 EC 沒有直接聯系的方法, 但該方法内部最終會調用 EC 中的方法 (間接通路)。是以你可能需要做一些挖掘。此示例由于方法路徑包括了 EC0 才很明顯 。

The best way to deal with the EC access is to remove the offending code from

_OFF

.

處理 EC 通路的最佳方法是從

_OFF

中删除有問題的代碼。

We can do it manually, or use a patch like this:

我們可以手動執行此操作, 也可以使用如下修補程式:

into method label _OFF parent_label \_SB.PCI0.RP05.PEGP code_regex .*EC.* removeall_matched;
           
The modified

_OFF

method is this:

修改後的

_OFF

方法如下:

Method (_OFF, 0, Serialized)  // _OFF: Power Off
{
    If (LEqual (CTXT, Zero))
    {
        If (LNotEqual (GPRF, One))
        {
            Store (VGAR, VGAB)
        }

        Store (One, CTXT)
    }

    SGOF ()
}
           
After making this change, attempt to compile SSDT-8.dsl. You will notice it has errors. Really, we should have taken care of these errors before making changes. But we can fix them now by applying the “Cleanup/Fix Errors (SSDT)” patch. That removes some of the errors, but there is still one additional error at line 620:

進行此更改後, 嘗試編譯 SSDT-8.dsl。你會注意到它有錯誤。其實, 在修改之前, 我們應該先解決掉這些錯誤。但我們現在可以通過使用 “Cleanup/Fix Errors (SSDT)” 更新檔來修複它們。這能排除一些錯誤, 但在620行仍然有一個錯誤:

Store (TCAP, \_PR.CPU0._PTC ())
           
This code is invalid, and in fact will be skipped by the ACPI runtime. \_PR.CPU0._PTC is a method, and of course it is not valid to store something “into” a method. We can simply comment this code:

這行代碼無效, 實際上 ACPI 運作過程中會跳過它。因為 \_PR.CPU0._PTC 是一個方法, 顯然, 将某些内容 “存儲到” 方法中是無效的。我們可以簡單地注釋掉它:

//    Store (TCAP, \_PR.CPU0._PTC ())
           
We should still have the line that we removed, \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero), executed in

_REG

, so keep that in mind.

切記, 前面我們删掉的那行代碼 \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero), 需要在

_REG

中執行。

Now that we have fixed

_OFF

, let’s call it from

_INI

, defined in SSDT-7.dsl.

現在我們已經修複了

_OFF

, 讓我們在 SSDT-7.dsl 中定義的

_INI

裡面調用它。

We can apply patch “Disable from _INI (SSDT)”. But our method’s path is slightly different from what is common, so we need to modify the patch. Also, we are calling to

_OFF

which is defined in SSDT-8.dsl, so we need the External declaration.

我們可以使用 "Disable from _INI (SSDT)"更新檔。但我們的方法的路徑與常見的方法略有不同, 是以我們需要修改更新檔。此外, 我們調用的是 SSDT-8.dsl 裡的

_OFF

, 是以我們需要進行外部聲明。

The modified patch follows:

修改後的更新檔如下所示:

into method label _INI parent_label \_SB.PCI0.RP05.PEGP insert
begin
//added to turn nvidia/radeon off\n
External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj)\n
_OFF()\n
end;
           
After applying this patch, the patched

_INI

now reads:

使用上述更新檔後,

_INI

代碼如下所示:

Method (_INI, 0, NotSerialized)  // _INI: Initialize
{
    Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
    //added to turn nvidia/radeon off
    External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj)
    _OFF()
}
           
Now we need to turn our attention to DSDT

_REG

. The

_REG

method needs to do the EC work that

_OFF

used to do before we patched it.

現在, 我們把注意力轉向 DSDT

_REG

_REG

方法需要執行

_OFF

在修補之前所做的 EC 操作。

Here is the original

_REG

(for EC0) in DSDT:

下面是 DSDT 中的原始

_REG

(對于 EC0):

Method (_REG, 2, NotSerialized)  // _REG: Region Availability
{
    If (LEqual (Arg0, 0x03))
    {
        Store (Arg1, ECFL)
    }
}
           
There is a patch in my repo to call

_OFF

from

_REG

. We can use it as a base for what we need:

我的存儲庫有一個用于

_REG

調用

_OFF

的更新檔, 可以把它作為我們要的更新檔的基礎:

into method label _REG parent_hid PNP0C09 insert
begin
//added to turn nvidia/radeon off\n
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))\n
{\n
    External(\_SB.PCI0.PEG0.PEGP._OFF, MethodObj)\n
    \_SB.PCI0.PEG0.PEGP._OFF()\n
}\n
end;
           
Instead of calling

_OFF

, we want it to call SPIN as the original

_OFF

did.

我們不希望它調用

_OFF

, 而是像原來的

_OFF

一樣調用 SPIN。

The modified patch is:

修改後的更新檔代碼如下:

into method label _REG parent_hid PNP0C09 insert
begin
//added to turn nvidia/radeon off\n
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))\n
{\n
    \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)\n
}\n
end;
           
The modified

_REG

after patching:

修改後的

_REG

代碼如下:

Method (_REG, 2, NotSerialized)  // _REG: Region Availability
{
    If (LEqual (Arg0, 0x03))
    {
        Store (Arg1, ECFL)
    }
    //added to turn nvidia/radeon off
    If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
    {
        \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
    }
}
           
And that concludes patching. At this point all the patched files can be compiled and placed in ACPI/patched.

這就完成了本篇所要實作的屏蔽獨顯更新檔。此時, 可以編譯所有修補過的檔案, 并将其放到 ACPI/patched 檔案夾。

Only the patched files are placed in ACPI/patched:

ACPI/patched 裡面隻需放置以下三個修補過的檔案:

DSDT.aml (has core patches,

_REG

patch)(有核心更新檔,

_REG

更新檔)

SSDT-7.aml (has

_INI

patch)(有

_INI

更新檔)

SSDT-8.aml (has

_OFF

patch)(有

_OFF

更新檔)
Note that this example is complex and not all laptops will have the same configuration. For most, the

_INI

and

_OFF

associated with the discrete device are in the same SSDT. In that case it is not necessary to use the External declaration. You can use the “Call

_OFF

from

_INI

(SSDT)” patch directly. Some even have it in DSDT (again you can use the patch directly). And not all

_OFF

methods access the EC, so the movement of the EC related code to

_REG

is not needed.

請注意, 此示例很複雜, 并非所有筆記本電腦都具有相同的配置。大多數情況下, 與獨立裝置關聯的

_INI

_OFF

位于同一個 SSDT 中。此時, 不需要使用外部聲明。您可以直接使用 “Call

_OFF

from

_INI

(SSDT)” 更新檔。有時, 甚至 DSDT 中也有它 (同樣, 您可以直接使用更新檔)。而且并非所有

_OFF

方法都通路 EC, 此時不需要将 EC 相關代碼移到

_REG

It is also possible that the EC related code is more than one line. All such code should be moved to

_REG

.

也有可能 EC 相關代碼是多行的。所有這些代碼都應移動到

_REG

Sleep/Wake Problems 睡眠 / 喚醒問題

Some laptops have issues with sleep/wake or even shutdown/restart with this patch in place. This was the case with the HP ProBook (with Radeon). The fix is to re-enable the card before sleeping and disable it on wake.

在應用上述更新檔後, 一些筆記本電腦睡眠 / 喚醒出現問題, 甚至關機 / 重新開機也出現了問題。HP ProBook (内置 Radeon顯示卡) 的情況就是如此。解決方法是在睡眠前重新啟用該卡, 并在喚醒時再将其禁用。

There is a patch in the repository to accomplish this. It is called “Disable/Enable on _WAK/_PTS (DSDT)”.

存儲庫中有一個稱為 "Disable/Enable on _WAK/_PTS (DSDT)"更新檔用于解決上述問題。

But since this DSDT has

_OFF

/

_ON

at a different path than the patch expects, we need to modify it.

但是, 由于此 DSDT 裡面的

_OFF

/

_ON

與實際更新檔所預期的路徑不同, 我們需要對其進行修改。

Original patch:

原始更新檔:

into method label _PTS code_regex ([\s\S]*) replace_matched
begin
External(\\_SB.PCI0.PEG0.PEGP._ON, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.PEG0.PEGP._ON)) { \\_SB.PCI0.PEG0.PEGP._ON() }\n
%1
end;

into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
External(\\_SB.PCI0.PEG0.PEGP._OFF, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.PEG0.PEGP._OFF)) { \\_SB.PCI0.PEG0.PEGP._OFF() }\n
%1
end;
           
Modified patch (PEG0 changed to RP05):

将更新檔的 PEG0 修改為 RP05 :

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;
           
If your laptop doesn’t have problems with sleep/wake/restart/shutdown with the discrete device disabled, then you do not need this patch. You need to test your laptop first to determine if it is needed.

如果您的筆記本電腦在禁用獨顯時沒有上述睡眠 / 喚醒 / 關機 / 重新開機問題, 則不需要此修補程式。您需要先測試您的筆記本電腦, 以确定是否需要它。

Note: If you patched

_OFF

to remove EC related code, and you’re calling

_OFF

from

_WAK

, you may need to also execute that removed code in

_WAK

. One way to do that is to have an XOFF that is the original/un-patched

_OFF

that you can call from

_WAK

instead of calling the (patched)

_OFF

.

注: 如果您修補

_OFF

以删除與 EC 相關的代碼, 并且正在從

_WAK

調用

_OFF

, 則可能還需要在

_WAK

中執行删除的代碼。有一個 XOFF 方法, 它實際上是原始/未修補的

_OFF

, 您可以從

_WAK

調用它, 而不是調用 (修補過的)

_OFF

Older laptops 舊型号筆記本電腦

You will notice that older laptops may not have

_OFF

, or may have an empty

_OFF

. In such cases, you may notice that

_PS3

is required. In some cases,

_PS3

will not work unless the invoke the associated

_DSM

with appropriate params. Details are in post #96 of this thread: http://www.tonymacx86.com/yosemite-laptop-support/163772-guide-disabling-discrete-graphics-dual-gpu-laptops-10.html#post1056748

您會注意到, 較舊的筆記本電腦可能沒有

_OFF

, 或

_OFF

可能是空的。此時, 您可能需要關注

_PS3

。有時, 調用

_PS3

也不起作用, 除非用特定的參數調用關聯的

_DSM

。詳情參見文章的 #96 樓:

Problem Reporting 報告問題

If you have problems with your DSDT/SSDTs in patching or fixing errors, please provide all the native files that you’re working with.

如果您在修補或修複 DSDT/SSDT 錯誤方面遇到問題, 請提供您正在處理的所有本機檔案

If you attempt to disable your discrete card according to this guide and it is not working, please provide “Problem Reporting” data as per FAQ.

如果您按照本指南嘗試禁用獨顯, 但無效, 請根據下面連結給出的 FAQ 指引, 提供資料 。

Read FAQ, “Problem Reporting”. Carefully. Attach all requested files/output.

在提問前, 請務必仔細閱讀 FAQ 裡面的常見問題解答, 并在"報告問題"文章中添加所有提問所需檔案或生成檔案。FAQ 常見問題解答

Sample Attachment (Asus ux303ln 原始DSDT/SSDT)

The following files are used as the example ACPI set in this guide:

在下方連結下載下傳本文示範的ACPI修補用到的例子檔案:

下載下傳位址