黑蘋果(Hackintosh)的折騰時(shí)光

前言

距離去年正式開始折騰黑蘋果,到現(xiàn)在已有一年半的時(shí)間,在這段時(shí)間里,從自以為了解系統(tǒng)(曾經(jīng)安裝過很多版本的win和linux)安裝,到為了實(shí)現(xiàn)一個(gè)硬件驅(qū)動(dòng)而焦頭爛額,再到站在大牛肩膀上實(shí)現(xiàn)自己的驅(qū)動(dòng),期間感慨良多。雖然在遠(yuǎn)景上寫過幾篇帖子,也主要是為自己儲(chǔ)備相關(guān)的技術(shù)素材,方便以后繼續(xù)黑。于是打算借著簡書的markdown功能寫一篇總結(jié),也算是markdown的第一次練手吧。

安裝macOS的初衷

  • 想自學(xué)Swift
  • 對(duì)macOS無限好奇
  • macOS有良好的軟件體驗(yàn)
  • 能提升程序員的生產(chǎn)力

使用黑蘋果的體驗(yàn)

由于花了將近一年的時(shí)間實(shí)現(xiàn)了幾乎所有驅(qū)動(dòng),才使得現(xiàn)在有了接近完美的macOS體驗(yàn)。

  • 工具軟件使用便利快捷鍵飛起來
  • 與ios高度的協(xié)調(diào)性
  • apple自己開發(fā)的app好用還免費(fèi)(17年剛免費(fèi)的三件套)
  • 對(duì)游戲的支持不好,才更好集中精力工作學(xué)習(xí)

macOS工具軟件的良好體驗(yàn),也讓我從win系統(tǒng)到軟件全盜版的人開始在macOS和ios上付費(fèi)買軟件了(雖然后來購買了正版win8并升級(jí)成正版win10,但是macOS已經(jīng)成主力系統(tǒng)了)。

對(duì)于macOS,未來……

如今已經(jīng)越來越離不開macOS了,也更期待Retina屏幕、觸控板,尤其在體驗(yàn)過朋友的觸控板,以及自己黑的臺(tái)式機(jī)使用2K屏后,未來也許考慮擁有一臺(tái)真正的macbook pro吧……


說一說黑蘋果的那些坑

展示一下配置

雷 神 G170P 筆 記 本,藍(lán) 天(CLEVO)P170SMA模 具
CPU:Core i7-4710MQ 2.50GHz
主 板:CLEVO P17SM-A
硬 盤:威剛SSD 256GB
內(nèi) 存:16 GB ( 威 剛 DDR3L 1600MHz )
顯 卡:Nvidia GTX970M Intel HD4600
有 線 網(wǎng) 卡:瑞 昱 RTL8168/8111/8112
無 線 網(wǎng) 卡:博通BCM94352HMB(原 裝intel網(wǎng) 卡,無 解)
聲 卡:Realtek ALC892

深坑警示:

黑蘋果終究還是要仿制各種驅(qū)動(dòng)的,如果蘋果本身就不支持,再?zèng)]有硬件廠商的支持,那就意味著再折騰也是徒勞

  • AMD的CPU往往需要破解內(nèi)核,越新的CPU越難驅(qū)動(dòng),同時(shí)集顯也不支持,intel最新CPU則可以修改fakeID來驅(qū)動(dòng),盡量不選AMD的CPU

  • 由于intel與Nvida的Optimus雙顯卡切換技術(shù),直接給MXM顯卡直接判了死刑,不僅驅(qū)動(dòng)不了,還會(huì)帶來滿頻率和能耗的問題。除了個(gè)別筆記本廠商良心的提供了獨(dú)立輸出,否則就不要再掙扎了。
    解決辦法:
    1.在BIOS層面由SG切換至IGFX(集顯獨(dú)顯切換->集顯模式)再分配最大共享顯存DVMT Pre-Allocated,我設(shè)置為1024,個(gè)別主板上限設(shè)置,無法啟動(dòng)系統(tǒng)的根據(jù)情況降低。當(dāng)然這樣的結(jié)果會(huì)導(dǎo)致安裝win也沒有獨(dú)顯可用
    2.在修改DSDT和SSDT文件屏蔽獨(dú)顯,win系統(tǒng)中獨(dú)顯不會(huì)受到影響

  • intel無線網(wǎng)卡的藍(lán)牙功能可以免驅(qū),但是wifi就不要掙扎了,無解。老老實(shí)實(shí)換個(gè)博通或者usb網(wǎng)卡吧

  • 引導(dǎo)模式主要分為變色龍、clover、Ozmosis,
    變色龍用傳統(tǒng)bios引導(dǎo),mbr硬盤分區(qū)。大多用懶人版系統(tǒng),也用原版,但可調(diào)參數(shù)較少,對(duì)新手不友好。
    四葉草(clover)支持UEFI引導(dǎo),gpt硬盤分區(qū)。原版系統(tǒng)安裝,功能強(qiáng)大,適合新手。
    Ozmosis適用于精通DSDT和SSDT修改的高手,刷BIOS來直接引導(dǎo)macOS,難度較高,關(guān)鍵是支持的主板少,現(xiàn)在以華碩和技嘉為主。

我個(gè)人嘗試了變色龍和四葉草,最后選擇了四葉草,因?yàn)樵谇捌谡娴暮芊奖悖笃谏?jí)系統(tǒng)很方便


黑蘋果的過程

對(duì)黑蘋果有一定了解后,就會(huì)發(fā)現(xiàn)黑蘋果真正最主要的事情就是實(shí)現(xiàn)驅(qū)動(dòng),驅(qū)動(dòng)實(shí)現(xiàn)了,安裝和升級(jí)系統(tǒng)都是簡單的事情,下面也主要以調(diào)試驅(qū)動(dòng)為主。
零基礎(chǔ)的新手推薦先了解一下基礎(chǔ)知識(shí)(感謝遠(yuǎn)景論壇和黑蘋果樂園)

目錄

一.刷入破解版BIOS
二.安裝系統(tǒng)
三.調(diào)整config
四.屏蔽獨(dú)顯,集顯開啟QE/CI
五.實(shí)現(xiàn)CPU變頻
六.定制USB驅(qū)動(dòng)
七.實(shí)現(xiàn)藍(lán)牙+WIFI
八.定制聲卡驅(qū)動(dòng)
九.實(shí)現(xiàn)亮度驅(qū)動(dòng)
十.實(shí)現(xiàn)睡眠

