回顧黑蘋果二號機從 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 環境,引導作業系統開機」。然而兩者之間仍有很大的差別:
- 作用對象不同:Clover EFI 的作用對象目標僅限於 OS X/macOS 作業系統,而 OpenCore 則是不限定,對所有被 OpenCore 引導的作業系統都會生效。
- 介面的設計理念不同:Clover EFI 有提供完整的圖形介面,介面也可以套用不同的佈景主題,甚至在耶誕節、新年間還會自動更換。而 OpenCore 預設只有簡陋的文字型選單。
- 使用 NVRAM 的程度:白蘋果並沒有 UEFI BIOS 的設定介面,開機的參數儲放在 NVRAM 。而 OpenCore 比 Clover EFI 更依賴 NVRAM,概念也更貼近白蘋果。
第 1 點是什麼意思呢?Clover EFI 選擇 macOS 作業系統開機時,Clover EFI 會試著讓 macOS 認為自己是在一台 Mac 機器上運作,選擇 Windows / Ubuntu 時 Clover EFI 會把開機程序直接轉回實體主機板的 UEFI 環境中。使用 OpenCore 引導作業系統時,不論是 macOS、Windows、Ubuntu,或其他作業系統,OpenCore 皆有作用,受引導的作業系統都會認為自己在一台 Mac 電腦上運作。第 2 點 OpenCore 的簡陋介面是刻意為之,因為真正的 Mac 白蘋果沒有「開機佈景主題」的功能,最多只讓使用者在開機時按 Option 鍵選擇開機硬碟的畫面,而 OpenCore 官方提供的「圖形介面」也一樣只有選擇開機硬碟,畫面也長得與白蘋果幾乎一模一樣。
↑↑與白蘋果看起來一模一樣的 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 引導(本文後面會提到繞過的方式)。
↑↑透過 OpenCore 引導開機,在 Windows 底下被辨識為 Acidanthera 大神製造的山寨蘋果電腦。
Clover EFI 與 OpenCore 相同的地方,只剩下 Kexts 驅動「可能」可以共用,以及設定文件一樣都叫 config.plist。不過上面提到關鍵的 Kexts 已不再考慮 Clover EFI 相容,config.plist 檔名一樣但內容完全不同,說到底兩者就是本質不一樣的東西,想「一鍵轉移 Clover EFI 到 OpenCore」或是兩者對照修改的人,我建議是死了這條心,乖乖把 OpenCore 設置方式重頭學起吧!
從零開始 OpenCore 建置
我以黑蘋果二號機為例,說明如何配置 OpenCore。黑蘋果二號硬體規格如下:
- 中央處理器(CPU):Intel Core i7-3770
- 主機板:技嘉 GA-Z77X-UP4 TH (文章)
- 顯示卡:微星 MSI Radeon™ Radeon RX Vega 56 Air Boost 8G OC(文章)
- 記憶體:美光 DDR3-1600 8GBx4
- 硬碟:Samsung 970 EVO NVMe M.2 500GB(延伸閱讀:Z77 使用 NVMe M.2 SSD)
- 磁碟陣列:RocketRAID 644L + Plextor M6S 128Gx2(文章)
1. 準備工作
配置 OpenCore 有完整且清楚的英文教學文件(網址),在開始動手前,強烈建議花多點時間閱讀,順便重新整理一次黑蘋果知識,一定會有新的收穫。
OpenCore 與 Clover EFI 一樣,都是在 GPT 磁碟最前段的 EFI 卷冊內進行設置,所以基本的操作方式都一樣。不過 OpenCore 並沒有 PKG 安裝檔,所以現階段得全手動配置 EFI 內容。先準備好相關工具如下:
必備工具:
- 一台可以運作 macOS 與執行 Xcode 的電腦:黑蘋果或白蘋果都行,版本不要太舊就好。
- Xcode:沒這玩意的話,以下的動作寸步難行。安裝後須先做好 Command Line Tools 設定:功能表 Xcode -> Preference,Locations 頁籤->下拉 Command Line Tools 項目,不要讓它空白即可。
- 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 之後,解壓縮,得到像這樣的目錄結構。
接著取自 Docs 目錄下的 Sample.plist 檔案,複製到 EFI/OC 目錄下,並更名為 config.plist,如下圖:
依上圖概略解說一下:
- EFI 目錄:OpenCore 配置和動作的範圍。
- ACPI 目錄:放置 *.aml 文件的目錄,內容依 CPU 各有不同。後面會講到。
- config.plist: OpenCore 的配置文件,後面會講到。
- Drivers:OpenCore EFI 的相關驅動。
- Kexts:上面步驟 3 收集到的 Kexts 驅動集都放在這裡。
我們配置的動作範圍只有 EFI 目錄而已,Docs 與 Utilities 就不去理它了。
逐一檢視 EFI 的子目錄,發現 ACPI 與 Kexts 都是空的,Drivers 與 Tools 已經有一堆檔案。
接下來的重點是,在 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 的部分,查閱教學的這張表(網址):
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)
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 節點項目下。
值得注意的是,Add 有 boot-args,Delete 也有 boot-args,意思就是開機時,先刪除 Delete 指定的參數,再把 Add 設定的內容加進去,所以看起來是成對的。
與教學不同的是,boot-args 我額外加入了 -no_compat_check 和 vsmcgen=1 兩項,這兩個是針對 macOS 11 Big Sur 而設置的。
- -no_compat_check:不檢查 Mac 版本。長久以來黑蘋果二號的 SMBIOS 設定為 iMac13,2 ,這次被 Big Sur 踢出支援,若不加的話,開機時會告訴你 macOS 不支援這台 Mac,解法是 SMBIOS 改成支援的 Mac 電腦,或是 boot-args 加入這行參數。
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」。
(4)經實測黑蘋果二號與 HP Probook 430 G2,RealtekRTL8111.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 就行了。
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 引導開機試試看:
可以看到 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 恐怕只是強迫用戶花錢買新機的手段。
問題補充:
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 附檔,裡面包含欺騙設定。)
留言列表