<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] **** # 【指南】 給筆記本的 DSDT/SSDTs 打補丁 英文原文:[Patching LAPTOP DSDT/SSDTs](https://www.tonymacx86.com/threads/guide-patching-laptop-dsdt-ssdts.152573/) # 開始學習SSDT/DSDT 常見論壇上的大神們談論 DSDT、SSDT、AML、DSL 不明覺厲,曾遍尋論壇求解釋未果。 我更喜歡通過 DSDT 進行設備注入的**SSDT**,因為**更新 BIOS,移動 PCI 卡或添加/移除 PCI卡可能需要您提取和編輯新的DSDT**。 很多人都知道使用 DSDT 補丁可以開雙核,但 DSDT 的功能不僅僅如此,除了開雙核,還可以可以修復 ACPI 缺陷(不需要 Disabler.kext ,原版cpupowermanagement 正常使用),RTC,HPET 缺陷(原版 kext 正常工作),顯卡(代替 efistring),聲卡(只是代替了 HDAEnabler.kext ),網卡(包括 TimeMachine 問題),此外還可以解決其他很多奇奇怪怪的問題,因此建議盡可能使用 DSDT 補丁。 # ACPI ACPI 是 Hewlett-Packard, Intel, Microsoft, Phoenix 和 Toshiba 共同制定的一個開放的行業規范。是 The Advanced Configuration and Power Interface 的縮寫,也就是“電源管理模式和配置管理的接口規范”。從名字可以看出主要是“電源管理”和“配置管理”。是 BIOS 的一個高級功能模塊。 它幫助操作系統合理控制和分配計算機硬件設備的電量,有 了ACPI,操作系統可以根據設備實際情況,根據需要把不同的硬件設備關閉。如Win7或者Win8系統,系統睡眠時,系統把當前信息儲存在內存中,只保留內存等幾個關鍵部件硬件的通電,使計算機處在高度節電狀態。當然這只是它功能中的很少一部分。 它主要涵蓋的功能包括: 1. System power management(系統電源管理) 2. Device power management(設備電源管理) 3. Processor power management(處理器電源管理) 4. Device and processor performance management(設備及處理器性能管理) 5. Configuration / Plug and Play(配置/即插即用) 6. System Events(系統事件) 7. Battery management(電池管理) 8. Thermal management(溫度管理) 9. Embedded Controller(嵌入式控制器) 10. SMBus Controller(SMBus控制器) 在計算機應用平臺,ACPI 越來越重要。ACPI由很多表組成,包括:RSDP,SDTH,RSDT,FADT,FACS,**DSDT**,**SSDT**,MADT,SBST,XSDT,ECDT,SLIT,SRAT。其中**DSDT**就是它的一個重要的描述表。 DSDT 包含了所有和基本系統(basesystem)不同的設備的信息,basesystem 每臺機器都是一樣的,這個是在 acpispec 里指定的,但是每臺機器都是不相同的,所以不相同的設備大都是由 DSDT 表來描述。它包含了很多AML代碼。大多數 BIOS 是針對 windows 開發的,而 windows 自己也不完全遵循 acpi 規范,所以因為 BIOS 的 bug,這些代碼本身可能有錯,導致其他的系統,如 linux,mac os 出錯。 **Mac OS X不完整支持ACPI規范,僅支持它的子集DSDT**。 [[指南] Intel IGPU HDMI/DP audio (Sandy/Ivy/Haswell/Broadwell/Skylake)](%5B%E6%8C%87%E5%8D%97%5DIntelIGPUHDMI-DPaudioSandy-Ivy-Haswell-Broadwell-Skylake.md)我們可以手動修復這些bug**使之兼容MAC系統**。 DSDT在bios里是以編譯后的`aml`文件存在,需要把它解出來,反編譯成`aml`代碼形式(dsl文件,文本文件),代碼修改完畢再重新編譯,替換掉bios里原來的dsdt表。 **對于非蘋果電腦,要使用上盡可能完美的OS X系統,可以說修改DSDT是最有效的方法。** # DSDT DSDT 是 The Differentiated System Description Table 的簡寫。字面上就可以知道它是一個描述系統不同信息的表。它包含了所有除基本系統以外所有不同設備的信息,也就是**每臺計算機設備的基本系統是相同的,而不相同的設備用 DSDT 來描述**。 DSDT 表代碼為 ACPI Machine Language (AML)。 用戶通過修改DSDT可以得到更好的硬件支持,最簡單的理解就是DSDT是描述硬件的。 修改 DSDT 的主要目的就是讓 mac系統識別存在這個硬件并告訴 mac 系統你的硬件位置,以便讓 mac 系統內置的驅動來驅動硬件工作。 修改 DSDT 的基本過程: 提取 bios 的 AML 文件,反編譯為 dsl text 文件,修改完畢后,編譯到 Aml,然后替換 BIOS 中的 DSDT。 # 基本步驟 如果下面選項會對原始ACPI產生顯著的改變(尤其是系統內存區域),你需要重新提取,重新打補丁: - 更新 BIOS - 更改 BIOS 選項 - 更改硬件和內存設置。 使用補丁修改 DSDT/SSDT 包含了以下步驟: - 提取原始ACPI文件 - 反編譯原始文件 - 分析并篩選這些原始文件 - 使用補丁修改 - 編譯并保存,再放到啟動引導的特定目錄 ## 提取原始ACPI文件(推薦) 使用 Clover 的 `F4`進行提取,因為易于提取,并且易于比較 `ACPI/origin` 和 `ACPI/patch`(用于故障排除)。 所有BIOS實現都向操作系統提供 ACPI 文件。 因此,在任何操作系統上,您都可以提取它們以便以后進行修補。 因此,可以在 Linux,OS X,Windows甚至 Clover 引導加載程序中進行提取。 在Clover主引導程序屏幕上,您可以按**F4**,Clover 會將本地ACPI文件轉儲到`EFI/Clover/ACPI/origin`。 進入系統后對它們以進行反匯編和修補。 注意,有的 BIOS 可能按`F4` 鍵沒用,而需要 `Fn+F4`,所以,如果不確定的話,`F4` 和 `Fn+F4` 都按一次。提取的時候,你不會看到任何是否完成的提示,只是會因為正在寫文件而出現一點延遲現象,你可以等待5s。如果是用Clover的USB設備(U盤、硬盤)啟動的,文件會被提取到USB設備,這樣會感到比較明顯的延遲。 有時候,Clover 提取的 SSDT 可能會重復。重復的文件,會影響到反編譯。如果你反編譯的時候看到了這樣的提示信息(duplicate definitions),則需要分析所有 SSDT 以消除重復的文件。通過查看文件大小很容易看出哪些是重復的。大小相同的文件可能是重復的。 您可以在終端中查看所有SSDT的文件大小(以字節為單位): ``` ls -l SSDT*.aml ``` ## 在Linux提取(可以順便提取聲卡codec) 在Linux系統里,可以直接在系統分區里找到原始ACPI文件。你可以在 `/sys/firmware/acpi/tables` 和 `/sys/firmware/acpi/tables/dynamic` 看到。可以簡單地用命令進行拷貝。 Linux系統不需要安裝,做一個啟動U盤(推薦 Ubuntu Desktop 版本)就可以了:http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-windows 打開Linux的終端輸入: ~~~ sudo cp -R /sys/firmware/acpi/tables DEST ~~~ **注意: 用FAT32格式的USB設備(U盤、硬盤)的掛載點的路徑,替換命令里的 `DEST`** (Xee:出現文件權限問題,可以先拷到桌面,在從桌面復制到U盤) 你的U盤或硬盤需要是FAT32格式的。FAT32格式可以避免出現文件權限問題,因為FAT32格式在Linux系統里沒有文件權限的問題。用于替換DEST的 自動掛載的USB設備的名字,取決于你的Linux版本和它的啟動方式。你可以在終端輸入`mount`命令,來查看當前的掛載點。或者,在圖形界面,把鼠標移到文件管理器上相應的USB設備名上。 Mac下提取也是非常容易的。比如使用:`DSDT Editor` 等工具。 ## 準備反匯編工具 > [Compiling and decompiling ACPI Tables](https://khronokernel.github.io/Getting-Started-With-ACPI/Manual/compile.html) > [https://github.com/acidanthera/MaciASL/releases](https://github.com/acidanthera/MaciASL/releases) 要正確反匯編解壓縮的文件,您需要從終端運行的 iasl 編譯器。 您將需要最近的 `iasl` 版本才能正確反匯編它們。這里有一個[適當的版本](https://bitbucket.org/RehabMan/acpica/downloads/)。將 iasl 二進制文件復制到你的路徑(例如`/usr/bin`)是一個好主意,所以很容易從終端訪問。 例如,如果您將其下載到 `~/Downloads/iasl.zip`,則可以在終端中提取并復制它: ``` cd ~/Downloads unzip iasl.zip sudo cp iasl /usr/bin ``` ### 從github上構建最新的`iasl` 你也可以從我的github構建我的 iasl 的最新版本。iasl 的最新版本最終將在 bitbucket 鏈接上提供,但對于那些想要處于“作死邊緣”的用戶,您可以自己構建。最新的版本總是傾向于有實驗性的和沒有經過良好測試的代碼。 假設你已經安裝了 Xcode: ``` mkdir ~/Projects && cd ~/Projects git clone https://github.com/RehabMan/Intel-iasl.git iasl.git cd iasl.git ``` 然后build它: ``` make ``` 在這一點上,你可以安裝它: ``` sudo make install ``` 假設您已將 `MaciASL.app` 安裝到 `/Applications`,那么您可以在 `MaciASL`中使用新版本(您剛剛構建并安裝到 `/usr/bin`): 代碼(文本): ``` sudo cp /usr/bin/iasl /Applications/MaciASL.app/Contents/MacOS/iasl62 ``` ## 反編譯ACPI文件 雖然提取到的 aml 文件可以用 MaciASL 直接打開,但不建議這樣做。用MaciASL直接打開aml文件,是軟件在做對打開的這個文件的單獨反編譯。然而,ACPI文件之間有著緊密的聯系,只對一個文件單獨反編譯,得到的文件會包含許多難于修復的錯誤。 所以,最好的方法是,**使用iasl編譯器,同時反編譯所有文件**。要做的準備工作有,新建一個文件夾用于存放所有DSDT和SSDT文件,并重命名所有文件,例如加上`.aml`擴展名。 然后在OS X Terminal中反匯編: ``` cd "to directory where you placed all SSDT/DSDT" iasl -da -dl DSDT.aml SSDT*.aml ``` 對于較新的ACPI集(通常\[但不總是\]與Skylake和以后),不需要 `-da`,因為它們已經嵌入了外部操作碼: ``` cd "to directory where you placed all SSDT/DSDT" iasl -dl DSDT.aml SSDT*.aml ``` **注意**:**不要用`-da`命令去反編譯 DSDT和 SSDT 以外的 ACPI文件,那將是無效的(Xee:所以還是把多余的文件先清掉!)**。 **注意**:請閱讀下面有關`refs.txt`的部分。使用`refs.txt`需要更多的努力,但可以消除許多常見的錯誤。 反編譯成功后,你將得到 所有文件的 dsl 形式,修改就是使用 dsl 文件進行。修改好 dsl 文件后,使用 MaciASL 的另存為,并選擇 文件格式 "ACPI Machine Language Binary” ,再在文件名那里加上 .aml 擴展名,保存。編譯保存為aml之后,把它們放到引導程序規定的加載目錄(變色龍 `/Extra`,`Clover /EFI/Clover/ACPI/patched`)。保存好 dsl 文件,以防將來需要應用更多的修補程序。 **讓我再次陳述它(因為很多人會出現這樣問題):如果您直接在MaciASL 中打開一個AML文件,然后單擊Compile,你做錯了。你們要記住,不要左耳朵進右耳朵出!!!!** 該規則的唯一例外是使用最新的iasl編譯的AML文件,該文件中嵌入了外部操作碼。這包括您自己用當前的iasl和原始設備制造商(通常是Skylake或更高版本)編譯的本地ACPI編譯的文件。 注意:使用 ACPI 6.1 的新工具在處理使用新版iasl編譯的AML文件時更加健壯。ACPI 6.1為編譯器添加了一個功能,將外部引用的操作碼添加到AML二進制文件中。ACPI 解釋器會忽略這些數據,但這些數據對于反匯編程序(也只有 iasl 的 ACPI 6.1 版本)非常有用,可以從獨立的AML中創建更好的反匯編。因此,您可能會發現使用最新工具重新編譯的 AML 文件可能會更可靠地直接打開。當然,現在的 OEM ACPI DSDT和 SSDT 目前還沒有未使用新工具,所以如本指南中所述,您仍然必須首先使用選項 `-da`將所有 DSDT / SSDT 反編譯。 留意一下 蘋果的Snow Leopard 系統的相關實現:不幸的是,10.6.8的`ACPI`太過時了,以至于它用外部操作碼(the external opcode)會阻塞AMLs。如果您計劃在 Snow Leopard 上使用您的`ACPI`文件,那么您就可以在編譯您的AML文件時需要對 `iasl` 使用無證的 `-oe` 選項。當您從MaciASL編譯(另存為)時,這個選項是不設置的,所以您需要在終端中編譯您的文件。“`-oe`”選項會禁止在輸出AML文件中生成外部的操作碼。 # 使用 `refs.txt` 反匯編 有時還有其他未解決的外部因素(任何文件中都未定義的符號)。 iasl 反匯編程序將嘗試猜測參數的數量,但通常猜測不正確。 您可以通過在文本文件中提供外部聲明來更正它。 SGPO,ECRD,ECWT 和 MMTB 是一些常見的未解析符號。 下面的 `refs.txt` 內容有一些常見的(但不太常見)缺少的符號(正如該貼中有些用戶所報告的),反匯編程序容易使它們混淆。 首先在您的 `DSDT/SSDT` 文件所在的目錄中創建 `refs.txt`: ``` External(MDBG, MethodObj, 1) External(_GPE.MMTB, MethodObj, 0) External(_SB.PCI0.LPCB.H_EC.ECWT, MethodObj, 2) External(_SB.PCI0.LPCB.H_EC.ECRD, MethodObj, 1) External(_SB.PCI0.LPCB.H_EC.ECMD, MethodObj, 1) External(_SB.PCI0.PEG0.PEGP.SGPO, MethodObj, 2) External(_SB.PCI0.GFX0.DD02._BCM, MethodObj, 1) External(_SB.PCI0.SAT0.SDSM, MethodObj, 4) External(_GPE.VHOV, MethodObj, 3) External(_SB.PCI0.XHC.RHUB.TPLD, MethodObj, 2) ``` 注意:創建 `refs.txt` 的一個方便的方法是在終端中使用 `pbpaste` 命令。復制上面的文本到剪貼板(我假設你知道如何做到這一點),然后: 代碼(文本): ``` pbpaste>refs.txt /* 利用了mac上的兩個命令行工具,pbcopy 可以把管道輸入復制到剪貼板,pbpaste 可以把剪貼板內容導出 */ ``` 這將在您當前的目錄中創建 `refs.txt`。 然后在反匯編過程中使用它: 代碼(文本): ``` iasl -da -dl -fe refs.txt DSDT.aml SSDT*.aml ``` ~~較早版本的`iasl`反匯編程序會將這些外部聲明*放在所有其他外部聲明之前*。這也是一個糟糕的選擇。大多數情況下,您需要移動它們,以便它們遵循其他外部聲明而不是前面的聲明。這將是顯而易見的,因為你會從外部聲明,從 `refs.txt` 插入后面的錯誤。在目前支持ACPI 6.1的`iasl`中,這個bug已經修復了。~~ # 分析原生的ACPI 在反編譯之后,您可能想要查看每個 `dsl` 文件的內容。使用來熟悉每個內容。某些修補取決于內容。 例如,如果要修補以禁用離散圖形設備,則可能正在尋找與該設備相關的 `_OFF` 方法(此過程在單獨的指南中介紹,在本指南的后面部分進行了介紹)。 除了給獨顯打禁用補丁之外,沒有必要對所有的 SSDTs 進行打補丁,因為在[Clover筆記本指南](https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/)中已經完成了常見的重命名操作。重命名最好通過 `config.plist/ACPI/DSDT/Patches` 進行,因為它和手動進行操作相比,可以避免很多的錯誤。 在大多數情況下,您應該只關注 `DSDT.aml`。 # 篩選ACPI文件 對于較舊的計算機(Sandy Bridge和之前),與 CPU 相關的 SSDT 可能會導致問題。如果是這種情況(您已經不得不使用備用的DropTables,`DropOem = true`或`DropSSDT = Yes`),那么您不應該在 `ACPI/patch` 中包含這樣的 SSDT。 我喜歡把所有的 SSDT 按原來的順序包括在內,除非已知會導致問題。請記住,SSDT 不需要任何補丁,不需要重新編譯。您可以直接使用未經修改的原始 AML 文件。 注意:使用當前的[ Clover 筆記本指南](https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/),您需要應用于SSDT的大多數修補程序已經在 `config.plist/ACPI/DSDT/Patches`(IGPU重命名,IMEI重命名,HDAS重命名,EH0x重命名等)中完成。因此,您不大可能需要修補 SSDT。相反,您可以從`ACPI/patched`中省略所有這些元素,并使 `DropOem=false`。在大多數情況下,您只需要修補`DSDT.aml`。 注:從Clover 轉儲的“x” SSDTs文件并同樣地 從 Linux 轉儲的動態子目錄地 SSDTs 動態加載和永遠不會包含在 `ACPI/patched`(這些 SSDTs 和來自SystemMemory 的 ACPI 按需加載)。 所以...假設你認為你可能需要做一些過濾... 在你成功的反匯編你的文件后,看看每一個試圖確定SSDT的目的。如果它與 CPU 相關并且已知會引起問題,就把它拖到其它地方(也可以直接刪除)并且不要通過引導加載程序注入含有它的設置。在大多數情況下,和 CPU 相關的 SSDT 包含了 `Scope _PR.CPUx` 這樣的聲明。 以下是常見的SSDT的特點和功能: - CPU相關:上面已經討論過。包括除非知道會導致問題的。 - SATA:可以留,也可以不留,自己決定就好。 - PTID:一般對蘋果系統來說,是沒用的。也許這個文件還會有很多錯誤。一種比較少的應用情況是,在這個文件里,可以找到 讀取風扇轉速,溫度,或者其它系統狀態 的線索。 - IAOE:如果存在這個文件,通常來講,它會在DSDT里的 `_PTS` 和 `_WAK` 方法被調用。如果刪除這個文件,就會影響到睡眠。 - GFX0:通常包含了 Device GFX0 的SSDT,是和 集成顯卡 相關的。亮度補丁就是針對這樣的文件的。老的筆記本(Haswell以前的),GFX0一般是定義在DSDT里。對于較新的Haswell筆記本電腦,通常在SSDT中定義(盡管它也可以在DSDT中)。 - PEGP:包含PEGP的文件,一般是和 獨顯 和 雙顯卡切換 有關。有時候不只有一個這樣的SSDT,為了實現 屏蔽獨顯 等功能,你需要保留所有包含PEGP的SSDT,并對它們做一些修改。 我們需要弄清楚,每個SSDT的大概是做什么的,哪些需要刪除,哪些需要不做修改地保留,哪些需要修改。 # 修復錯誤 即使同時反編譯所有文件(使用 `iasl` 的 `-da` 參數),還是難免存在錯誤。反編譯后的文件之所以還會有錯誤,是因為一直以來`iasl` 編譯器的版本都在更新、iasl 的實現細節變化了、不同的電腦與系統環境。存在這些錯誤的原因可能是(Rehabman認為),里面調用到的一些方法,實際上是Windows內部實現的(例如 `MMTB`方法和`MDBG`方法)。實際也有這樣的情況,ACPI 文件的代碼原本就存在缺陷或者某些代碼本來就是無效的(有時候很難區分)。 所以..在確定你需要哪些文件之后,你必須對它們進行補丁,以便它們無錯地編譯。在我的記本 MaciASL 補丁存儲庫中有許多這種錯誤的常見補丁。 * MaciASL:https://github.com/RehabMan/OS-X-MaciASL-patchmatic * 筆記本電腦補丁:https://github.com/RehabMan/Laptop-DSDT-Patch 注意:以上補丁源里的補丁,沒有在 DSDT Editor 軟件里測試過。DSDT Editor 軟件存在著很多bug,內置的 `iasl` 編譯器也很老了。這個就不要問我了。 在看別人的項目頁面的時候,都請仔細閱讀作者提供的README,到正確的地址下載軟件,學習配置 MaciASL。修復語法錯誤的補丁的名字,以`[syn]`開頭。例如,對于一些比較老的電腦,提供了"`Fix _PLD Buffer/Package Error`", "`Fix TNOT Error`", 和 "`Fix FPED Parse Error`”補丁。為了確定你需要用哪個補丁,需要看 編譯結果 窗口給出的 提示信息,再定位到提示的行,查看錯誤行前后都有什么樣的代碼。您也可以嘗試應用修補程序,以查看它是否進行了更改,如 MaciASL 的“Preview 預覽”窗口中所示。 如果您不熟悉每種錯誤類型,則可能需要進行一些試驗和嘗試/錯誤。 對于一些錯誤,你可以簡單地刪除造成錯誤的那行代碼來解決。當然,這要取決于這一行代碼對于功能的實現,是否是必需的。例如,對于由External語句造成的錯誤,一般可以刪除那行代碼以修復錯誤。如果需要,你自己可以做一個刪除這樣的錯誤行代碼的補丁。 學習一下 ACPI 規范 和 具有一些編程經驗,有助于處理 DSDT 和 SSDT。 你的目標是讓每個 `.dsl` 文件無誤地編譯( warnings/remarks/optimizations 都不用管)。一旦你有沒有錯誤編譯的文件,你可以繼續打補丁,以解決你的 OS X 安裝問題。 具有多余/不必要的外部聲明是很常見的。 例如,我查看的最近的 DSDT 有很多 `Name already exists in scope` 錯誤??。 對于DTSE,DTS1,DTS2,DTS4,BNUM,PDTS,PKGA,SPST。 解決方法是簡單地注釋掉相關的外部聲明。 例如: ``` // External (DTS1, FieldUnitObj) // (from opcode) // External (DTS2, FieldUnitObj) // (from opcode) // External (DTS3, FieldUnitObj) // (from opcode) // External (DTS4, FieldUnitObj) // (from opcode) // External (DTSE, FieldUnitObj) // (from opcode) ... and so on ... ``` 注意:最近 DSDT 中的一個常見錯誤是 `ECRW`(在 `_CRS` 方法中)。這是 `iasl` 錯誤導致的一個非常常見的錯誤。我不打算為它添加一個 MaciASL 補丁,因為它最終將由 Intel 修復(這是一種復原)。 容易修復。 替換下面的: ``` If (LEqual (PM6H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y0C._RW, ECRW) // _RW_: Read-Write Status Store (Zero, ECRW (If (PM0H) { CreateDWordField (BUF0, \_SB.PCI0._Y0D._LEN, F0LN) // _LEN: Length Store (Zero, F0LN) })) } ``` 使用下面的: ``` If (LEqual (PM6H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y0C._RW, ECRW) // _RW_: Read-Write Status Store (Zero, ECRW) } If (PM0H) { CreateDWordField (BUF0, \_SB.PCI0._Y0D._LEN, F0LN) // _LEN: Length Store (Zero, F0LN) } ``` # 常見的補丁 一般,你需要先弄清自己的需求,再根據需求選擇要用的補丁。但也有一些補丁是通用的,并且這些補丁一般不會造成什么問題。它們在Rehabman的[補丁源 repo ](https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/.maciasl)里,這里列出: ~~~ "Fix _WAK Arg0 v2" "HPET Fix" "SMBUS Fix" "IRQ Fix" "RTC Fix" "OS Check Fix" "Fix Mutex with non-zero SyncLevel" "Fix PNOT/PPNT"(只在丟棄與CPU相關的SSDT時使用) "Add IMEI" (如果DSDT或SSDT已經有 IMEI/HECI/MEI 設備,請勿使用) ~~~ 注意:您使用的 `OS Check Fix` 補丁與筆記本電腦隨附的 Window s版本或當前使用的 Windows 版本無關。 注意:如果包含了所有 OEM SSDTs,請不要使用 `Fix PNOT/PPNT` 補丁。它僅適用于您省略與OEM CPU相關的 SSDTs 的情況。 USB 補丁可以用來修復“睡眠自動喚醒”,即在睡眠開始之后幾秒鐘內沒有喚醒的情況下,筆記本電腦將不會睡眠。 這些補丁可用于注入 USB 的電源屬性: `6-series USB` `7-series/8-series USB` 使用`AppleUSBXHCI.kext`的“睡眠自動喚醒”的替代解決方案是使用“`USB _PRW 0x6D`(即時喚醒)”。您應該檢查您的DSDT,以確定相關的`_PRW`方法返回什么,以確定補丁適合您的DSDT。在repo中也提供了“`USB _PRW 0x0D`(即時喚醒”)(0x0D和0x6D都是`XHC/EHC/HDEF`從`_PRW`返回的常見值)。 `_PRW` 修補程序可用于修復"即時喚醒(instant wake)",在這種情況下,筆記本電腦將在睡眠開始后的幾秒鐘內,筆記本電腦無法入睡。只使用“`USB _PRW 0x6D (instant wake)`”或者“`USB _PRW 0x0D (instant wake)`”,因為它與DSDT中的現有代碼相關(也請注意適用于Skylake和更高版本的這些補丁的特定版本)。 您應該檢查您的DSDT,以確定相關的 `_PRW`方法返回什么,以確保該補丁適合您的DSDT。“`USB _PRW 0x0D (instant wake)`”(`0x0D` 和 `0x6D`是`XHC/EHC/HDEF`從`_PRW`返回的常見值) USB3 Mutliplex補丁,有助于加載`AppleUSBXHCI.kext`(原生USB3.0驅動),于是就不需要安裝第三方的`GenericUSBXCHI.kext`了。這個補丁是基于Mieze的發現而制作的。大部分DSDT需要對它做一些修改,才能使用(不然可能會提示有錯誤)。例如,對于惠普的Probook,Rehabman制作了這個補丁的修改版本。聯想u310/u410可以直接使用這個補丁:"`7-series USB3 Multiplex`” 如果您具有Haswell CPU / 8系列芯片組,并且 `AppleLPC.kext` (電源管理的一種)未加載,則應使用此修補程序注入兼容的ID,以允許其加載: “`Haswell LPC`” 如果您具有Skylake CPU / 100系列芯片組,并且 `AppleLPC.kext` 未加載,則應使用此修補程序注入兼容的ID,以允許其加載: “`Skylake LPC`” 注意:Skylake及更高版本可能不需要AppleLPC。 關于重命名的注意事項:重命名必須是“平衡的”。 重命名對象以更好地匹配OS X的期望是很常見的(例如,將“將`GFX0`重命名為`IGPU`”以進行正確的IGPU電源管理)。 在這種情況下,所有引用該名稱的DSDT / SSDT也必須重命名。 這就是為什么最好使用 `config.plist / ACPI / DSDT / Patches` 完成重命名的原因。 注意重復標識符:您必須確保您的補丁文件不包含重復標識符。一個常見的例子是在一個SSDT中添加一個`_DSM`方法到指定的路徑,在那里,OEM已經在另一個SSDT的路徑上定義了一個`_DSM`。為了避免這個問題,您可以使用“`Remove _DSM methods`”補丁作為您對所有 DSDT/SSDT 的第一個補丁。也可以使用“`Rename _DSM methods to XDSM`”也是可以的(有時“`Remove _DSM methods`”在`MaciASL`中暴露一個缺陷)。 # 問題具體修補 電池狀態:http://www.tonymacx86.com/yosemite-laptop-support/116102-guide-how-patch-dsdt-working-battery-status.html 中文翻譯:http://bbs.pcbeta.com/viewthread-1521462-1-1.html 背光控制:http://www.tonymacx86.com/yosemite-laptop-support/152659-patching-dsdt-ssdt-laptop-backlight-control.html 中文翻譯:http://bbs.pcbeta.com/viewthread-1571456-1-1.html 禁用 NVidia / Radeon 獨立顯卡 :http://www.tonymacx86.com/yosemite-laptop-support/163772-guide-disabling-discrete-graphics-dual-gpu-laptops.html 當你在看針對某個特定型號的筆記本教程的時候,作者都會介紹用了哪些補丁,或者直接提供下載。你能容易的看出來,他們的補丁和Rehabman的補丁,在語法上是相似的。(例如這樣的語法:'into_all method label FOO code_regex xxyy removeall_matched;')。這些補丁語句需要粘貼到MaciASL的補丁窗口,再應用。 如果你對制作補丁有興趣,可以去看有關MaciASL修補程序語法的文檔:http://sourceforge.net/p/maciasl/wiki/Patching%20Syntax%20Grammar/ 注意:在許多情況下,DSDT補丁與其他kexts,已打補丁的kexts或 Clover `config.plist`補丁一起結合使用,在系統的kext被加載時,這些補丁會對這些系統的kext進行打補丁。 # 打過補丁的AppleHDA 的相關補丁(仿冒聲卡驅動相關的補丁) 有兩個和仿冒聲卡驅動相關的補丁,需要和仿冒的聲卡kext一起使用: `Audio Layout 12` (根據實際情況,自己修改 layout-id,例如把 12 改成 28 等) `IRQ Fix`(解決需要`-f`才能加載聲卡驅動的問題) 注意,您必須有一個與您的編解碼器匹配的AppleHDA,并且必須確定選擇了哪個layouid-id。對于已修補的AppleHDA的創建者來說,layout-id是一個任意的選擇。 要查看別人修改的AppleHDA用的`layout-id`是哪個值,首先,你需要知道自己聲卡的`codec id`的十進制形式(例如,`0x10ec0269 = 283902569`)。 再去查看 `AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/Info.plist`,查看HDAConfigDefault 節點下面的`codec id`(可能有許多條目在一個草率修補的AppleHDA或只有一個)。 和你的`codec id`匹配的那組里,LayoutID的值,就是你需要的 layout id 值。 有的驅動修改者,同一個`codec id`可能會對應多個`layout-id`,選擇一個你需要的 id 注入。 # 保存由引導裝載程序裝載的文件 為了使用你修改、編譯好的DSDT/SSDT,你需要把它們放到Clover引導能加載它們的目錄。每種引導的加載目錄是唯一的,且對文件的命名要求也不同。 如果用 **MaciASL** 保存,另存為的時候,文件格式一定要選擇"ACPI Machine Language Binary”(文件-另存為-文件格式)`.aml` 后綴。如果不選擇文件格式,就相當于,硬是把`dsl`文本文件,存成了`aml`字節碼文件(沒有經過編譯器轉換),這會造成無法預知稀奇古怪的問題。 Clover(推薦):aml 文件應該放到 Clover 所在的分區(通常是EFI分區),如果存在 `EFI/Clover/ACPI/patched`。 DSDT.aml(如果存在)將自動替換OEM DSDT。 本指南(以及與本指南鏈接的其他指南)假定您使用的是`config.plist / ACPI / AutoMerge = true`,`config.plist / ACPI / SSDT / DropOem = false`。 使用 `AutoMerge = true` 時,可以將打好補丁的 SSDTs 按照原來的名稱( `ACPI/origin` 中的名稱)放置在 `ACPI/patched`中進行修補,會自動將其插入,以免影響SSDT的原始順序。 不需要(或建議)將 `SortedOrder` 與`AutoMerge = true`一起使用。 其他配置在下面的“推薦配置”中會介紹。 Clover 3062版本以前,SSDT的命名必須是這樣的:SSDT-x 或 SSDT-xx,x是一個整數(一直支持到SSDT-19)。Clover允許SSDT的名字不連續(例如,SSDT-1.aml, SSDT-5.aml, SSDT-6.aml是可以的)。Clover 3062以后的版本,會加載所有在ACPI/patched里的aml文件,對名字沒有嚴格限制了。一定要注意,SSDT的加載順序非常重要,你留下來的SSDT,要保持提取的時候的順序。 Clover 3062版本以后的注意事項:`ACPI/patched` 里SSDT的加載方式的改變,造成了加載順序的不確定性。你應該要使用 `config.plist/ACPI/SortedOrder` 功能,指定SSDT的加載順序。Clover 3088 版本以后,實現了`SortedOrder`參數。從我的 Clover 指南鏈接的config.plist 文件對SortedOrder有一個很好的默認值:http://www.tonymacx86.com/yosemite-laptop-support/148093-guide-booting-os-x-installer-laptops-clover.html 注意:SSDTs必須由引導加載器按其原始順序加載。原始的順序是由名稱后面的數字指定的。例如,如果您使用Clover `F4`來提取您可能會有類似的東西:SSDT-0.aml, SSDT-1.aml, SSDT-2.aml, SSDT-3.aml,表示SSDTs必須以該順序加載(0/1/2/3)。 ~~變色龍(或Chimera 不推薦):修改、編譯好的DSDT/SSDT,應該放到 系統盤的 /Extra(或者你的引導程序所在的其它地方的 `/Extra`)。如果/Extra里存在DSDT.aml,引導程序就會用這里的DSDT,替代掉原始的DSDT,提交給系統。變色龍要求,SSDT的名字是連續的。這樣的情況,文件都會被加載:SSDT.aml, SSDT-1.aml, SSDT-2.aml, SSDT-3.aml,直到引導找不到接下來的名字的文件。另外,這樣的情況:SSDT.aml, SSDT-1.aml, SSDT-4.aml, SSDT-5.aml,只會加載SSDT.aml 和 SSDT-1.aml。SSDT-4.aml 和 SSDT-5.aml不會被加載(變色龍會忽略這些文件)。~~ ~~最后,如果不先屏蔽原始的OEM SSDT,就不能放自己修改的SSDT。最簡單的方法,是設置`DropSSDT=Yes`(變色龍) 或者 `ACPI/SSDT/DropOem=true`(Clover),從而在系統啟動的時候,先屏蔽原始的SSDT,之后再把目錄里的SSDT(沒有修改或修改過)提交給系統。~~ 如上所述,Clover的RehabMan分支中的一項新功能允許您在不使用 `DropOem = true`且不使用 `SortedOrder` 的情況下替換 OEM SSDT,同時始終保持四葉草注入的未打補丁和打補丁的SSDT的原始順序。通過設置 `config.plist/ACPI/AutoMerge=true`,啟用此功能。 當放置在 `ACPI/patched` 中時,SSDT必須保留其原始編號方案。 從2017年12月15日起,此功能已在 RehabMan bitbucket 網站上的Clover_v2.4k_r4359.RM-4506.c5fc0346.zip 中全面運行。 自 r4334 起,所需的更改已在官方Clover (在 sourceforge 上)中實現(但您可能會遇到一些錯誤,請使用 RehabMan fork 的版本 )。筆記本電腦主指南中鏈接的每個 plists 默認情況使用 `AutoMerge = true`。 RehabMan fork 的 Clover::https://github.com/RehabMan/Clover 筆記本電腦主指南:https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/ # 推薦的配置 以下是有效的配置,其他任何配置都可能是錯誤的(有些情況我不希望涉足,因此使用了‘可能” likely’)。首先列出的配置更可取。 全部 hotpatch: - 所有的補丁都是通過`config.plist`完成的 - 在 `ACPI/patched` 中只有附加的 SSDTs(例如,沒有打補丁的 `DSDT`, 沒有打補丁的`SSDTs`) - `SortedOrder` 可以不指定 - `DropOem=false` 部分 hotpatch: - 打補丁的`DSDT.aml`放置在 `ACPI/patched` - 在 `ACPI/patched` 中只有附加的 SSDTs (例如,沒有打補丁的 `SSDTs`) - 通過`config.plist`來進行重命名(會對原生的 SSDTs 和 `ACPI/patched` 下的 `DSDT.aml` 應用) - 不指定 `SortedOrder` - `DropOem=false` 部分 hotpatchh 和打補丁的SSDTs: - 需要 RehabMan 構建的Clover - 打補丁的`DSDT.aml`放置在 `ACPI/patched` - 在 `ACPI/patched` 中選擇打了補丁的的 SSDTs (必須以提取到 `ACPI/origin` 的名稱來命名) - 附加的 `SSDTs` 也放置在 `ACPI/patched` 中 - 仍然可以使用`config.plist` 來完成重命名 - 不指定`SortedOrder` - `config.plist/ACPI/AutoMerge=true` - `DropOem=false` 全部打補丁的 DSDT + SSDTs: - 打補丁的`DSDT.aml`放置在 `ACPI/patched` - 完整的一組打了靜態補丁的 OEM SSDTs 放置在 `ACPI/patched`(還是以原本 `ACPI/origin` 下的原始名稱) - 附加的`SSDTs` 也放置在 `ACPI/patched` 中 - `config.plist`中的重命名是不推薦的(它們只適用于 `DSDT.aml`) - `SortedOrder`需要設置 `SSDT` 加載順序 - `DropOem=true` # Floating regions 在ACPI中,OperationRegion可以定義MMIO 區域(region),SystemMemory區域,EmbeddedControl區域等。這些區域通常具有固定的地址,這些地址僅取決于計算機配置,BIOS版本或BIOS選項。 有時,這些區域可能會隨機或意外更改。 這被稱為“浮動區域”。 由于通過修補DSDT和/或SSDT,我們在給定的時間點提供了這些地址的快照,當BIOS發出命令,需要變動地址值時,我們提取的文件是做不到這樣的變動的。在這樣的情況下,你也許能注意到,某一個特定的功能變得斷斷續續,或者可能隨機地出現一些穩定性問題。 如果您具有隨機浮動的區域,則**可以嘗試** Clover 的 FixRegions 功能(`config.plist / ACPI / DSDT / Fixes / FixRegions = true`)。 您可以在Clover Wiki中找到詳細信息。 注意:FixRegions 只能固定 DSDT 中的浮動區域。 SSDT中的浮動區域存在問題,除了為受隨機浮動區域影響的SSDT 不提供修補的SSDT之外,沒有其他好的解決方案。 解決修補的SSDT中的浮動區域超出了本指南的范圍。 請注意,FixRegions 是相對有問題的。 它無法修復所有區域,有時可能會錯誤地“修復”區域。 # 資源 MaciASL(RehabMan fork):https://github.com/RehabMan/OS-X-MaciASL-patchmatic patchmatic:https://github.com/RehabMan/OS-X-MaciASL-patchmatic iasl(RehabMan fork):https://bitbucket.org/RehabMan/acpica/downloads ACPI spec: 5.0a:[http://acpi.info/spec.htm](http://acpi.info/spec.htm) Latest:[http://www.uefi.org/specifications](http://www.uefi.org/specifications) RehabMan github:https://github.com/RehabMan?tab=repositories Clove r筆記本電腦指南:http://www.tonymacx86.com/yosemite-laptop-support/148093-guide-booting-os-x-installer-laptops-clover-uefi.html 筆記本電腦的 Clover `config.plist`文件:https://github.com/RehabMan/OS-X-Clover-Laptop-Config Clover 跟帖:http://www.insanelymac.com/forum/topic/284656-clover-general-discussion/ Clover 變化:http://www.insanelymac.com/forum/topic/304530-clover-change-explanations/ # 提供反饋 請勿將此線程視為您的專用疑難解答線程。 如果您的特定筆記本電腦有特定問題,請打開單獨的線程。 如果您發現此處有錯誤或希望做出貢獻,請回復此主題。 # 問題報告 請閱讀上面的“提供反饋”。最好打開一個單獨的帖子。 在那個單獨的帖子中,清楚地描述你的問題。并提供相關數據... 閱讀常見問題,“Problem Reporting” https://www.tonymacx86.com/threads/faq-read-first-laptop-frequent-questions.164990/ **** # 使用Clover Fix 也許有的同學會說,有的電腦不用 DSDT 也可以完美,其實,這樣的說法不太嚴謹。因為,雖然沒有在相關文件夾放自己修改過的 DSDT 文件,但是,系統啟動時,其實是會自動從BIOS 讀取出廠時的原始 DSDT的。 由于 **Clover 的強大功能**,使得不需要手工修改原始的 DSDT: 比如`Fix ****`參數,就是在啟動讀取原始 DSDT 文件時,由 Clover 程序根據相應的`Fix參數`,向 DSDT 里添加對應的通用性代碼,再把修改后的DSDT,提交給系統。這樣,修改 DSDT 的動作,是發生在系統啟動時。也就給大家一個似乎不需要自己修改的DSDT的印象。 # 參考 相關:[SSDT GPU (Graphics Card) Injection](https://www.tonymacx86.com/threads/ssdt-gpu-graphics-card-injection.183354/) 其他翻譯: [DSDT 有什么?如何提取黑蘋果系統里的 DSDT 文件](http://www.xp988.com/tech/6028.html) [[教程]](http://bbs.pcbeta.com/forum.php?mod=forumdisplay&fid=546&filter=typeid&typeid=1199)[\[授權翻譯\] 使用補丁修改 DSDT/SSDT \[DSDT/SSDT 綜合教程\]](http://bbs.pcbeta.com/viewthread-1571455-1-1.html) [對筆記本的 DSDT/SSDT 打補丁](http://blog.csdn.net/wr132/article/details/54798754) [教程 運用MaciASL軟件的補丁源-幫你完善DSDT](http://www.memacx.com/thread-5726-1-1.html) [關于DSDT修改-提取軟件以及使用方法【詳解】](http://www.memacx.com/thread-718-1-1.html) http://www.sdifen.com/getdsdt.html http://bbs.pcbeta.com/viewthread-1571455-1-1.html https://www.maoshu.cc/1168.html DSDT SE鏈接:&nbsp;http://pan.baidu.com/s/1gfbthlD&nbsp;密碼: r6c4DSDTeditor鏈接:&nbsp;http://pan.baidu.com/s/1bpcNhTl&nbsp;密碼: hag8IDSDT鏈接:&nbsp;http://pan.baidu.com/s/1qYAS4XY&nbsp;密碼: qwvwMACIASL鏈接:&nbsp;http://pan.baidu.com/s/1c1I2ucC&nbsp;密碼: 99x9
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看