一.刷入破解版BIOS

由于雷神原版的BIOS長期不更新,并且隱藏了很多功能,為了方便以后的調(diào)試不得已選擇破解版的BIOS,由于刷BIOS有風(fēng)險(xiǎn),需要仔細(xì)研究以后再進(jìn)行操作。在刷機(jī)之前,一定要反復(fù)確認(rèn)BIOS是否適用于你的電腦。現(xiàn)在部分新主板支持Q-flash、M-flash刷寫B(tài)IOS,這種方法簡單安全,并且很多有中文提示,就不建議按照以下操作來刷寫B(tài)IOS了

1.進(jìn) 入bios ,CMOS設(shè) 置 中 禁 用Intel Anti-Theft Technology,如 果 該 項(xiàng) 目 是 可 行 的。
2.制 作 一 個(gè) U盤 啟 動(dòng) 盤(也 就 是PE工 具),把bios解 壓 到U盤 中 新 建 的bios文 件 夾 里,方 便dos下 查 找
3.重 啟 進(jìn) 入PE下純DOS環(huán)境下,運(yùn) 行meset.exe(DOS命 令 不 會(huì) 的 百 度 吧),系 統(tǒng) 會(huì) 自 動(dòng) 重 啟。
4.運(yùn) 行 在 純DOS flashme.bat,系 統(tǒng) 將 自 動(dòng) 關(guān) 機(jī)。
5.電 池 和 電 源 適 配 器 斷 開5秒,然 后 連 電。
6.在 系 統(tǒng) 上,系 統(tǒng) 會(huì) 自 動(dòng) 重 新 啟 動(dòng)。
7.進(jìn) 入CMOS設(shè) 置 檢 查BIOS版 本 和 加 載 系 統(tǒng) 默 認(rèn),保 存 更 改 并 重 新 啟 動(dòng)。

之后需要使用集顯的,在bios設(shè) 置 下 找 到Chipset → Graphics Configuration → Primary Display設(shè) 置IGFX(集 顯 模 式)
Aperture Size設(shè) 置512(因 為 我 的 內(nèi) 存 是 16G,所 以 選 最 大,根 據(jù) 情 況 可 以 適 當(dāng) 降 低)
DVMT Pre-Allocated設(shè) 置1024(我 也 是 選 最 大,根 據(jù) 情 況 適 當(dāng) 降 低)
DVMT Total Gfx Mem設(shè) 置MAX

想用DSDT+SSDT屏蔽獨(dú)顯的,Primary Display可以不用管,使用正常的集顯獨(dú)顯切換模式就可以,但是需要分配共享內(nèi)存

二.安裝系統(tǒng)

首先clover支持UEFI引導(dǎo),因此在主板支持的情況下可以將硬盤設(shè)置為GUID分區(qū)(即GPT)
為了方便分出了兩個(gè)EFI分區(qū)分別引導(dǎo)win10和macOS(macOS安裝格式化安裝盤時(shí)會(huì)有幾率導(dǎo)致EFI分區(qū)被格,分開引導(dǎo)以防萬一)


分區(qū)展示

之后制作U盤進(jìn)行安裝

三、調(diào)整config

clover引導(dǎo)最大的方便之處在于config文件中有大量的參數(shù)可以調(diào)整,可以解決很多實(shí)際問題。下面以我筆記本調(diào)整為例進(jìn)行說明。下面是10.12.6驅(qū)動(dòng)完美后config文件,位于efi分區(qū)/EFI/CLOVER中

ACPI
<key>ACPI</key>
    <dict>
        <key>DSDT</key>//DSDT修復(fù)補(bǔ)丁
        <dict>
            <key>Debug</key>
            <false/>
            <key>DropOEM_DSM</key>
            <false/>
            <key>Fixes</key>
            <dict>
                <key>FixDarwin_0002</key>//使系統(tǒng)更多設(shè)備能在acpi模式下工作
                <true/>
                <key>FixShutdown_0004</key>//修復(fù)關(guān)機(jī)斷電問題
                <true/>
            </dict>
            <key>ReuseFFFF</key>
            <false/>
            <key>SlpSmiAtWake</key>//幫助解決UEFI模式下睡眠和關(guān)機(jī)問題
            <true/>
            <key>SuspendOverride</key>//休眠覆寫,影響Fixshutdown補(bǔ)丁
            <true/>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>Rename EHC2 to EH02</string>//USB遮蓋器(實(shí)現(xiàn)USB驅(qū)動(dòng)中詳細(xì)介紹)
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    RUhDMg==
                    </data>
                    <key>Replace</key>
                    <data>
                    RUgwMg==
                    </data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>Rename EHC1 to EH02</string>(實(shí)現(xiàn)USB驅(qū)動(dòng)中詳細(xì)介紹)
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    RUhDMQ==
                    </data>
                    <key>Replace</key>
                    <data>
                    RUgwMQ==
                    </data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>Rename XHC1 to XHC</string>(實(shí)現(xiàn)USB驅(qū)動(dòng)中詳細(xì)介紹)
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    WEhDMQ==
                    </data>
                    <key>Replace</key>
                    <data>
                    WEhD
                    </data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change _OSI to XOSI</string>//模擬win系統(tǒng)中USB運(yùn)行模式
                    <key>Find</key>
                    <data>
                    X09TSQ==
                    </data>
                    <key>Replace</key>
                    <data>
                    WE9TSQ==
                    </data>
                </dict>
            </array>
            <key>ReuseFFFF</key>
            <false/>
        </dict>
        <key>HaltEnabler</key>//解決重啟或關(guān)機(jī)無法斷電問題
        <true/>
        <key>SSDT</key>
        <dict>
            <key>DropOem</key>丟棄所有自帶表,完全啟用自定義ssdt。
            <true/>
            <key>Generate</key>
            <false/>
            <key>PluginType</key>
            <integer>1</integer>
        </dict>
        <key>SortedOrder</key>//按順序加載SSDT
        <array>
            <string>SSDT.aml</string>
            <string>SSDT-1.aml</string>
            <string>SSDT-2.aml</string>
            <string>SSDT-3.aml</string>
            <string>SSDT-4.aml</string>
            <string>SSDT-5.aml</string>
            <string>SSDT-6.aml</string>
            <string>SSDT-7.aml</string>
            <string>SSDT-8.aml</string>
            <string>SSDT-9.aml</string>
            <string>SSDT-10.aml</string>
            <string>SSDT-11.aml</string>
        </array>
    </dict>
