close

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

回顧黑蘋果二號機從 2012 年 7 月誕生至今已經八年,遇到的問題不算多,2012 年採購策略正確,少繞了一些冤枉路。很不幸的這次在 macOS 11 Beta Developer Preview (簡稱 DP 版)踢到鐵板。首先,黑蘋果二號的硬體配置當初完全是以 iMac 2012 Late(iMac13,2)為目標量身打造,而這次 macOS 11 Big Sur 大幅更改核心的位置跟啟動方式,又加碼排除 2012 以前的 Mac 電腦 ,所以「舊 Mac 不能升級」與「黑蘋果無法啟動」同時發生在黑蘋果二號機上,導致除錯難度曲線瞬間陡升。

從 6月 23 日 macOS 11 發表之後一直搞不定的那幾天裡,日子真的難過。以往遇到問題時大多在 tonymacx86 爬文,然而 tomymacx86 完全禁止討論 DP 版,用 Google 搜尋的效果似乎很有限,在網路上瞎逛了幾天,後來加入臉書「我和我的黑蘋果」社團。一進社團爬了幾篇發文,很快就搞清楚問題點了,果然互動 + 滾動式的技術交流,比 Google 網海爬文的效率還高。

隨著日子漸進,問題一個一個慢慢排除,至今黑蘋果二號機已經可以順利運作 macOS 11 Big Sur DP 版,可以像往常如白蘋果升級的方式直接從 10.15 升上去,或是從自製的 USB 安裝碟進行全新安裝 macOS 11 Beta DP版。這段歷程接觸到相關的技術資訊,值得寫篇文章紀錄一下,順便發發牢騷。

大遷徙時代來臨

前一篇文章提到,Mac 的 CPU 在接下來的兩年內,將從 Intel 過渡到自家的 Apple Silicon 處理器,並且最快於今年內就有對應 Apple Silicon 的產品上市。而黑蘋果技術的重中之重:BootLoader 使用與設定,回顧這段歷史也是個遷徙的過程,以黑蘋果二號機來說,使用的 BootLoader 從早期 10.7(.5) 的 Chameleon (變色龍)到 10.10 的 Clover(幸運草),如今 11 Beta (DP) 又由 OpenCore 拔得頭籌率先支援,再結合其他小道的消息判斷,從 Clover EFI 遷徙到 OpenCore 篤定是無法迴避的必經之路。

在多年前的「淺談 Clover EFI 幸運草」文章中談過,Chameleon 到 Clover 是「假 EFI 到真 EFI」,讓 macOS 體驗更接近真正的 Mac 電腦,那這次又為什麼得遷徙到 OpenCore 呢?

新一代的 BootLoader:OpenCore

OpenCore 也是一套開源的 BootLoader 引導器,查了一下網路資料,最初誕生於 HermitCrabs 實驗室, 2019 年 7 月由黑蘋果驅動大神 Acidanthera 接手管理原始碼,開發時程才一年多並不長,版號目前還在 0.x 而已,而且更新頻率也很頻繁,是很新的項目。看到 Acidanthera 大名,大家心裡應該有底,為何要遷徙到 OpenCore 了。

如果讀者有興趣的話,可以在這裡翻翻有關黑蘋果二號的歷史文章。在多年前搞黑蘋果是很辛苦的一件事,系統裝起來之後顯卡、網路、音效、電源管理等都還有得搞,而且每次不論是大版或是小版號的升級之後,有些部分還可能得再搞一次。有些是修改 Kexts ,有些要修改 DSDT 文件,尤其對於沒寫過程式的人,DSDT 就跟天書一樣難懂,更別說要去改它。直到 Clover EFI 橫空出世,以「模擬真實 EFI 為目標」,可以將一大堆 Kexts、DSDT/SSDT 修正參數放在 Clover EFI 引導環境中即可,隨著時間推進,相關修正也越來越簡單,發展到現在,只要下載最新版 Lilu.kext、VirtualSMC.kext、AppleALC.kext、WhateverGreen.kext 這四個,就能一次搞定開機、顯示、音效等超過八成以上的黑蘋果總總問題,而這四個項目的源碼管理權就在 Acidanthera 大神手上。

簡單的說,除了 Clover EFI 源碼之外,其他大部分的黑蘋果技術都已被 Acidanthera 大神壟斷了。然後 Acidanthera 大神在今年春天時表示,以後手上負責的 Kexts 套件只會在 OpenCore 進行相容測試,放棄 Clover EFI 了。 