Boot
<key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>dart=0 nv_disable=1</string>
          //dart=0 修復(fù)BIOS開啟VT-d虛擬機(jī)設(shè)置導(dǎo)致的五國錯(cuò)誤,未開啟可不采用
          //nv_disable=1禁止加載nvidia驅(qū)動(dòng)(在10.13中已經(jīng)失效),需要加載則添加nvda_drv=1
        <key>Debug</key>
        <false/>

        <key>DefaultVolume</key>
        <string>macOS</string>
          //默認(rèn)引導(dǎo)盤卷名

        <key>Secure</key>
        <false/>

        <key>Timeout</key>
        <integer>5</integer>
          //clover引導(dǎo)暫停時(shí)間

        <key>XMPDetection</key>
        <string>Yes</string>
          //適用于DDR3 XMP內(nèi)存
    </dict>
Devices
<key>Devices</key>
    <dict>
//這段代碼以實(shí)現(xiàn)聲卡Audio、USB、以及其他設(shè)備仿冒使用
//我個(gè)人將這些設(shè)備功能在DSDT+SSDT中實(shí)現(xiàn),這里沒有代碼
//實(shí)現(xiàn)方法在后面介紹
    </dict>
GUI
<key>GUI</key>
    <dict>
        <key>Language</key>
        <string>zh_CN:0</string>
        //鍵盤編碼zh_CN:0或en:0(中文或英文)
        <key>Mouse</key>
        <dict>
            <key>DoubleClick</key>
            <integer>500</integer>
        //設(shè)置鼠標(biāo)指針雙擊反應(yīng)時(shí)間

            <key>Enabled</key>
            <false/>
        //關(guān)閉引導(dǎo)界面實(shí)現(xiàn)鼠標(biāo)操作(實(shí)現(xiàn)需要添加鼠標(biāo)圖標(biāo),默認(rèn)主題都有)
            <key>Mirror</key>
            <false/>
        //關(guān)閉鼠標(biāo)翻轉(zhuǎn)
            <key>Speed</key>
            <integer>8</integer>
        //鼠標(biāo)速度
        </dict>

        <key>Scan</key>
       //設(shè)置clover引導(dǎo)項(xiàng)
        <dict>
            <key>Entries</key>
            <true/>//開啟啟動(dòng)項(xiàng)偵測(cè)
            <key>Legacy</key>
            <false/>//關(guān)閉傳統(tǒng)BIOS引導(dǎo)項(xiàng)
            <key>Tool</key>
            <false/>//關(guān)閉UEFI Tool項(xiàng)
        </dict>

        <key>ScreenResolution</key>
        <string>1920x1080</string>
       //clover引導(dǎo)界面分辨率1920x1080
        (UEFI方式引導(dǎo),確認(rèn)\EFI\Clover\drivers64UEFI\有CsmVideoDxe-64.efi驅(qū)動(dòng),
           同時(shí)在UEFI BIOS里開啟CSM。如輸入的分辨率無法識(shí)別時(shí),需注入EDID.
          此外,對(duì)于獨(dú)立顯卡需在Graphics模塊下開啟以下設(shè)置:
          對(duì)于ATI /AMD顯卡,開啟PatchVBios選項(xiàng)
          對(duì)于Nvidia顯卡,在PatchVBiosBytes選項(xiàng)里注入修改數(shù)值)
        
        <key>Theme</key>
        <string>Universe</string>
      //clover引導(dǎo)界面主題
    </dict>
Graphics
<key>Graphics</key>
    <dict>
        <key>CustomEDID</key>
        <data>
        AP///////wANrjUXAAAAADIWAQSVJhV4AtSVo1VQnScPUFQAAAABAQEBAQEB
    AQEBAQEBAQEBtDuASnE4NEAwIDUAftcQAAAYAAAA/gBOMTczSEdFLUUxMQog
        AAAA/gBDTU4KICAgICAgICAgAAAA/gBOMTczSEdFLUUxMQogAOA=
        </data>
        //注入顯示屏EDID標(biāo)識(shí)(可以解決顯示器黑屏、花屏等問題)
        //方法(轉(zhuǎn)自黑蘋果樂園)https://imac.hk/clover-injection-edid.html

        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <false/>
            <key>Intel</key>
            <true/>
        //開啟注入集顯
            <key>NVidia</key>
            <false/>
        </dict>
        
        <key>InjectEDID</key>
        <true/>
        //開啟EDID注入

        <key>LoadVBios</key>
        <true/>

        //開啟選擇的顯卡rom

        <key>NvidiaSingle</key>
        <false/>

        <key>ig-platform-id</key>
        <string>0x0a260006</string>
       //集顯ig-platform-id(HD4600對(duì)應(yīng)0x0a260006)
    </dict>
    <key>KernelAndKextPatches</key>
    <dict>
        <key>AppleRTC</key>//防止BIOS重置
        <true/>
        <key>AsusAICPUPM</key>//修復(fù)華碩主板電源管理驅(qū)動(dòng)
        <false/>
        <key>Debug</key>
        <false/>
        <key>ForceKextsToLoad</key>
        <array>
            <string>\System\Library\Extensions\IONetworkingFamily.kext</string>
        </array>
        <key>KernelCpu</key>
        <false/>
        <key>KernelHaswellE</key>
        <false/>
        <key>KernelLapic</key>
        <false/>
        <key>KernelPm</key>//因Haswell平臺(tái)鎖定MSR,開啟避免無限重啟
        <true/>
        <key>KextsToPatch</key>//所有驅(qū)動(dòng)的主要補(bǔ)丁集合
        <array>
            <dict>
                <key>Comment</key>//10.12.5后新亮度補(bǔ)丁
                <string>change F%uT%04x to F%uTxxxx for AppleBacklightInjector.kext (credit RehabMan)</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                RiV1VCUwNHgA
                </data>
                <key>Name</key>
                <string>com.apple.driver.AppleBacklight</string>
                <key>Replace</key>
                <data>
                RiV1VHh4eHgA
                </data>
            </dict>
            <dict>
                <key>Comment</key>//BCM94352HMB網(wǎng)卡補(bǔ)丁
                <string>AirPortBrcm4360</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                gflSqgAAdSk=
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                gflSqgAAZpA=
                </data>
            </dict>
            <dict>
                <key>Comment</key>//BCM94352HMB網(wǎng)卡補(bǔ)丁
                <string>AirPortBrcm4360 Patch 1</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                QTnEdRs=
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                QTnEZpA=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>AirPortBrcm4360 Patch 3</string>//BCM94352HMB網(wǎng)卡補(bǔ)丁
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                g33EBHQG
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                g33EBGaQ
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>AirPort Extreme</string>//BCM94352HMB網(wǎng)卡補(bǔ)丁
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                axAAAHUN
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                axAAAJCQ
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>AirPortBrcm4360 Patch 2</string>//BCM94352HMB網(wǎng)卡補(bǔ)丁
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                QQ+3zTnBdQw=
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                QQ+3zTnBZpA=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Enable 9MB cursor bytes, 0x0a260006</string>
                  //HD4600防花屏補(bǔ)丁
                <key>Find</key>
                <data>
                BgAmCgEDAwMAAAACAAAwAQAAYAA=
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                BgAmCgEDAwMAAAACAAAwAQAAkAA=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>QECI HD4600 Azul (GT2 Mobile to Desktop)</string>
                  //HD4600開啟QECI補(bǔ)丁
                <key>Find</key>
                <data>
                hoASBA==
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                hoAWBA==
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                ////HD4600防花屏補(bǔ)丁
                <string>Frame Buffer</string>
                <key>Find</key>
                <data>
                AQMDAwAAAAIAADABAABgAA==
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                AQMDAwAAAAIAADABAACQAA==
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>QECI HD4600 (GT2 Mobile to Desktop)</string>
                //HD4600開啟QECI補(bǔ)丁
                <key>Find</key>
                <data>
                hoASBA==
                </data>
                <key>Name</key>
                <string>AppleIntelHD5000Graphics</string>
                <key>Replace</key>
                <data>
                hoAWBA==
                </data>
            </dict>
            <dict>
                <key>Find</key>//SSD開啟TRIM
                <data>
                QVBQTEUgU1NEAA==
                </data>
                <key>Name</key>
                <string>IOAHCIBlockStorage</string>
                <key>Replace</key>
                <data>
                AAAAAAAAAAAAAA==
                </data>
            </dict>
            <dict>
                <key>Find</key>//開啟USB3.0補(bǔ)丁
                <data>
                g710////EA==
                </data>
                <key>Name</key>
                <string>AppleUSBXHCIPCI</string>
                <key>Replace</key>
                <data>
                g710////EA==
                </data>
            </dict>
            <dict>
                <key>Find</key>
                <data>
                AQAAdSU=
                </data>
                <key>Name</key>
                <string>IOGraphicsFamily</string>
                <key>Replace</key>
                <data>
                AQAA6yU=
                </data>
            </dict>
            <dict>
                <key>Find</key>//藍(lán)牙補(bǔ)丁
                <data>
                SIX/dEdIiwc=
                </data>
                <key>Name</key>
                <string>IOBluetoothFamily</string>
                <key>Replace</key>
                <data>
                Qb4PAAAA60Q=
                </data>
            </dict>
            <dict>
                <key>Name</key>//HD4600防花屏補(bǔ)丁
                    <string>AppleIntelFramebufferAzul</string>
                <key>Comment</key>
                    <string>Isolate IntelAccelerator HD4600 10.12.x</string>
                <key>Find</key>
                    <data>SImLqAAAAA==</data>
                <key>Replace</key>
                    <data>kJCQkJCQkA==</data>
            </dict>
        </array>
    </dict>
SMBIOS
<key>SMBIOS</key>
    <dict>
        <key>BiosReleaseDate</key>
        <string>10/29/13</string>
        <key>BiosVendor</key>
        <string>Apple Inc.</string>
        <key>BiosVersion</key>
        <string>MBP111.88Z.0138.B03.1310291227</string>//MacBookPro11,1的Biosversion
        <key>Board-ID</key>
        <string>Mac-XXXXXXXXXXXXXXX</string>//MacBookPro11,1的ID
        <key>BoardManufacturer</key>
        <string>Apple Inc.</string>
        <key>BoardSerialNumber</key>
        <string>XXXXXXXXXXXXXXXXXX蘋果電腦主板MLB序列號(hào)</string>
        <key>BoardType</key>
        <integer>10</integer>
        <key>ChassisAssetTag</key>
        <string>MacBook-Aluminum</string>
        <key>ChassisManufacturer</key>
        <string>Apple Inc.</string>
        <key>ChassisType</key>
        <string>08</string>
        <key>Family</key>
        <string>MacBook Pro</string>
        <key>Manufacturer</key>
        <string>Apple Inc.</string>
        <key>Mobile</key>
        <true/>
        <key>ProductName</key>
        <string>MacBookPro11,1</string>
        <key>SmUUID</key>
        <string>XXXXXXXXXXXXXXXXXXX硬件UUID碼</string>
        <key>Trust</key>
        <false/>
        <key>Version</key>
        <string>1.0</string>
    </dict>
        <key>SystemParameters</key>//開啟 inject System ID,如果不選的話,會(huì)導(dǎo)致custom uuid和System-ID數(shù)據(jù)顛倒
    <dict>
                 <key>CustomUUID</key>
            <string>XXXXXXXXXXXXXXXXXXXROM碼</string>
        <key>InjectKexts</key>
            <string>Detect</string>
        </dict>

smbios中有電腦型號(hào)以及系統(tǒng)三碼的描述(三碼用來激活imessage和Facetime)
其中電腦型號(hào)對(duì)CPU變頻有很大的作用,在選定型號(hào)之前,需要用Mactracker軟件找到與自己CPU型號(hào)主頻最接近的,為以后CPU變頻提供條件。

四.屏蔽獨(dú)顯,集顯開啟QE/CI