我認為技術被壟斷沒什麼不好,黑蘋果技術必須免費不能營利(否則會被蘋果告),統一管理之後網路教學資源也會順勢跟著統一,但你只能跟著壟斷者的步調前進。基於 Acidanthera 不再測試相容 Clover EFI 的理由,以及 Clover EFI 目前仍不支援 macOS 11 的現況,這些既成事實告訴你,離開幸運草的時候已經到了。

OpenCore 與 Clover EFI 的異同

OpenCore 與 Clover EFI 的運作原理相近,就是「創建真實的 EFI 環境,引導作業系統開機」。然而兩者之間仍有很大的差別:

  1. 作用對象不同:Clover EFI 的作用對象目標僅限於 OS X/macOS 作業系統,而 OpenCore 則是不限定,對所有被 OpenCore 引導的作業系統都會生效。
  2. 介面的設計理念不同:Clover EFI 有提供完整的圖形介面,介面也可以套用不同的佈景主題,甚至在耶誕節、新年間還會自動更換。而 OpenCore 預設只有簡陋的文字型選單。
  3. 使用 NVRAM 的程度:白蘋果並沒有 UEFI BIOS 的設定介面,開機的參數儲放在 NVRAM 。而 OpenCore 比 Clover EFI 更依賴 NVRAM,概念也更貼近白蘋果。

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

第 1 點是什麼意思呢?Clover EFI 選擇 macOS 作業系統開機時,Clover EFI 會試著讓 macOS 認為自己是在一台 Mac 機器上運作,選擇 Windows / Ubuntu 時 Clover EFI 會把開機程序直接轉回實體主機板的 UEFI 環境中。使用 OpenCore 引導作業系統時,不論是 macOS、Windows、Ubuntu,或其他作業系統,OpenCore 皆有作用,受引導的作業系統都會認為自己在一台 Mac 電腦上運作。第 2 點 OpenCore 的簡陋介面是刻意為之,因為真正的 Mac 白蘋果沒有「開機佈景主題」的功能,最多只讓使用者在開機時按 Option 鍵選擇開機硬碟的畫面,而 OpenCore 官方提供的「圖形介面」也一樣只有選擇開機硬碟,畫面也長得與白蘋果幾乎一模一樣。

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->
↑↑與白蘋果看起來一模一樣的 OpenCore 選單圖形介面。(白蘋果開機時按 Opention 鍵)

從以上就能看出兩者差異,Clover EFI 的目的僅針對 macOS ,而 OpenCore 的目的是「進入 OpenCore EFI 的一刻起,完全變成一台 Mac 」。

所以理論上 OpenCore 能實現更貼近真正 Mac 白蘋果「軟硬體整合」的體驗,例如選擇開機硬碟時,Clover EFI 可以設定在 config.plist 內,OpenCore 則是跟白蘋果相同,必須在 macOS 的「系統偏好設定 - 啟動硬碟」項目設定才會生效,啟動硬碟的參數就存放在 NVRAM 。

或許有人會覺得 OpenCore 「徹底把機器當白蘋果」的理念很不錯,然而對黑蘋果用戶來說卻不一定是好事。如果黑蘋果本來就裝了 Windows 10 也啟動完成,改用 OpenCore 引導會被作業系統認定為新的機器,而必須重新啟用 Windows 10,對黑蘋果用戶反而變得更麻煩。所以黑蘋果用戶使用 OpenCore 時必須牢記這一點,要使用原來的 Windows 10 ,開機時一定要繞過 OpenCore 引導(本文後面會提到繞過的方式)。

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->
↑↑透過 OpenCore 引導開機,在 Windows 底下被辨識為 Acidanthera 大神製造的山寨蘋果電腦。

Clover EFI 與 OpenCore 相同的地方,只剩下 Kexts 驅動「可能」可以共用,以及設定文件一樣都叫 config.plist。不過上面提到關鍵的 Kexts 已不再考慮 Clover EFI 相容,config.plist 檔名一樣但內容完全不同,說到底兩者就是本質不一樣的東西,想「一鍵轉移 Clover EFI 到 OpenCore」或是兩者對照修改的人,我建議是死了這條心,乖乖把 OpenCore 設置方式重頭學起吧!

從零開始 OpenCore 建置

我以黑蘋果二號機為例,說明如何配置 OpenCore。黑蘋果二號硬體規格如下:

1. 準備工作