所謂的QE/CI其實(shí)通俗的講就是顯卡的正常特效顯示,比如蘋果系統(tǒng)的水波紋特效,毛玻璃特效。很多朋友能顯示但是畫面效果不好,多是沒有正常驅(qū)動(dòng)集顯顯存,獨(dú)顯驅(qū)動(dòng)后是不存在這個(gè)問題的,這一節(jié)就來說明這個(gè)問題。
對(duì)于無法使用獨(dú)顯的筆記本,需要屏蔽獨(dú)顯來保證集顯正常工作以及睡眠功能的實(shí)現(xiàn),同時(shí)解決獨(dú)顯滿負(fù)荷導(dǎo)致能耗問題,其實(shí)也是為了保護(hù)獨(dú)顯。而那些可以驅(qū)動(dòng)獨(dú)顯的,就簡單了。

A卡要么免驅(qū),要么加入對(duì)應(yīng)kext就好了。在最新的驅(qū)動(dòng)方法里想要單卡驅(qū)動(dòng)A卡需要lilu.kext和 WhateverGreen.kext相互配合使用,。(注意:lilu與WhateverGreen的版本要兼容)

N卡老卡有不少免驅(qū),不過自從蘋果不再采用N卡后,N卡的驅(qū)動(dòng)可謂是爛的一塌糊涂,現(xiàn)在主要方法是使用lilu.kext和nvidiagraphics.kext,在config中加入代碼開啟SIP,同時(shí)在代碼中的Boot->Arguments中加入-lilubetaall,進(jìn)入系統(tǒng)后安裝webdriver

集顯,這里的集顯全部指intel的集顯,AMD無解。集顯大部分都比較簡單,因?yàn)閲獯笊裰谱鞯膌ilu.kext與IntelGraphicsFixup.kext驅(qū)動(dòng),再加上集顯代碼注入和花屏補(bǔ)丁就差不多了。但是我的HD4600移動(dòng)版很悲劇,需要仿冒HD4600桌面版,花屏還需要修改EDID。

下面著重介紹一下HD4600移動(dòng)版驅(qū)動(dòng)方法

BIOS調(diào)整
共享內(nèi)存調(diào)整最大(部分主板調(diào)整最大進(jìn)入clover黑屏,根據(jù)情況調(diào)節(jié))
顯卡選擇可以先選擇板載(IGFX),在獨(dú)顯屏蔽后恢復(fù)即可

基本的驅(qū)動(dòng)
lilu1.1.7(HD4600移動(dòng)版不兼容lilu1.2,使用后嚴(yán)重花屏)

IntelGraphicsFixup 1.1.2 (需要兼容lilu1.1.7)
以上兩個(gè)驅(qū)動(dòng)是更新10.13系統(tǒng)必備
FakePCIID.kext
FakePCIID_Intel_HD_Graphics.kext

然后config中注入仿冒代碼

Boot->Arguments
<string> nv_disable=1  -lilubeta -igfxbeta</string>
//禁止驅(qū)動(dòng)N卡(這個(gè)只是驅(qū)動(dòng)層面,硬件無效)
//-lilibeta與-igfxbeta是與相關(guān)驅(qū)動(dòng)配合使用
<key>Inject</key>
                <dict>
                        <key>Intel</key>
                        <true/>
                </dict>
                <key>ig-platform-id</key>                
                <string>0x0a260006</string>


<key>Devices</key>
        <dict>
                <key>FakeID</key>
                <dict>
                        <key>IntelGFX</key>
                        <string>0x04128086</string>
                </dict>
       </dict>

由于10.12系統(tǒng)與10.13系統(tǒng)花屏補(bǔ)丁不同,下面是10.13集顯補(bǔ)丁,需要10.12集顯補(bǔ)丁的回到第二節(jié)調(diào)整config

KernelAndKextPatches->KextsToPatch
<dict>//10.13集顯補(bǔ)丁
                <key>Comment</key>
                <string>Enable 9MB cursor bytes, 0x0a260006</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                BgAmCgEDAwMAAAACAAAwAQAAYAA=
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                BgAmCgEDAwMAAAACAAAwAQAAkAA=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Enable 128MB DVMT-prealloc, 48MB framebuffer & cursor bytes, 0x0a260006</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                BgAmCgEDAwMAAAACAAAwAQAAYAA=
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                BgAmCgEDAwMAAAAIAAAAAwAAAAM=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Sierra Boot graphics glitch</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                AQAAdSU=
                </data>
                <key>Name</key>
                <string>IOGraphicsFamily</string>
                <key>Replace</key>
                <data>
                AQAA6yU=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Disable Port 0204</string>
                <key>Disabled</key>
                <true/>
                <key>Find</key>
                <data>
                AgQJAAAEAACHAAAA
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                /wAAAAEAAABAAAAA
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Isolate IntelAccelerator HD4600 10.12.x</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                SImLqAAAAA==
                </data>
                <key>Name</key>
                <string>AppleIntelFramebufferAzul</string>
                <key>Replace</key>
                <data>
                kJCQkJCQkA==
                </data>
            </dict>
EDID修改

針對(duì)10.13的集顯花屏問題,部分只需要打上補(bǔ)丁就好了,但是HD4600移動(dòng)版在開機(jī)過程中還是會(huì)出現(xiàn)8個(gè)蘋果的花屏現(xiàn)象。經(jīng)過不斷的測(cè)試,花屏問題應(yīng)該是HD4600仿冒桌面版在第二階段顯卡重置時(shí)出現(xiàn)的,原因其實(shí)還是HD4600移動(dòng)版不兼容的問題,但是如果在顯卡重置時(shí)順帶刷新屏幕,則迫使顯卡重新讀取EDID輸出畫面,修改EDID目的就在此。這就需要修改EDID中水平同步寬度sync width,修改需要EDID工具,修改沒有什么標(biāo)準(zhǔn),只要跟之前不同即可,可以自行嘗試。

DSDT+SSDT屏蔽獨(dú)顯

獨(dú)顯屏蔽基本策略

在電腦開機(jī)時(shí)(對(duì)應(yīng)_INI method)和睡眠喚醒時(shí)(對(duì)應(yīng)_WAK method)調(diào)用關(guān)閉Nvidia獨(dú)顯的Method。(對(duì)于剛提取的DSDT與SSDT,需要將代碼中的GFX0全部替換為IGPU
方法:
一、使用 _DSM + _PS3
二、直接用_OFF(或者SGOF等等,有些機(jī)型是不同的,但是直接調(diào)用影響CPU變頻)

但是我的電腦中DSDT與SSDT存在EC依賴,需要先去掉依賴才能正常屏蔽獨(dú)顯 ,然后
在INI和WAK中調(diào)用PINI(調(diào)用PS3的方法)

移除SGOF中EC依賴,在REG加入EC依賴(此為補(bǔ)丁,復(fù)制到MaciASL的patch中使用)

# DSDT.dsl
into method label _REG parent_hid PNP0C09 code_regex ([\s\S]*) replace_matched
begin
If (LAnd(LEqual(Arg0,3), LEqual(Arg1,1)))\n
{\n
    Store (Zero, \\_SB.PCI0.LPCB.EC.FDAT)\n
    Store (0xBF, \\_SB.PCI0.LPCB.EC.FCMD)\n
}\n
%1
end;

在INI加上External聲明。(此為補(bǔ)丁,復(fù)制到MaciASL的patch中使用)

into method label _INI insert
begin
External (\_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)\n
_OFF()\n
end;
       
into method label SGOF code_regex .*EC.* removeall_matched;

創(chuàng)建PINI,在INI與WAK中調(diào)用(DSDT中修改)

Method (PINI, 0, NotSerialized)
    {
        \_SB.PCI0.PEG0.PEGP._PS3 ()
    }

——————————————————————————————————————————————————————————————————————————————

Method (_WAK, 1, Serialized)  // _WAK: Wake
    {
        PINI ()
        P8XH (One, 0xAB)
        WAK (Arg0)
        ADBG ("_WAK")
……

——————————————————————————————————————————————————————————————————————————————
Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            PINI ()
            OSYS = 0x07D0
            If (CondRefOf (\_OSI, Local0))
            {
                If (_OSI ("Linux"))
                {
                    OSYS = 0x03E8
                }

                If (_OSI ("Windows 2001"))
……

新手容易出現(xiàn)的問題:
提取的DSDT與SSDT是aml格式,需要轉(zhuǎn)換為dsl格式進(jìn)行修改,盡量不要單獨(dú)轉(zhuǎn)換,因?yàn)橹g有關(guān)聯(lián),單獨(dú)轉(zhuǎn)換會(huì)大量報(bào)錯(cuò),建議使用iasl轉(zhuǎn)換。修改完后,需要重新轉(zhuǎn)換為aml放入EFI/CLOVER/ACPI/patched/中

config->ACPI
<key>SortedOrder</key>
        <array>
            <string>SSDT.aml</string>
            <string>SSDT-1.aml</string>
            <string>SSDT-2.aml</string>
            <string>SSDT-3.aml</string>
            <string>SSDT-4.aml</string>
            <string>SSDT-5.aml</string>
            <string>SSDT-6.aml</string>
            <string>SSDT-7.aml</string>
            <string>SSDT-8.aml</string>
            <string>SSDT-9.aml</string>
            <string>SSDT-10.aml</string>
            <string>SSDT-11.aml</string>//ssdtPRGen.sh生成的SSDT變頻放在最后,否則容易失效
        </array>

五.實(shí)現(xiàn)CPU變頻

對(duì)于CPU變頻,只要是蘋果電腦采用過這一代CPU,找到CPU接近的機(jī)型再配合變頻SSDT,基本都能實(shí)現(xiàn)變頻,同時(shí)也會(huì)加載系統(tǒng)的X86,為以后睡眠打好基礎(chǔ)。就變頻本身來說,只要頻率有高有低,支持睿頻即可,無需追求很多檔位,白蘋果本身就沒有那么多檔位。而實(shí)現(xiàn)變頻的目的也是為了降低CPU能耗,保護(hù)CPU,同時(shí)為睡眠做準(zhǔn)備。

一、生成ssdt實(shí)現(xiàn)變頻
ssdtPRGen.sh生成ssdt變頻。(CPU-S中集成有,這里提供最高支持7代,更新的CPU查看ssdtPRGen.sh是否支持并直接使用ssdtPRGen.sh生成)
CPU-S(操作:變頻測(cè)試—生成SSDT)
ssdtPRGen.sh—具體方法見readme

二、加載X86PlatformPlugin
使用ssdtPRGen.sh生成ssdt變頻,基本上都可以實(shí)現(xiàn)加載X86PlatformPlugin。
對(duì)于部分需要修改X86PlatformPlugin,為部分iMac 機(jī)型開啟 HWP 或?yàn)檩^新的筆記本機(jī)型修改最低頻率等情況,只是所有生成的SSDT變頻有一定局限。

口袋妖怪heart與vit9696編寫的CPUFriend可以免去修改與安裝X86PlatformPlugin。使用CPUFriend-master.zip中ResourceConverter.sh生成的ssdt_data、CPUFriendProvider.kext與 CPUFriend.kext配合實(shí)現(xiàn)修改與動(dòng)態(tài)注入CPU電源管理數(shù)據(jù),CPUFriend-master.zip中的Instructions.md文件說明到,可以將ssdtPRGen.sh生成的ssdt與ssdt_data合并,合并方法見Instructions.md。

(之前誤認(rèn)為這個(gè)教程可以實(shí)現(xiàn)變頻,其實(shí)CPUFriend只是實(shí)現(xiàn)動(dòng)態(tài)注入電源管理數(shù)據(jù),實(shí)現(xiàn)X86PlatformPlugin加載,并不直接實(shí)現(xiàn)變頻)
由于遠(yuǎn)景論壇不穩(wěn)定,直接分享出CPUFriend的鏈接,需要注意的是CPUFriend也需要配合lilu才能驅(qū)動(dòng),生成的SSDT放入EFI/CLOVER/ACPI/patched/中
CPUFriend.kext
CPUFriend-master.zip
CPUFriend - 動(dòng)態(tài)注入 CPU 電源管理數(shù)據(jù) 作者:口袋妖怪heart

六.定制USB驅(qū)動(dòng)

放上RehanMan的最新USB驅(qū)動(dòng),基本上可以驅(qū)動(dòng)時(shí)下大部分主板USB,但不一定完美。
RehabMan-USBInjectAll(配合readme中的補(bǔ)丁可以實(shí)現(xiàn)USB2.0內(nèi)建與USB3.0 5G)

由于筆記本不同于臺(tái)式機(jī),USB接口千奇百怪,因此USB不完美的情況下要自制驅(qū)動(dòng)。附上詳細(xì)的定制USB驅(qū)動(dòng)的方法

一、修改USB總線名稱,躲避內(nèi)部遮蓋器
DSDT里,把EHC1、EHC2、XHC1兩個(gè)USB2.0、一個(gè)USB3.0總線重命名成EH01、EH02、XHC就可以
自己定制遮蓋器(即:USBInjectAll.kext)還是要配合dsdt,需要修改dsdt,如果在clover中加入補(bǔ)丁,則需要使用hotpatch的DSDT。

二、探明USB分布,根據(jù)分布定制遮蓋器
這一步需要判斷電腦上有幾個(gè)USB2.0和USB3.0接口,其中包括藍(lán)牙,觸摸板等等,這些可以在windows下檢測(cè)出來,之后就可以修改自制USB驅(qū)動(dòng)中info,配合DSDT來識(shí)別USB接口。超出15個(gè)限制的把沒用的可以直接刪掉,dsdt要?jiǎng)h,USBInjectAll.kext中port也要?jiǎng)h。最后有沒有成功IORegistryExplorer查看一下就知道,我的USB3.0比較特殊,兼容的2.0都在EH01中,因此我將HSP1到HSP15這些都刪掉了。