配置 OpenCore 有完整且清楚的英文教學文件(網址),在開始動手前,強烈建議花多點時間閱讀,順便重新整理一次黑蘋果知識,一定會有新的收穫。

OpenCore 與 Clover EFI 一樣,都是在 GPT 磁碟最前段的 EFI 卷冊內進行設置,所以基本的操作方式都一樣。不過 OpenCore 並沒有 PKG 安裝檔,所以現階段得全手動配置 EFI 內容。先準備好相關工具如下:

必備工具:

  • 一台可以運作 macOS 與執行 Xcode 的電腦:黑蘋果或白蘋果都行,版本不要太舊就好。
  • Xcode:沒這玩意的話,以下的動作寸步難行。安裝後須先做好 Command Line Tools 設定:功能表 Xcode -> Preference,Locations 頁籤->下拉 Command Line Tools 項目,不要讓它空白即可。

貼上的影像_2020_11_24_下午12_21.png

  • EFI-Agent(下載):掛載 EFI 卷冊的好用工具。
  • ProperTree(原始碼下載):可用來編輯 Plist 檔案的輕量級工具,且對 OpenCore 有特別的功能支援,強烈建議使用此工具編輯 OpenCore 的 config.plist。官網只提供原始碼,如果想要做成 App 版,可在原始碼內 Scripts 目錄下的 buildapp.command 指令建立。(重要提醒:雖然 Xcode 也能編輯 Plist,但強烈建議不要用 Xcode,新版 Xcode 編輯 Data 型態的值會出問題。)

非必備卻很好用的工具:

  • ocbuilder:滑鼠點案就能無腦編譯生成最新版的 OpenCore 與 Kexts 檔案,對於不熟悉編譯操作指令的用戶相當好用,必須先安裝 Xcode 才能使用。使用前請自行注意是否對應最新版的 OpenCore / Kexts。
  • OpenCore-Creator:也是一鍵生成 OpenCore 和 Kexts 的好用工具(下載),系統內必須先安裝 Xcode 才能使用。和 ocbuilder 不一樣的地方是它會自動產生需虛擬磁碟作為暫存空間,完成後自動刪除,只留下編譯完成的檔案。個人覺得比 ocbuilder 好用一些。(補充:若 OpenCore-Creator 生成 OpenCore 的過程中出現 build command 錯誤時,有可能是系統內的 nasm / mtoc 的版本太舊。用 whicn 指令找出之後刪除,然後再重新生成 OpenCore 就會自動下載對應的 nasm / mtoc 版本)
  • OpenCore Sanity Checker:(項目停更不適用)線上檢查 OpenCore config.plist 設定是否完善的網站。上傳 config.plist 並選定黑蘋果硬體規格即可。
  • ocvalidate:本機檢查 OpenCore config.plist 檔案的工具。位於下載的 OpenCore 解壓縮之後的 Utilities 目錄之下。
  • Hackintools(下載):超級好用的黑蘋果萬用工具組,不要問,下載就對了。
  • GenSMBIOS:產生 SMBIOS 資訊的命令列工具。Hackintools 工具也可以做相同的事。

參考工具

  • MaciASL(下載 / Win 版):編輯與編譯 DSDT/SSDT 工具,選用。若不想自己搞 DSDT/SSDT,屆時也能下載別人做好的 DSDT/SSDT,不需要這個工具。
  • OpenCore Configuration:簡稱 OCC。編輯 OpenCore config.plist 的懶人工具。由於 OpenCore 目前的變更頻繁,使用前要注意 OCC 版本是否支援要編輯的 OpenCore 版本。若沒把握的話就不要使用。
  • OC-Gen-X(此項目已停更,不建議使用):簡稱 OCG (不是一般遊戲界說的 OCG)。產生 OpenCore 的 config.plist 的工具,使用前要注意 OCG 版本是否支援操作對象 OpenCore 的版本。若沒把握的話就不要使用。

2. 取得 OpenCore

這個項目除了可直接透過官網下載(下載連結,下載 Release 版即可),也可以用源碼編譯。目前最新的下載版 0.5.9 無法引導 macOS 11 Beta(DP)  Big Sur,所以想嘗試玩玩 macOS 11 的話,只能自行編譯。

2.1 從源碼編譯 OpenCore :很簡單,上述 Xcode 安裝並設定好 Command Line Tools 之後,開啟終端機執行指令:

git clone https://github.com/acidanthera/OpenCorePkg.git
cd OpenCorePkg
chmod a+x build_oc.tool
./build_oc.tool

編譯完成之後,在 OpenCorePkg/Binaries 底下會有 OpenCore-n.n.n-DEBUG.zip 與 OpenCore-n.n.n-RELEASE.zip 兩個檔案(n.n.n 是版號,例如 0.6.0),取 RELEASE 版就行了。若源碼有更新的話,刪掉 OpenCorePkg 目錄再重來一次上面的指令。萬一編不起來,很可能是 $PATH 變數的問題,拿掉怪怪的路徑設定試試,操作細節不提。

題外話,以前編譯 Clover EFI 常常會出問題,現在編譯 OpenCore 順利多了。

3. 取得所需要的 Kexts

先取得最主要的 Kexts 四寶:Lilu.kext、VirtualSMC.kext、AppleALC.kext、WhateverGreen.kext,全都在 Acidanthera@Github 管理專案的 Release 項目,其餘的 Kexts 需根據不同的硬體配置各自下載,例如黑蘋果二號的有線網路 Realtek RTL8111 等,可直接沿用原來就使用的試試看。 

其實 Kexts 也能從源碼編譯,而且有人已經寫好一鍵編譯的 command 腳本了,下載解壓縮之後直接點兩下就行了,編譯完成之後,桌面會生成一個 Lilu4All 目錄,底下的 Release 資料夾有一大堆編譯好的 Kexts 檔,不用自己一個一個上網找。

  • 範本下載:這篇文章內的 Kexts Update.command.zip 。附帶一提該文章的 OpenCorePkg.command.zip 就是 OpenCore 的一鍵編譯腳本。

2020.10.09 補充:近日發現編譯 Kext 的方式發生變化,有些必須在專案根目錄導入 MacKernelSDK ,否則會發生編譯失敗。以 WhateverGreen.kext 為例,用 Xcode 打開,編譯設定最下方 User-defined Setting 已經有 KERNEL_EXTENSION_HEADER_SEARCH_PATHS = $(PROJECT_DIR)/MacKernelSDK/Headers 與 KERNEL_FRAMEWORK_HEADERS = $(PROJECT_DIR)/MacKernelSDK/Headers ,所以只需補上 MacKernelSDK 原始碼即可,如下:

cd /$HOME/Desktop/Lilu4All/WhateverGreen/
git clone https://github.com/acidanthera/MacKernelSDK
xcodebuild CONFIGURATION_BUILD_DIR=/$HOME/Desktop/Lilu4All/Release

其他 Kext 以此類堆。

4. 配置 OpenCore

4.1 初始配置

在 2.1 步驟取得 OpenCore-n.n.n-RELEASE.zip 之後,解壓縮,得到像這樣的目錄結構。

貼上的影像_2020_7_15.png

接著取自 Docs 目錄下的 Sample.plist 檔案,複製到 EFI/OC 目錄下,並更名為 config.plist,如下圖:

貼上的影像_2020_7_15_下午3_53.png

依上圖概略解說一下:

  • EFI 目錄:OpenCore 配置和動作的範圍。
  • ACPI 目錄:放置 *.aml 文件的目錄,內容依 CPU 各有不同。後面會講到。
  • config.plist: OpenCore 的配置文件,後面會講到。
  • Drivers:OpenCore EFI 的相關驅動。
  • Kexts:上面步驟 3 收集到的 Kexts 驅動集都放在這裡。

我們配置的動作範圍只有 EFI 目錄而已,Docs 與 Utilities 就不去理它了。

逐一檢視 EFI 的子目錄,發現 ACPI 與 Kexts 都是空的,Drivers 與 Tools 已經有一堆檔案。

貼上的影像_2020_7_15_下午4_38.png

接下來的重點是,在 EFI 目錄下該做哪些配置的動作:

  • ACPI:依硬體需求不同,放入對應的 .aml 文件。(大部分會用到的 .aml 文件可在這裡下載)
  • Kexts:依硬體需求不同,放入對應的 Kext 檔案。
  • Drivers / Tools:依硬體需求不同,刪除多餘的 .efi 檔案。
  • config.plist:依硬體需求不同設定。

Resources 目錄底下是 OpenCore 的圖形介面素材,預設有 Audio、Font、Image、Label 四個子目錄,預設沒有任何檔案。素材檔可以在這裡下載

4.2 個別客製化配置

所謂「依硬體需求」,主要是看 CPU 和主機板。不同世代的 CPU ,會決定需要哪些 .aml 文件,不同的主機板使用不同的有線網路晶片、音效晶片,以及 USB 埠的對應差異,會影響要放入哪些 .Kext 檔案。可以到 Intel ARK 網站輸入 CPU 的型號,查詢是哪個世代的代號(英文叫 Code Name)。