DSDT中USB接口
USBInjectAll.kext中的info文件
EH01總線中各端口信息

info中EH01與EH02代表USB2.0,XHC代表3.0
UsbConnector代表接口類型,0為USB2.0,3為USB3.0,255為特殊(如藍(lán)牙,觸摸板,10.12系統(tǒng)后總線類型也為255如PR11)
port-cound為端口總數(shù),port為USB接口所在位置的編號(hào)

修改完成后IORegistryExplorer查看USB2.0(左)USB3.0(右)

三、將定制好的USBInjectAll.kext放到S/L/E或者Clover/kests中,不要忘了放入必要的驅(qū)動(dòng)(FakePCIID.kest和FakePCIID_XHCIMux.kext)以及config中添加USB3.0補(bǔ)丁

KernelAndKextPatches->KextsToPatch
<dict>//USB3.0補(bǔ)丁
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
    g710////EA==
    </data>
    <key>Name</key>
    <string>AppleUSBXHCIPCI</string>
    <key>Replace</key>
    <data>
    g710////EA==
    </data>
</dict>

<dict>//10.13解除15限制補(bǔ)丁
    <key>Comment</key>
    <string>change 15 port limit to 26 in XHCI kext</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
    g32MEA==
    </data>
    <key>MatchOS</key>
    <string>10.13.x</string>
    <key>Name</key>
    <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
    <key>Replace</key>
    <data>
    g32MGw==
    </data>
</dict>

注意:
1.筆記本大多沒有超過15個(gè)接口,因此15個(gè)限制補(bǔ)丁打不打意義不大。
2.最新USBinjectAll驅(qū)動(dòng)也可以這樣修改其中的info,但是需要配合lilu
3.偶爾一個(gè)總線失效的,可以在dsdt中打入IRQ補(bǔ)丁,影響到睡眠的可以打入0x0D(筆記本)或0x6D(臺(tái)式機(jī))補(bǔ)丁

七.實(shí)現(xiàn)藍(lán)牙+WIFI

藍(lán)牙與WIFI的實(shí)現(xiàn)主要是驅(qū)動(dòng)+補(bǔ)丁,最新出現(xiàn)了hotpatch方法,加入SSDT-ARP。
博通BCM94352HMB的驅(qū)動(dòng)方法:

基本驅(qū)動(dòng):
BrcmFirmwareRepo.kext
BrcmPatchRAM.kext
FakePCIID_BCM57XX_as_BCM57765.kext
FakePCIID_Broadcom_WiFi.kext
FakePCIID.kext

hotpatch方法基本驅(qū)動(dòng):
AirportBrcmFixup.kext
Lilu.kext
將SSDT-ARP.aml放入CLOVER/ACPI/patched,onfig.plist的SortedOrder加入SSDT-ARP.aml

藍(lán)牙在USB驅(qū)動(dòng)正常后,只需要添加補(bǔ)丁即可驅(qū)動(dòng)

10.13補(bǔ)丁(10.12補(bǔ)丁見第二節(jié)調(diào)整config)

            <dict>//藍(lán)牙補(bǔ)丁
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                SIX/dEdIiwc=
                </data>
                <key>Name</key>
                <string>IOBluetoothFamily</string>
                <key>Replace</key>
                <data>
                Qb4PAAAA60Q=
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>10.11-BCM94352-5GHz-US-FCC-dv</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                QYP8/3QsSA==
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                ZscGVVPrKw==
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>AirPort Extreme</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                axAAAHUN
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                axAAAJCQ
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>AirPortBrcm4360 - fcvo</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                gflSqgAAdSk=
                </data>
                <key>Name</key>
                <string>AirPortBrcm4360</string>
                <key>Replace</key>
                <data>
                gflSqgAAZpA=
                </data>
            </dict>

八.定制聲卡驅(qū)動(dòng)

完全的自制聲卡驅(qū)動(dòng)相當(dāng)?shù)膹?fù)雜,但是制作好以后,升級(jí)系統(tǒng)不容易失效,重新制作也很簡單。這里不詳細(xì)介紹,貼上我自己的帖子和我的文章,然后結(jié)合最新方法進(jìn)行重新制作可以支持10.13.
遠(yuǎn)景帖:(適用于10.12和13)ALC892的經(jīng)驗(yàn)之談,簡化大神教程幫助喜歡動(dòng)手仿冒的朋友
簡書文章:定制仿冒聲卡驅(qū)動(dòng)完整教程(ALC892為例)

完全自制聲卡驅(qū)動(dòng),主要是要制作4個(gè)文件:
1.Platforms.xml.zlib(節(jié)點(diǎn)文件)
2.layout1.xml.zlib(layoutID)
3.Applealc-master—>resources—>alc892—>info.Plist
(描述聲卡以及對(duì)layout和Platforms文件位置、id的說明)
4.Applealc-master—>resources—>pinconfigs.kext—>contents—>info.Plist

(包含codecID和layoutID相關(guān)值)