4.2.1 依硬體 ACPI 需求所需要的 *.aml 檔案

以下以黑蘋果二號( i7-3770,Code Name:Ivy Bridge)為例,示範怎麼參考官網的英文教學文件。ACPI 的部分,查閱教學的這張表(網址):

貼上的影像_2020_7_15_下午5_28.png

Ivy Bridge 只需要做 CPU-PM 和 EC 的修正,點擊表格中的連結就有修正教學。其中:

  • CPU-PM 修正:就是以前寫過的文章「黑蘋果解除 CPU Turbo PStates 封印:SSDT」,採取 B 版的方式即可。最後生成的 SSDT.aml 改名為 SSDT-PM.aml。
  • EC 修正:最快的方式是下載寫好的 SSDT-EC-DESKTOP.aml(下載)。不過這個檔案收集了市面上全部的 EC 參數值,檔案比較肥大,所以也可以依照 Manual 教學,先找出主機板 DSDT 內「PNP0C09」所在的節點名稱,下載 SSDT-EC.dsl 範本並修改對應的節點名,用 MaciASL 編譯成 SSDT-EC.aml。 

因此根據 Ivy Bridge 的 ACPI 教學指南,最後得到 SSDT-PM.aml 與 SSDT-EC.aml 兩個檔案,把這兩個檔案放到 EFI/ACPI 目錄即可。

4.2.2 依硬體 Kexts 需求所需要的 *.Kext 檔案

執行第 3 步驟的 Kexts Update.command 編譯指令,最後在桌面的 Lilu4All/Releases 目錄下挑選主機板需要的 Kexts。以主機板 GA-Z77X-UP4 TH 來說,所需要的 Kexts 如下:

  • Lilu.kext:必要。
  • VirtualSMC.kext:必要,也必須有 Lilu.Kext 才能運作。可替換老舊的 FakeSMC.Kext。
  • AppleALC.kext:ALC892 的音效修正,必須有 Lilu.Kext 才能運作。
  • WhateverGreen.kext:顯示卡的驅動修正,包括能驅動 HDMI 的功能。必須有 Lilu.Kext 才能運作。
  • SMCProcessor.kext:可讀取 CPU 運作資訊,必須有 VirtualSMC.kext 才能運作。
  • SMCSuperIO.kext:可讀取主機板上的感應器數值,如風扇、電壓等。必須有 VirtualSMC.kext 才能運作。
  • SMCBatteryManager.kext:讀取電池的資訊,必須有 VirtualSMC.kext 才能運作。桌機可以不需要。
  • RealtekRTL8111.kext:Realtek RTL8111 有線網卡驅動。
  • AirportBrcmFixup.kext:Broadcom 博通的無線網卡驅動。有些淘寶買來的博通無線網卡需要加這個才能正常。二號機不需要。
  • USBPorts.kext(教學)或 USBMap.kext(教學):USB 15 埠修正,需自行製作,不在 Lilu4All/Releases 下載檔案的範圍內。 

4.2.3 Drivers / Tools 所需檔案

Drivers 部分:

  • AudioDxe.efi:EFI 環境的聲音驅動,可以省略
  • HfsPlus.efi:EFI 環境的 HFS Plus 分割區格式驅動,可以省略。
  • HiiDatabase.efi:EFI 環境的字體渲染驅動,適用於 Ivy Bridge 與更舊的主機板。
  • NvmExpressDxe.efi:EFI 環境的 NVMe 硬碟驅動,黑蘋果二號機已經在主機板 BIOS 加入(教學文章「老主機板 Z77 支援 NVMe SSD」),所以不需要。
  • OpenCanopy.efi:OpenCore 的圖形介面驅動,可讀取 EFI/OC/Resources 資源檔為介面素材,不需圖形介面者可以省略。
  • OpenRuntime.efi:OpenCore 所需要的驅動,必要檔案不可省略,已整合 APFS 驅動。
  • PartitionDxe.efi:支援複合型硬碟分割的驅動,視需求加入,可以省略。

OpenCore 的原始檔案並不包含 HfsPlus.efi 與 PartitionDxe.efi 和 Resources 資源檔,若需要可以在這裡下載(Resources 資源檔需在 config.plist 設定內的 Misc\Boot\PickerMode 字串值設置為 External 才能使用)。
另外,較新的 OpenCore 版本新增 「OpenHfsPlus.efi」檔案,不過似乎有 BUG (無法引導 Recover HD),若需要使用 HFS 檔案系統的話,使用 HfsPlus.efi 問題會少很多。

Tools 部分:附加功能,會顯示在 OpenCore 的文字選單

  • CleanNvram.efi:清除 NVRAM 的內容,不需要者可省略。
  • OpenShell.efi:提供在 EFI 環境下類似終端機環境的交互命令介面,不需要者可以省略。

4.3 config.plist 配置

整個 OpenCore 配置工作中,config.plist 是最最最重要的重點。沒弄好就無法開機。如何設置 config.plist 有完整詳細的英文版教學(網站),步驟有點繁瑣,但根據不同的 CPU 平台,仔細照著做就行了。

4.3.1 使用 ProperTree 編輯的起手式:

執行 ProperTree,功能表 File -> Open (Command+O) -> 選擇要編輯的 config.plist -> 功能表 File -> OC Clean Snapshot (Command+Shift+R)

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

OC Clean Snapshot (Command+Shift+R) 這個動作非常重要!在 Clover EFI 中,在 EFI/CLOVER 內放入所需要的 *.aml、*.efi、*.Kext 檔案就完事了。然而 OpenCore 卻不是這樣,在上述步驟 4.2 放入所需要的 *.aml、*.Kexts、*.efi 之後,必須在 config.plist 也一並加入設定,否則加入的 *.aml、*.efi、*.Kext 不會生效。甚至於 config.plist 設定內如果找不到實際檔案,引導程序就會中止運作。

而 OC Clean Snapshot (Command+Shift+R) 指令就是協助把 EFI/OC 底下的 *.aml、*.efi、*.Kext 檔案,重整到 config.plist 內,就不用手動一個一個加入了。所以說,強烈建議使用 ProperTree 編輯 config.plist,因為它對 OpenCore 有這個特殊支援。

4.3.2 編輯 config.plist

接下來是重頭戲,根據不同的 CPU 平台編輯 config.plist 內容。以黑蘋果二號的 Ivy Bridge: i7-3770 來說,英文版完整教學在這裡,細節我這裏就不重複,只說重點:

config.plist 有 8 個節點:

  • ACPI:與 ACPI 有關的設定,如上面提到的 .aml,與一些細項。
  • Booter:配置 OpenRuntime.efi 的運作參數,這部分很重要,尤其是子項目 Quirks 底下有十幾項,仔細照教學填入正確的值(True / False /數值)。這地方弄錯,可能就造成無法引導的問題。
  • DeviceProperties:定義 PCI 裝置屬性,通常是顯卡、音效這兩類。
  • Kernel:配置 Kexts。要注意的是 Kexts 有配置的先後順序,所幸 OC Clean Snapshot 也已經幫我們處理好順序的問題。
  • Misc:OpenCore 的開機行為配置,例如子項目 Boot 底下的 PickerMode 可選擇用文字清單(Builtin)或是圖形介面(External)(註:圖形介面需搭配 EFI\OC\Resources 底下的素材,可以到這裡下載),ShowPicker 顯示選擇游標...等等。子項目 Tools 定義 4.2.3 的 EFI/OC/Tools 有哪些工具程式。
  • NVRAM:注入 NVRAM 預設值。macOS 深度依賴 NVRAM,會把一堆環境設定值寫在這裡面,並依照 UUID 歸類。例如最常用到的 boot-args。以黑蘋果二號來說,boot-args 的值為 "-v debug=0x100 keepsyms=1 -no_compat_check vsmcgen=1",定義在 7C436110-AB2A-4BBB-A880-FE41995C9F82 節點項目下。

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

值得注意的是,Add 有 boot-args,Delete 也有 boot-args,意思就是開機時,先刪除 Delete 指定的參數,再把 Add 設定的內容加進去,所以看起來是成對的。