制作好這4個(gè)文件即可使用Applealc-master生成Applealc.kext,最新的方法只是需要在Applealc-master根目錄添加版本對(duì)應(yīng)的lilu.kext,驅(qū)動(dòng)時(shí)也需要配合lilu.kext。
對(duì)于聲卡沒有高要求的,可以使用最新的Applealc-master直接生成Applealc.kext,現(xiàn)在集成度很高,大部分都可以正常使用

九.實(shí)現(xiàn)亮度驅(qū)動(dòng)

在10.12.4以前,亮度需要驅(qū)動(dòng)與ssdt配合使用。在此之后,驅(qū)動(dòng)+ssdt+補(bǔ)丁才可以使用。附上我的帖子針對(duì)10.12.4、10.12.5、10.12.6系統(tǒng)。
完美解決10.12.4 HD4600亮度驅(qū)動(dòng)失效(適用于10.13)
在10.13系統(tǒng)中,稍有改變(只針對(duì)HD4600)

1.利用Patches.xcodeproj,生成ssdt-pnlf.aml,位置到build目錄下。
2.config.plist中SortedOrder中加入ssdt-pnlf.aml,將ssdt-pnlf.aml放入efi—>clover—>apci—>patch中
3.在10.12時(shí)需要將AppleBacklightInjector.kext安裝到S/L/E中,重建緩存,efi的kext中無效。但是在10.13時(shí)直接放在efi—>clover—>kexts—>10.13中即可
4.需要DSDT、SSDT打GFX0改為IGPU補(bǔ)丁,在clover中使用GFX0改為IGPU補(bǔ)丁也可以
5.sortedorder中需要在DSDT、SSDT之后,在變頻SSDT之前
(Patches.xcodeproj見帖子中RehabMan_backlight.zip)

亮度補(bǔ)丁

<dict>
<key>Comment</key>
<string>change F%uT%04x to F%uTxxxx for AppleBacklightInjector.kext (credit RehabMan)</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
RiV1VCUwNHgA
</data>
<key>Name</key>
<string>com.apple.driver.AppleBacklight</string>
<key>Replace</key>
<data>
RiV1VHh4eHgA
</data>
</dict>

十.實(shí)現(xiàn)睡眠

睡眠問題可以說是黑蘋果里的終極問題,因?yàn)樯婕皢栴}包括方方面面,這里只聊聊我自己的心得。

1、USB不完善不行
很多睡眠問題都是USB的事情,比如一睡即醒,喚醒黑屏等等,這就需要完善USB驅(qū)動(dòng),USB所有接口必須內(nèi)建,同時(shí)DSDT中有幾個(gè)關(guān)于USB影響睡眠的補(bǔ)丁。這里自制USB驅(qū)動(dòng)就很有優(yōu)勢(shì)。

2、亮度問題
Haswell以前的CPU不需要專門設(shè)置保存亮度,因此這些CPU喚醒黑屏的幾率不高,之后的CPU需要專門設(shè)置亮度保存,所以,驅(qū)動(dòng)亮度還是不夠的。

3、CPU變頻必不可少
CPU變頻本身就為睡眠時(shí)CPU降頻提供了前提,同時(shí)實(shí)現(xiàn)變頻,則會(huì)加載X86PlatformPlugin、X86PlatformShim這兩個(gè)驅(qū)動(dòng),這兩個(gè)驅(qū)動(dòng)也同樣是實(shí)現(xiàn)睡眠的前提。

4、獨(dú)顯屏蔽
對(duì)于不能使用獨(dú)顯的筆記本,睡眠如果不能屏蔽獨(dú)顯,獨(dú)顯滿載工作,即使睡眠正常也沒有意義。屏蔽獨(dú)顯,讓筆記本在睡眠狀態(tài)下能夠待機(jī)更久。

5、關(guān)機(jī)斷電
關(guān)機(jī)斷電是很普遍的問題,現(xiàn)在clover越來越完善了,只需要添加補(bǔ)丁
1、FixDarwin_0002(修復(fù)關(guān)機(jī)斷電問題)
2、SlpSmiAtWake(幫助解決UEFI模式下睡眠和關(guān)機(jī)問題)
3、SuspendOverride(休眠覆寫,影響Fixshutdown補(bǔ)丁)

6、睡眠模式
在10.12.6中我采用睡眠模式3就可睡眠
0—老式睡眠模式
睡眠期間內(nèi)存加電,禁用安全睡眠,超快速喚醒
1—休眠模式
內(nèi)存中的數(shù)據(jù)將寫入到磁盤上,系統(tǒng)在所謂的“睡眠”時(shí)將完全關(guān)閉
因?yàn)樾枰x取先前保存在硬盤中的內(nèi)存數(shù)據(jù),所以喚醒較慢
3—睡眠模式
睡眠過程中,內(nèi)存保持通電狀態(tài),同時(shí)內(nèi)存數(shù)據(jù)在進(jìn)入睡眠模式之前同樣要寫入到硬盤
萬一沒有外接電源并且電池也完全沒電了的話,系統(tǒng)將自動(dòng)進(jìn)入休眠模式
還有其他的模式,可以自行嘗試

7、相關(guān)驅(qū)動(dòng)加載
筆記本睡眠主要4個(gè)驅(qū)動(dòng)X86PlatformPlugin、X86PlatformShim、AppleLPC、AppleHPET
其中X86PlatformPlugin、X86PlatformShim通過實(shí)現(xiàn)變頻來加載。AppleLPC通過修改DSDT或者使用SSDT-LPC或者直接修改fakesma中的info,方法很多,也很方便。AppleHPET這個(gè)大多都是原生驅(qū)動(dòng),貌似很少有驅(qū)動(dòng)不了的。

結(jié)語

以上是進(jìn)行了大量學(xué)習(xí)后的成果,從開始折騰黑蘋果,到接近無語恨不得馬上買個(gè)白蘋果,再到把自己的筆記本完善的越來越好,這一路真的學(xué)到了很多的東西,也從來沒有像現(xiàn)在這么了解一個(gè)操作系統(tǒng)的結(jié)構(gòu),同時(shí)自學(xué)swift,越來越喜歡macOS和IOS。而國外的高手也讓黑蘋果越來越容易,越來越方便,就比如hotpatch。要知道當(dāng)初學(xué)習(xí)修改DSDT與SSDT時(shí)相當(dāng)崩潰。總之,結(jié)果是好的,再也不會(huì)回到win中時(shí)不時(shí)手癢玩游戲了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容