與教學不同的是,boot-args 我額外加入了 -no_compat_check 和 vsmcgen=1 兩項,這兩個是針對 macOS 11 Big Sur 而設置的。

  1.  -no_compat_check:不檢查 Mac 版本。長久以來黑蘋果二號的 SMBIOS 設定為 iMac13,2 ,這次被 Big Sur 踢出支援,若不加的話,開機時會告訴你 macOS 不支援這台 Mac,解法是 SMBIOS 改成支援的 Mac 電腦,或是 boot-args 加入這行參數。
  2. vsmcgen=1:讓最新版的 OpenCore 能成功啟動 macOS 11 Big Sur 的參數
  • PlatformInfo:設置 SMBIOS,以及允許是否變更 NVRAM、SMBIOS 內容值。SMBIOS 可以用 OCC 或是 Hackintool 隨時生成,或者沿用 Clover EFI 的 config.plist 的設定,將 SMBIOS 內容逐一複製過來(如機器序號、MLB ...值)。(產生 SMBIOS 資訊的工具:GenSMBIOS
  • UEFI:配置 UEFI 的驅動環境,這部分 ProperTree 的 OC Clean Snapshot 指令也已經幫我們處理好了。細節可視情況自行修改。

做到這邊若沒什麼問題的話,就差不多快完成了。

4.4 OpenCore 補充說明(本節內容隨時更新):

(1)HP 的機器的 config.plist 有兩個特殊設定:

  • Kernel -> Quirks -> LapicKernelPanic -> True,否則會得到 Kernel Panic 的結果。
  • UEFI -> Quirks -> UnblockFsConnect -> True,否則會看不到其他分區。

適用於另一台黑蘋果筆電 HP Probook 430 G2 。

(2)讓 OpenCore 僅針對 macOS 起作用,其他作業系統繞過 OpenCore 引導的 config.plist 設定(參考原文):

  • Kernel -> Quirks -> CustomSMBIOSGuid -> True
  • Platforminfo -> UpdateSMBIOSMode(舊版為 CustomSMBIOSMode) -> Custom

以及 Misc -> Security -> ScanPolicy 調整設定值來規避作業系統。(OpenCore ScanPolicy Generator

(3)新版 AirportBrcmFixup.kext 內嵌 AirPortBrcm4360_Injector.kext 與 AirPortBrcmNIC_Injector.kext。不過在 macOS 11 Big Sur 中蘋果刪除了 AirPortBrcm4360 驅動,這會導致使用非蘋果原生支援的 Broadcom 無線網卡(例如 BCM94352 這類需偽裝 ID 的網卡)在注入 AirPortBrcm4360_Injector.kext  驅動時發生錯誤,進而卡機的症狀(原文說明)。解決方式下:

在 config.plist 中 AirPortBrcm4360_Injector.kext 的 MaxKernel 設定成 19.9.9 即可(意即在 macOS 11 引導過程中不起作用)。對應的 Kernel 版本可查閱下方「Kernel Support Table」。

貼上的影像_2020_11_30_上午1_04.png

(4)經實測黑蘋果二號與 HP Probook 430 G2RealtekRTL8111.kext 的版本需 <= 2.2.2。版本 2.3 以後完全沒有作用。

(5)升級 OpenCore 時通常會沿用原來的 config.plist 再進行對應修改,使用 ocvalidate 可用來檢查 config.plist 對應新版 OpenCore 是否有誤。該程式位於下載的新版 OpenCore 解壓縮之後的 Utilities 目錄下。執行「ocvalidate <路徑>/config.plist 」即可。檢查結果標示錯誤的部分,只需和 Docs 目錄下的 Sample.plist 對照,以及參考同為 Docs 目錄下的 Configuration.pdf 內容,應該就能得知如何修改。這個網站 OpenCore Sanity Checker 可以幫忙檢查 OpenCore 的 config.plist 內容,挑選好 CPU 代號跟 OpenCore 版本之後,上傳 config.plist 就行了。

(6)Kernel Support Table: 

OS X Version Code name MinKernel MaxKernel
10.4 Tiger(虎) 8.0.0 8.99.99
10.5 Leopard(花豹) 9.0.0 9.99.99
10.6 Snow Leopard(雪豹) 10.0.0 10.99.99
10.7 Lion(獅) 11.0.0 11.99.99
10.8 Mountain Lion(山獅) 12.0.0 12.99.99
10.9 Mavericks(衝浪灣) 13.0.0 13.99.99
10.10 Yosemite(優勝美地國家公園) 14.0.0 14.99.99
10.11 El Capitan(酋長岩) 15.0.0 15.99.99
10.12 Sierra(內華達山脈) 16.0.0 16.99.99
10.13 High Sierra(內華達高脊山脈) 17.0.0 17.99.99
10.14 Mojave(莫哈維沙漠) 18.0.0 18.99.99
10.15 Catalina(聖卡塔利娜島) 19.0.0 19.99.99
11 (10.16) Big Sur(大瑟爾) 20.0.0 20.99.99
12 Monterey(蒙特雷) 21.0.0 21.99.99
13 Ventura (范杜拉) 22.0.0 22.99.99
14 Sonoma (索諾瑪) 23.0.0 23.99.99
15 Sequoia (紅衫) 24.0.0 24.99.99

5. 運行 OpenCore 測試

搞定上面 OpenCore 的 EFI 目錄底下所有大大小小的事情之後,執行 EFI-Agent 把 USB 或黑蘋果硬碟的 EFI 卷冊掛載起來,把做好的 EFI 目錄移動過去(結果如下圖),用這支 USB 或是硬碟的 OpenCore 引導開機試試看:

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

可以看到 config.plist 我多準備了幾組不同的 SMBIOS 準備應戰,因為 macOS Big Sur 已經不支援 iMac13,2 ,將來會遇到什麼問題也說不定。

如果遇到不能開機的問題就 Google 看看,以黑蘋果二號來說,要把 BIOS 的 VT-d 關閉才行,其他沒有特別設定。

以這次從 macOS 10.15.5 升級 11 (10.16) 來說,得把 SMBIOS 改成支援的型號,才能「把 Big Sur 10.16 Beta  安裝檔騙下來」。升級到 Big Sur 11 Beta 完成之後,可以把 SMBIOS 改回 iMac13,2,在 boot-args 加入 -no_compat_check 和 vsmcgen=1 。用 iMac13,2 開機成功之後,顯示、音效、網路、藍芽等一切都正常,看來剔除 iMac13,2 恐怕只是強迫用戶花錢買新機的手段。

【黑蘋果】幸運不再 - 大遷徙時代來臨:Clover ->

問題補充:

1. 使用 OpenCore 0.7.2+ 出現無法引導 macOS 10.15 以前的版本,症狀是在 verbose 模式下,第二頁就重新啟動。查了一下,OpenCore 從 0.7.2 版開始,對 APFS 驅動程序加載和 Apple 安全啟動進行了某些重要變更,導致在某些安全性設置的條件下,發生類似無法引導的情況。

解除安全性設置的方法:修改 config.plist 的若干設定如下

Misc -> Security -> SecureBootModel (String) 設定為 Disabled
UEFI -> APFS -> MinDate 和 MinVersion (Number) 設定為 -1

2. 黑蘋果三號機(Intel 10th Gen)於 macOS 12 Monterey 以後,系統更新不運作(收不到系統更新通知)。

原因是部分機型必須啟用 SecureBootModel 才能收到通知(受限制機型表)。解決的方式有二:

方法一:Misc -> Security -> SecureBootModel (String) 設定為 j185(即對應 iMac20,1)。不過這個方式又與問題 1 無法引導 <=macOS 10.15 衝突,所以有一好沒兩好。

方法二:Kernel -> Patch -> 新增一筆資料如下:

    <dict>
        <key>Arch</key>
        <string>x86_64</string>
        <key>Base</key>
        <string></string>
        <key>Comment</key>
        <string>Reroute kern.hv_vmm_present patch (1). Force macOS could update for Z490 VISION G</string>
        <key>Count</key>
        <integer>1</integer>
        <key>Enabled</key>
        <false/>
        <key>Find</key>
        <data>AGRpcmVjdF9oYW5kb2ZmAEVuYWJsZSBkaXJlY3QgaGFuZG9mZiBmb3IgcmVhbHRpbWUgdGhyZWFkcwA=</data>
        <key>Identifier</key>
        <string>kernel</string>
        <key>Limit</key>
        <integer>0</integer>
        <key>Mask</key>
        <data></data>
        <key>MaxKernel</key>
        <string></string>
        <key>MinKernel</key>
        <string>20.4.0</string>
        <key>Replace</key>
        <data>AGh2X3ZtbV9wcmVzZW50AEVuYWJsZSBkaXJlY3QgaGFuZG9mZiBmb3IgcmVhbHRpbWUgdGhyZWFkcwA=</data>
        <key>ReplaceMask</key>
        <data></data>
        <key>Skip</key>
        <integer>0</integer>
    </dict>

這是欺騙 macOS 對相關機型檢查回答 Yes 的設定。(資料來源:德文原文,可下載文章中的 BoardIDSkip+VMMPatch_V2.plist 附檔,裡面包含欺騙設定。)

arrow
arrow
    創作者介紹
    創作者 benjenq 的頭像
    benjenq

    -Ben's PHOTO-

    benjenq 發表在 痞客邦 留言(12) 人氣()