OpenCore 中文教程

Spread the love
OpenCore

前言

目前為止,最新版的 OpenCore (V0.5.1) 已經在macOS 10.14.6至10.15.x 已經順利引導成功了。OC引導與 CLOVER 兩者之間的差異性,根據實測結果,OpenCore 確實優於 CLOVER 同時也展現它的優越穩定性。個人針對這種新型的引導程序,除了使用現行Clover EFI 引導程序以外,這個教程是要教導你如何使用 OpenCore 引導macOS系統的另一選擇。

本教學會隨著版本的修正而新增或刪減章節。

簡介

OpenCore (簡稱OC) 是一個著眼於未來開源引導工具, 最初誕生於HermitCrabs 實驗室, 現在接手於Acidanthera, 其目的是創造一個更加嚴謹的模組化的輕量引導系統。

OpenCore (簡稱OC) 是一種全新的引導方式,隨著越來越多的kexts開始放棄Clover, 我相信提早使用OC會對你未來使用黑蘋果會有很大的幫助。這個教程只能作為你探索的起點。請仔細閱讀並時刻牢記你的硬件可能有不同的配置要求。如果你打算要開始使用OC引導的話,你得是先做足功課,需要多看一些相關OC引導的文章,再來自行製作OC引導。如果你都準備好了,那麼請你下載製作OC引導的相關軟體,準備大搞你的黑蘋果吧!

備註:
ㄧ:以下是我個人推薦 OpenCore 相關的教學網站,本教學文章皆取自於自各大黑蘋果教學網站精髓,經個人多次測試沒問題之後,而寫出這一份適用於不支援 NVRAM 之z390系列等比較新的主機板,重新再編譯而來。

二:本文件以OpenCore 051官方發行版為基準,除非你有能力,下載052測試版本,但由於測試版的Config 程式碼太多雜亂無章,一旦設定完以後,仍無法使用的可能性,你得需要做比對。

準備工作

請下載下列軟體:

本教學是針對我個人使用技嘉 Z390 AORUS PRO WIFI 主機板製作,同時也支援其他主機板。 會因版本隨時更新修改。

Z390 AORUS PRO WIFI(1.0)

0-1 BIOS

先確認主機板 BIOS 是否以下功能,有的話請禁用:
英文中文
Fast Boot快速啟動
CFG Lock (MSR 0xE2 write protection)CFG 鎖(MSR 0xE2 寫入保護)
VT-dVT-d
CSM兼容性支持模塊
在 BIOS 啟用以下功能:
英文中文
VT-xIntel VT 虛擬技術
Above 4G decoding大於4G 地址空間解碼
Hyper ThreadingHT 超執行緒技術
Execute Disable Bit執行禁止位元,類似防火牆功能
EHCI/XHCI Hand-off EHCI/XHCI USB 晶片控制器
OS type: other types操作系統類型:設定其他

 

創建USB

創建USB很簡單。您所需要做的就是將其格式化為帶有GUID分區圖的MacOS Journaled。USB沒有實際大小要求,因為OpenCore的整個EFI小於5MB。

基本文件夾結構

要設置OpenCore的文件夾結構,您需要從OpenCorePkg抓取那些文件,並構建您的EFI使其類似於以下內容:

ㄧ、 OPENCORE目錄和文件

  • 請打開下載好的最新版OC(0.5.2),把Doc文件夾下面的SampleFull.plist 改名為 config.plist,並把此文件移動到EFI目錄裡面。
  • 打開EFI—Kexts 資料夾,把主機板相關硬體的kexts 先放進去。
  • 根據作者指示,放入KEXT有一定的順序排列。

KEXT

我的主機板所需要Kexts如下,你可以依據你的主機板硬體晶片來新增或刪除kext:

Lilu.kext 
這是與Applealc.kext 和 WhateverGreen.kext 一起搭配使用kext,該KEXT 為第一順位。

Applealc.kext
音效卡驅動程式

VirtualSMC.kext
蘋果SMC仿真器,類似蘋果的BIOS。

SMCProcessor.kext
CPU 內核傳感器/VirtulSMC 全家桶之ㄧ

SMCSuperIO.kext
IO傳感器/VirtulSMC 全家桶之ㄧ

*WhateverGreen.kext
這是核顯和AMD、NVIDIA 顯卡驅動程式

IntelMausi.kext 
Intel 網卡驅動程式

Usbinjectall.kext
USB端口驅動(你也可以定制自己的USB補丁)
  • 注意:成員若是在主機板使用了1820A,1560,1830等網卡,你得放入自己對應相關驅動;若是使用螃蟹卡或是USB網卡者,這裏也可以放入驅動或是廠商提供驅動程式。筆記型電腦部分可能需要更多傳感器或是補丁之類的,請自行補齊VirtualSMC的那些傳感器補丁和其他硬體驅動。
  • 打開EFI—Drivers,我們把常用的一些.efi文件放進去,一般情況下你需要放入一些修正檔(補丁):

Drives

我們把常用的一些.efi文件放進去,一般情況下你需要放入修正檔:

  • 這裡請注意,根據作者指示,放入efi 有一定的順序排列,不可以排錯,否則OC無法運行。 
ApfsDriverLoader.efi 
支持APFS格式程序
MemoryAllocation.efi 
這個程序可以幫助z390系列,空出第一個512MB內存。當你在開啟內顯時,不會因為BIOS分配內存不一時,既使使用了slide 參數,也會卡在++++++ 或是slide 這裏,無法進入系統。
FwRuntimeServices.efi
內存尋址補丁
EmuVariableRuntimeDxe.efi
這個程序可以幫助一些無法支援Apple原生Nvram的主機板使用的,藉由該程序來模擬 Apple NVRAM。部分主機板如Z370、 x299、C422 或是早期的主機板等型號之主機板是不需要不需要這個文件。
VBoxHfs.efi
HFS格式支持
UsbKbDxe.efi
這個程序是鍵盤組合鍵的使用
VirtualSmc.efi
SMC 仿真器

備註:從2019 年9 月以後, Acidanthera 開發的內核驅動(Lilu, AppleALC 等等) 不再會在Clover 上做兼容性測試

把下載好的文件放入該處的資料夾中,整個 EFI 文件夾大致如下:

整個EFI檔資料夾的架構

提取主機硬件訊息

如果你目前使用的Clover 引導的話,可以事先下載有關於目前主機所有的DTST和SSDT相關訊息,最間單的方法,使用這個軟體讓它跑完整個程序,所有的文件包括CLOVER、kext、DTST、SSDT等相關文件,結合成一個壓縮檔,請務必要保留該檔案備用,我們會在OC優化課程當中會用到。

二、Config.plist 修改

這個章節我會把 config 文件 的由上而下來說明。內容可能會寫的因翻譯的不同結果會有所差異,敬請見諒。這是為了為了讓『小白』能夠明白各個選項的用途,而寫的引導教程。OpenCore 官方強烈建議使用 Apple XCode 軟體來編輯這個 Config.plist,其他的任何編輯軟體未經官方認可,包括 Plistedit pro 軟體,即有可能會傷害 config.plist 文件的本體。

請記住,OpenCore中的Config.plist與Clover的config.plists不同。它們不能混合和匹配。而且,如果您不知道所有內容,您還需要閱讀文檔。
首先讓我們複製sample.plist,將重複的名稱重命名為config.plistXcode並打開。

在這一點上,您已經註意到有很多組:

  • ACPI:用於加載,阻止和修補ACPI。
  • DeviceProperties:在此處設置PCI設備補丁,例如Intel Framebuffer補丁。
  • Kermel:我們在哪裡告訴OpenCore要加載哪些kext,要加載的順序以及要阻止的kext。
  • Mise:OpenCore引導加載程序本身的設置。
  • NVRAM:在這裡設置引導標誌和SIP之類的NVRAM屬性。
  • Platforminfo:這是我們設置您的SMBIOS的地方。
  • UEFI:告訴OpenCore加載哪些驅動程序以及加載順序。

ACPI

ACPI 選項包括了四個部分:Add, Block, Patch, Quirks。首先我們先把 root下面的兩條#WARNING – 1和#WARNING – 2 刪除,這兩條訊息是沒有實際意義。

ACPI-Add

這個單元主要填寫我們使用常常使用的SSDT以及DSDT文件,如果沒有的話,請把0-8項默認的ssdt選項全部給刪除掉。假設你有修改的SSDT或者DSDT文件能力,請先將文件放入EFI/OC/ACPI下。

因為我個人有使用 Thunderbolt 3卡,我需要添加有關 Thunderbolt 3 介面卡的 ssdt 文件:

  1. Item 1
  2. Comment               String           Thunderbolt3
  3. Enable                     Boolean       YES
  4. Path                         String            SSDT-TB3.aml

ACPI–Block

這個目錄下是禁用一些SSDT/DSDT,暫時不填寫。

ACPI–Patch

在10.15中,這裡我們需要填寫一下熱補丁。黑果小兵黑的部落格的教學方法,把EC控制器 (EC0) 改名為 EC 來確保能進入Cataline 作業系統。假設你還不知道你的控制器叫什麼名字,請將下面熱補丁都填上:

  1. Comment: EC0 to EC
  2. Count:0
  3. Enabled:YES
  4. Find:<4543305F>
  5. Limit:0
  6. Mask:<>
  7. OemTable:<>
  8. Replace:<45435F5F>
  9. ReplaceMask:<>
  10. Skip:0
  11. TableLength:0
  12. TableSignature:<>

注意:某些主機板的 EC 控制器名字可能會叫 H_EC 等,請自行提取 DSDT並蒐索PNP0C09,來獲取EC控制器的名字。

其他主流的主機板例如華擎、華碩、微星主機板,可能會遇到 RTC問題 而無法進入系統,同樣地也需要嘗試添加hotpatch補丁來解決:

  1. Comment: RTC fix 
  2. Count:0 
  3. Enabled:YES 
  4. Find: <A00A9353 54415301 > 
  5. Limit:0 
  6. Mask:<> 
  7. OemTable:<> 
  8. Replace: <A00A910A FF0BFFFF > 
  9. ReplaceMask:<> 
  10. Skip:0 
  11. TableLength:0 
  12. TableSignature:<> 
資料來源:

ACPI-Quirks

該項目共有有五項,選擇Yes or No ,大致解釋如下:

QuirksValue解釋
FadtEnableResetNO一些舊的主板需要對FADT進行標記來激活電腦的開機和關機功能,這裡我們不許要啟動它(如果你遇到關機變重啟,可以打開試試,我們之後也會在nvram中將這個問題修復)
NormalizeHeaders YES清理ACPI頭,一些主板的ACPI表需要打開這個修復啟動
RebaseRegionsNO換硬件、升級BIOS等對硬件的操作會對ACPI表產生影響,一般不需要打開
ResetHwSigNO休眠相關項,台式機不需要
ResetLogoStatusNO 

Booter

這個項目跟 Fwruntimeservice.efi 有相當大關係。在aptiomemoryfix 停止更新後,此修正檔已經正式更名為 Fwruntimeservice,並將一些功能與OC合併、模塊化。對於使用Z390等無法原生NVRAM的主機板的用戶來說,這裡的選項請你務必要格外注意一下唷。

  • AvoidRuntimeDefrag:
    此選項可修復UEFI運行時服務(日期,時間,NVRAM,電源控制等)。但大多數Apple和VMware固件需要此功能。Z390或其他具有NVRAM問題的主機板必須啟動該功能,我選擇 YES。
  • DevirtualiseMmio:
    記憶體注入方式,包括使用 KASLR方式 (分佈式映射到各個內存位址中)以及連續性方式。當在使用KASLR 時,PCIE 加載到記憶體,有可能會佔據所有 avaliable 值而導致 OC 的內核以及內核緩存無法注入,導致啟動失敗。使用KASLR方式非常容易出錯,目前我沒用過。比較適合我們使用連續性的記憶體注入方式,並在boot args中添加 slide=1(以後再說明。)。所以這個選項我們選擇NO
  • DisableSingleUser:
    是否能開啟單用戶模式。我這裡選擇NO
  • DisableVariableWrite:
    這是一個安全選項,允許在macOS中限制NVRAM訪問。這種Quick的要求OC_FIRMWARE_RUNTIME 實現的協議FwRuntimeServices.efi.對一些非原生NVRAM主板需要模擬nvram.plist,進而寫入variable值。因此我們要禁止此項來防止其他程序對nvram進行寫入,我們這裡選YES
    注意:如果你的主機板若是支持原生nvram ,請選擇NO!
  • DiscardHibernateMap:
    當電腦從休眠(hibernation)中喚醒時,硬盤裡的資料會恢復到內存中去,但這個時候OC的內核以及內核緩存等也會寫入,這樣可能導致衝突,這可用於解決較舊硬件上的錯誤內存映射,這個選項是幫助我們解決這個問題的。注意睡眠sleep休眠hibernation是兩個概念,這裡我選擇NO
  • EnableSafeModeSlide:
    此Quick的必要性取決於安全模式的可用性。如果啟動到安全模式失敗,則可以嘗試啟用此選項。此選項與在啟動到安全模式時遇到問題的用戶有關(例如,通過按住shift或使用-x boot參數)。默認情況下,安全模式強制滑動0,就好像系統是使用slide = 0 引導參數啟動的。此 Quick 嘗試修補boot.efi 以解除該限制,並使用其他值(從1到255)。需搭配ProvideCustomSlide一起啟用此Quick。像z390這樣本來也不用分佈式註入內存方式的(KASLR),我就選擇YES。
  • EnableWriteUnprotector:
    此選項通過在執行期間從CR0寄存器中刪除寫保護(WP)位來繞過UEFI運行時服務的代碼頁中的RˆX權限。這個 Quick 需要OC_FIRMWARE_RUNTIME在中實現的協議 FwRuntimeServices.efi。所以 nvram 能正常寫入而不受到UEFI內的一些服務的影響,任何主機板必須要選擇YES
  • ForceExitBootServices:
    這個選項是讓那些非常老舊的主板也能使用內存尋址,正常情況下選NO。
  • ProtectCsmRegion:
    官方對此項目的解釋與 AvoidRuntimeDefrag 類似,除非你明白這是什麼,不然選擇NO,其實我也不明白。
  • ProvideCustomSlide:
    當在內存不足時提供自定義的KASLR幻燈片,此選項強制macOS在可用的當中使用偽隨機值。這也確保了slide=出於安全原因永遠不會將參數傳遞給操作系統。我選擇 Yes。
  • SetupVirtualMap:
    該Quick的必要性由早期啟動故障確定,通過執行分配的虛擬記憶體到物理記憶體的早期啟動身份映射來解決此問題。因此,我們通過虛擬記憶體來建立連續性記憶體來提供OC使用,並同時映射到分散的物理記憶體當中。所以這個選項我們選擇YES
  • ShrinkMemoryMap:
    某些固件具有非常大的內存映射,不適合Apple內核,最多允許64個插槽用於運行時內存。該Quirk嘗試統一相似類型的連續插槽,以防止引導失敗。以目前新款的主機板的規範性來看,大都是符合蘋果的所要求的,所以我們並不需要啟動它,選擇NO。

解決某些NVRAM問題

PreventRuntimeDefrag:對於已啟用的NVRAM讀取,設置為YES。
EnableWriteUnprotector:對於已啟用的NVRAM寫入,設置為YES。

  • NVRAM讀取測試應正確顯示Hackintool / NVRAM中的NVRAM信息。
  • NVRAM寫入測試應確保啟動磁盤正確。(默認名稱必須為Macintosh HD)
  • 已在華碩X299,Z370M-Plus II和技嘉Z370 AORUS Gaming 5和 7上進行了測試。
  • 此功能基於OpenCore 0.0.4 08082018發行版,並與FwRuntimeService.efi驅動程序一起使用。

DeviceProperties

此項是用來注入你的設備屬性的功能。主要是顯示卡和音效卡兩部分。同樣你也可以定制一些設備到你的關於本機–系統報告–PCI列表中,但不一定需要填入。

音效卡

打開hackintool,首先我們需要找自己音效卡的地址,到PCI列表中尋找 IOReg IOname 那欄,一般音效卡的設備名稱叫做HDEF或者HDAS。

我們找到的音效卡的PCI路徑為 PciRoot(0x0)/Pci(0x1f,0x3)
把預先填寫在那裡的 PciRoot(0x0)/Pci(0x1b,0x0)項目,改成我們真正的聲卡路徑。OC默認填寫的聲卡ID為<01000000>。這裡我們需要把它換成自己系統的ID。

  • 打開Hackintool,找到聲卡選項部分,我們可以看到自己的聲卡編號,我的是ALC1220。
  • 參考黑果小兵關於音效卡部落格 的文章,並蒐索我們的音效卡型號:ALC1220。音效卡型號對應1, 2, 3, 5, 7, 11, 13, 15, 16, 27, 28, 29, 34 的layout ID。選則自己能使用ID。
    這裡我們選擇7這個ID進行測試,將7轉化成16進制格式為07,後面為了滿足格式要求添加6個0,則為07000000,將這個值替換剛才預先填的01000000中。如果我們測試ID為15,15的16進制為1d,補上6個0則為1d000000。
  • OC 默認的ID值01000000,大部分的主機板也是可以用的唷!
  • 至於一些奇怪的音效卡,可能需要注入device ID才能使用,那麼請你爬文在測試看看吧!
  1. PciRoot(0x0)/Pci(0x1f,0x3)
  2. device-id data <70a10000> //這個device id是固定的,不要問為什麼是這個id
  3. layout-id data <0b000000> //這個Layout id 是我隨便寫的,你得按實際情況填寫
  • 假設你測試所有的ID都無效時,請確保你的操作過程正確的,並測試用萬能音效卡補丁來替換AppleALC這個修正檔。如果再不行的話,你可能需要自行編譯音效卡修正檔

CPU 內顯

打開 PciRoot(0x0)/Pci(0x2,0x0) 選項,此項為驅動CPU內顯。如何驅動CPU內顯,可能因情況分為以下三種:
1.只有核心顯卡的DP顯示器用戶。(HDMI驅動部分目前仍在研究當中)
2.沒有核心顯卡的用戶。此指使用i5-9400F 這樣的用戶。
3.使用 iGPU+DGU 作為主力的使用者。注意,本教學只討論8代和9代CPU的機器,至於其他CPU機型者,請其他在論壇或者黑果小兵博客中搜索相關代碼。

只有內顯的且只有DP顯示器用戶

8代和9代的內顯 ID 分別為:3E9b0007,device ID為3e9b0000,但是我們需要符合一定的順序格式填入進去。前者為內顯ID,後者應為廠商代號。填寫數據大致如下!

  1. AAPL,ig-platform-id data            <07009b3e>
  2. device-id data                               <9b3e0000>
  3. enable-hdmi20 data                    <01000000>
    如果不是hdmi 2.0(查看主機版說明書),不需要填寫這行。
  4. framebuffer-unifiedmem data   <00000080>
    內顯記憶體相關資訊

CPU無內顯的用戶

使用無內顯的CPU,不需要填入此項,可以直接把 AAPL,ig-platform-id 刪除。

使用iGPU+DGPU,同時用獨顯做主力的使用者

一般這種情況我們一般把CPU顯卡當作加速使用,而輸出方面則用獨立顯卡。這就是我們說的『無頭模式』,使用FCPX時非常好用,同時也開啟HEVC的功能。在這裏,我們只要填一個能夠作為加速用的核顯 ID 即可了:

  1. AAPL,ig-platform-id data <0300983e>

Block

是禁用一些設備的,我們按默認就行了,不需要任何修改。

Kernel

這裡是內核相關選項。

–Add

這個項目裡是要填寫kexts的相關資料。值得注意的是OC的kexts填寫必須注意順序,比如applealc的依賴是lilu,那麼lilu必須填在第一個;SMCProcessor.kext依賴於Virtualsmc.kext。那virtualsmc必須放在SMCProcessor.kext之前。

OC文件默認常用的KEXT文件已經被加載裡面了,我們只需要在加入一些沒加載的KEXT就可以了。特別要留意的是enabled那個區塊,我們要用手動的方式改成yes去開啟它,同時把一些不用給刪除了:

  1. Item 0
  2. BundlePath String Lilu.kext //kext的名字
  3. Comment String //你自己填一個註釋,可以不填
  4. Enabled Boolean YES //啟動此補丁,反之則為關閉
  5. ExecutablePath String Contents/MacOS/Lilu //通過右鍵kext顯示包內容查找lilu運行文件的真正路徑
  6. MaxKernel String //此補丁支持的最大系統版本,填19為10.15,18位10.14;我們一般情況下留空
  7. MinKernel String //此補丁支持的最小系統版本
  8. PlistPath String Contents/Info.plist //kext的plist位置,可以右鍵kext顯示包內容查找正確路徑
  9.  
  10. …………
  11. …………
  12.  
  13. Item 4
  14. BundlePath String WhateverGreen.kext
  15. Comment String
  16. Enabled Boolean YES
  17. ExecutablePath String Contents/MacOS/WhateverGreen.kext
  18. MaxKernel String
  19. MinKernel String
  20. PlistPath String Contents/Info.plist
  21.  
  22. …………
  23. …………
  24. Item 7
  25. BundlePath String USBPorts.kext
  26. Comment String
  27. Enabled Boolean YES
  28. ExecutablePath String //一些沒有執行文件的kext不需要填寫
  29. MaxKernel String
  30. MinKernel String
  31. PlistPath String Contents/Info.plist
  32.  
  33. …………
  34. …………

–Block

禁用一些kexts。目前用不到,不用理會。

–Emulate

此選項幫助 Ivy Bridge 和一些不受支持的CPU加載電源管理的。所有選項按默認即可。

–Patch

這裡是為一些kext打補丁用的。之前我們在使用Clover時,常會填寫USB解除限制補丁,但是現在OC已經匯集這個修正檔了。如果你有其他需要填寫的修正檔,也可以在此填寫。目前這裡已經沒啥好填的了,默認即可,你也可以把裡面的全刪了。

–Quirks

這裡是內核相關的快捷選項,非常重要,請大家務必要詳看以下教學說明。

  • AppleCpuPmCfgLock:
    僅當無法在BIOS中禁用CFG-Lock時才需要,Clover對應的對像是AppleIntelCPUPM。請確認您可以禁用CFG-Lock,大多數係統無法使用它啟動,因此需要使用此Quirk。至於如何解CFG鎖以後我在寫詳細教程。如果你不會解這個鎖,你就選擇YES,解鎖的情況下選擇NO。注意,CFG的解鎖對之後,對主機的性能會更提升一些,有能力還是解一下吧!這裏我已經解鎖了,我選擇NO。
  • AppleXcpmCfgLock::
    同上!
  • AppleXcpmExtraMsrs::
    禁用奔騰和某些Xeon等不受支持的CPU所需的多個MSR訪問。針對在沒有原生電源管理的CPU上啟用。一般是Haswell-E, Broadwell-E, Skylake-X 這三種CPU需要填寫 YES。除此之外的CPU選擇NO
  • CustomSMBIOSGuid:
    對UpdateSMBIOSMode自定義模式執行GUID修補。通常與戴爾筆記本電腦有關。,我們選擇NO。
  • DisableIoMapper::
    首選在ACPI部分中刪除DMAR或在BIOS中禁用VT-D。。如果在BIOS裡已經禁用 vt-d 了,這裡選擇NO就行了。
  • ExternalDiskIcons::
    這是AHCI控制器相關的選項。目前的主機板都對AHCI非常的支持,這裏選擇NO就可以了。
  • LapicKernelPanic:
     在AP核心lapic中斷時禁用內核恐慌。HP筆記本的內核崩潰選項,我們選擇NO。
  • PanicNoKextDump::
    允許在發生內核緊急情況時讀取內核緊急情況日誌,目前我選擇NO。
  • ThirdPartyTrim:
    開啟Sata類SSD的trim選項功能。這裡是針對sata接頭的固態SSD,我個人使用M.2,所以選擇NO。自行根據情況選擇。
  • XhciPortLimit:
    這是解除USB 15個端口限制。如果你尚未編譯USB 3.0定制ssdt-uiac.aml的話,請你選擇YES。

Misc

這裡都是一些開機引導類的設置。

–BlessOverride

這個選項是幫助我們尋找一些不尋常的EFI位置的,除非你有這種情況,不然我們不需要填寫任何東西。

–Boot

  • ConsoleBehaviourOs:這是設定GUI介面的解析度,開機時顯示效果不佳,設置為ForceGraphics。
  • ConsoleBehaviourUi: 這是設定GUI介面的解析度,開機時顯示效果不佳,設置為設置為Text。
  • HibernateMode::檢測休眠模式。黑蘋果一般都不支持休眠喚醒,選none。如果你的主板支持原生nvram、並想測試休眠,可以考慮填auto。
  • HideSelf:如果要在OC Bootloader上隱藏EFI分區,請選擇 Yes。
  • PollAppleHotKeys:開啟一些熱鍵功能選項。這裏指的是Cmd+K,Cmd+S之類的。可能一些鍵盤對這個功能支持的並不好,甚至我的原生蘋果鍵盤都不行,反而普通鍵盤卻可以使用,目前我也不知原因,所以,我選的是NO。萬一開機時發現鍵盤無法選擇使用時,請你也選NO,並且刪除OC/ACPI下的UsbKbDxe.efi
  • Resolution: 開機分辨率選項。我的顯示器是1080P 16:9的畫面,我就填寫1920×[email protected]。@60是頻率。這個部分請你根據目前情況來填寫或者不填。如果遇到開機蘋果LOGO很大,你需要按你的分辨率填寫。
  • ShowPicker::是否顯示開機啟動盤選項。例如 MAC、WINDOWS等等。我們選擇YES
  • Timeout:倒數計時器功能。默認為5秒,亦可修改該數值。
  • UsePicker:是否要使用opencore引導?必須選擇Yes。

–Debug

開啟debug模式選項。這裡我們暫時不需要做任何設定。

–Entries

這個選項,是幫助你添加一些你希望的引導路徑。這裡暫時略過。

-Security

  • AllowNvramReset:在引導選單添加『重置 nvram 緩存功能』的選項,我們選YES。
  • ExposeSensitiveData:這是要模擬nvram的選項,這個數值我們必須填 3。
  • HaltLevel:按默認設置即可。
  • RequireSignature:黑蘋果的 vault 加密方式,我不需要這個功能,選擇NO
  • RequireVault:開啟黑蘋果加密。不需要,選NO

ScanPolicy:

顯示所有安裝系統硬碟的選項。原默認值暫時不用修改。若是要安裝全新系統時,可以填入『0』。如何開機的時候默認進入的系統永遠是Mac 系統碟,且屏蔽其他的系統碟,或是保留winOS 系統碟的開機選單。製作OC引導之安裝碟方法,如下:

掃描策略(以位為單位)
ScanPolicy值,使用十六進制計算器添加值,macOS caluclator應用程序已使用⌘+ 3內置此值)。將您的值加起來,並將此十六進制值添加到ScanPolicy中,這將需要轉換為十進制值,一旦粘貼它,Xcode會自動為您轉換。掃描策略(以位為單位) ScanPolicy值,使用十六進制計算器添加值,macOS caluclator應用程序已使用⌘+ 3內置此值)。將您的值加起來,並將此十六進制值添加到ScanPolicy中,這將需要轉換為十進制值,一旦粘貼它,Xcode會自動為您轉換。
0x00000001 - Known File Systems Only
0x00000002 - Known Device Types.
0x00000200 - HFS File System Scan
0x00000400 - Allow EFI Partition Scan
0x00010000 - Allow Sata Scan
0x00020000 - SAS Scan
0x00040000 - SCSI Scan
0x00080000 - NVMe Scan
0x00100000 - CD/DVD Scan
0x00200000 - USB Drive Scan
0x00400000 - FireWire Scan
0x00800000 - SD/Card Media Scan

Tools

用於運行啟動時間工具,例如清除NVRAM,EFIShell或memtest86

Entries

開機選單加入工具的選項。目前只有重置nvram的工具是有用的。正式版推出以後,或許這個選項就會發揮功能了。目前暫不理會。NVRAM

NVRAM

–Add

  • 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14  //  UIScale Data <02> 
    這裡填寫01為普通的UI顯示模式,02為開啟HIDPI的UI顯示模式。我選擇1。
  • 7C436110-AB2A-4BBB-A880-FE41995C9F82  //  boot-args String :Slide=1 darkwake=0 -v :
    slide=1表示從第一組內存開始連續注入。
    darkwake=0 在mojave 系統使用休眠的參數。darkwake=8 亦可適用。
     -v 是跑代碼,在系統尚未穩定之前,透過跑代碼模式方便除錯。確認穩定之後再刪除-v 即可。
  • bootercfg String log=0 debug=0 level=0 
    bootercfg-once String log=0 debug=0 level=0
    這個程序碼自行添加進去,有助於無法在FV2引導期間關閉efi詳細調試輸出,並且引導選擇器未顯示SATA SSD驅動器之一。。
  • csr-active-config Data <00000000> 關閉SIP保護參數值。
    00000000 – SIP 完全開啟
    30000000 – 允許未簽名的 Kext 加載並允許寫入受保護的文件系統路徑
    E7030000
     – SIP 完全關閉。官方認定。
    67000000 – 不建議使用。但我發現要開啟Hidpi 時,需要用這個參數值。
  • nvda_drv Data <31> (設為31時啟用NVIDIA WebDrivers)。
  • prev-lang:kbd Data <72752d52 553a3235 32
    這個功能是蘋果官方針對世界各國語言所認定相關設置鍵盤的參數值。OpenCore 官方默認以俄語為主。當你一開始使用OC程序作為引導時,你會發現在安裝過程或是升級系統版本時,會變成 俄文提示。

    參考文獻:AppleKeyboardLayouts.txt
    修正方法:使用Xcode 和 Hackintool 配合使用。
    十六進制值:<0x7A682D656E3A30>。ASCll:zh-en:0 默認為英文
    十六進制值:<0x7a682d48616e733a323532>。ASCll:zh-Hant:252 默認為簡體中文
    十六進制值:<0x7a682d48616e743a32>。ASCll:zh-Hant:2 默認為繁體中文(英文字幕要小寫)

-Block

禁用一些nvram變量,我們這裡按默認設置不必理會。

–LegacyEnable

主機板不支持原生NVRAM,選擇YES。

LegacySchema

這裡是nvram的變量設置,大部分默認已經填好,我們只需添加兩個變量即可。

打開7C436110-AB2A-4BBB-A880-FE41995C9F82這一欄,添加兩個item如下:

  1. item 11 String efi-boot-device
  2. item 12 String efi-boot-device-data

PlatformInfo

這裡我們填合適的機型。對於最近一代的主板來說,一般的原則,只有核顯的機器我們選Macmini8,1;只有獨顯的機器我們選擇iMac Pro 1,1;有核顯和獨顯的我們選擇iMac 19,1。

-Automatic

這裡意思是是否自動填寫系統信息。基於 Generic 部分生成 PlatformInfo,而不是DataHub、 NVRAM 和SMBIOS部分)。OpenCore 提供了大量方法來注入PlatformInfo,,這裡只要認真填幾個選項就行了,這裡我選 YES,不重要的信息讓它自動填。

–DataHub

之前已經開啟了自動填寫功能,可以直接整個把datahub刪除了。

–Generic&PlatformNVRAM&SMBIOS

Generic::(通用)

  • SpoofVendor:YES (仿冒製造商為Acidanthera來避免出現衝突)
  • SystemUUID:建議留空並讓OpenCore自動注入設備自帶UUID或填入設備自帶UUID以防出現Windows激活問題
  • MLB:用macserial讀取或生成
  • ROM:<>可以是任意6 Byte MAC地址,如0x112233000000
  • SystemProductName:用macserial讀取或生成
  • SystemSerialNumber:用macserial讀取或生成

開啟Clover的Clover Configurator,幫我們產生有關機型的相關數據:

  • 打開Clover configurator,並到SMBIOS選項卡中,選擇合適的機型,這裡我們以iMac19,1 為例:
  • 我們換到Rt variables裡,點擊ROM下的生成,獲得一個ROM編號,這樣我們就獲得了所有需要的信息了。
  • 我們整理一下剛才獲得的信息並依次填入,有點繁瑣。我們秉著知道的填,不知道的寧可留空的原則:

– UpdateDataHub

選擇YES

–UpdateNVRAM

選擇YES

–UpdateSMBIOS

選擇YES

–UpdateSMBIOSMode

選擇Create

2-8 UEFI

UEFI相關的補丁以及設置項。

–ConnectDrivers

是否加載所有UEFI補丁,這裡我們選YES

-Drivers

把我們之前放在OC/EFI/Drivers下面的驅動一一填上,這裡我們也注意一下填入的順序:

  1. Drivers
  2. item0 String ApfsDriverLoader.efi
  3. …………………… MemoryAllocation.efi
  4. …………………… FwRuntimeServices.efi
  5. …………………… EmuVariableRuntimeDxe.efi
  6. …………………… VBoxHfs.efi
  7. …………………… UsbKbDxe.efi

-Input

此選項是原生apple開機熱鍵的選項,需要配合我們之前設置的PollAppleHotKeys=yes以及UsbKbDxe.efi補丁一起用。下面的設置完全按照默認情況就行了。

有一點需要說,如果你是華碩的z87或者z97,你需要打開PointerSupport這個選項。

-Protocols

  • AppleBootPolicy:使用macOS 虛擬機的選項。我們選擇NO。
  • AppleEvent:使用macOS 虛擬機並具有vault的mac需要用的選項。我們選擇NO。
  • AppleImageConversion:重建apple圖像,選擇NO。
  • AppleKeyMap: 重建蘋果功能鍵,選擇NO。
  • AppleUserInterfaceTheme: 好像是支持第三方主題的選項。目前是沒有,選擇NO。
  • ConsoleControl: 主機控制界面,我們選擇YES。
  • DataHub:重建datahub,這裡我們選NO。
  • DeviceProperties:  確保在VM或舊Mac上完全兼容的選項。我們選NO。
  • FirmwareVolume: 修復了有關Filevault的UI,設置為YES可獲得更好的FileVault兼容性,我們選NO。
  • HashServices: 修復了運行FileVault時光標大小不正確的問題,設置為YES可以更好地兼容FileVault。我們選NO。
  • UnicodeCollat​​ion: 一些較舊的固件會破壞了Unicode 排序規則,開啟後可以修復這些系統上UEFI Shell 的兼容性(通常為用於IvyBridge 和更舊的設備)。我們選NO。

-Quirks

  • AvoidHighAlloc:主機板無法正確訪問UEFI Boot Services 中更高內存的解決方法。目前已經用了slide 這個參數,這裡選No吧。
  • ClearScreenOnModeSwitch:目前還不清楚這個是做啥的,選擇No。
  • ExitBootServicesDelay:這個選項是給舊款主機板所需要給予主板退出時間(單位為微秒),新款的主機板預設值填0。舊款的主機板例如Z87pro,填入 3000000-5000000
  • IgnoreInvalidFlexRatio:目前還不清楚這個是做啥的,選擇No。
  • IgnoreTextInGraphics::修復不用-v開機時日誌覆蓋蘋果標誌輸出的問題。這裏選 YES
  • ProvideConsoleGop:在選擇系統畫面前,你可能看到一些你config配置錯誤的信息,你可以根據這信息調整自己的配置,也可以選擇YES忽略,我選擇 YES
  • ReleaseUsbOwnership:從固件驅動程序中釋放USB 控制器所屬權的功能。這裏我們選擇NO。Clover 的等效設置是FixOwnership
  • ReplaceTabWithSpace:目前還不知道該功能,選擇 NO。
  • RequestBootVarRoutingOC_VENDOR_VARIABLE_GUID請求redirectBoot前綴變量。啟用此項以便能夠在設計上與macOS引導項不兼容的固件中可靠地使用启动磁盘設置。選擇YES。
  • SanitiseClearScreen::在高分辨屏中以1024×768顯示的問題。注意要同時開啟ConsoleControl並將ConsoleMode的內容留空。選擇YES。

2-9 最後測試

所有的數據大都完成填寫之後,你應該可以透過OC文件正確引導MAC OS了。但是還有很多問題需要去修補,例如如何模擬nvram,尋找EC控制器、原生的電源管理等等。待作者有再進一步說明後,或是有更好的參考文章,我會不定時修補教程。

3.0 模擬NVRAM

對OC而言,NVRAM是非常核心的一環,不管是原生還是模擬的。這裡主要內容替Z390 系列為生成模擬的NVRAM.plist的解決方法。最常見的與macos不兼容的本機nvram主機板大致如下:

  • B360
  • B365
  • H310
  • H370
  • Q370
  • Z390

首先打開我們之前下載好的opencore,進入目錄下的Utilities/LogoutHook資料夾,找到logouthook.command 程序。打開Terminal (終端機),輸入一下命令:

  1. sudo defaults write com.apple.loginwindow LogoutHook 空格,再把LogoutHook.command 文件直接拉到終端機,直接執行。
  2. 終端會提示要求你輸入密碼(密碼打進去不會顯示)
  3. 重啟後,你會在/EFI/下看到nvram.plist,代表已經成功模擬了。
  4. 值得一提就是,生成好的 nvram.plist 在開機的加載需要之前,請你在EFI/OC/Driver/ 資料夾,放入這個 EmuVariableRuntimeDxe.efi 文件來加載,請確保這個修正檔存在。

以上文章部分要上圖!敬請等候!

2 comments

    1. 首先我個人特別地感謝你關注我的文章。
      至於你所提出有關文章的問題,我在本文一開始就已經標注了。
      我相信所有熱衷於『黑蘋果』的專家或學者,因耗盡個人太多生命和時間,總是希望把自己的研究成果分享給世界任何一個角落,進而造福黑果粉絲。不是嗎?
      然而我寫的這一篇文章,目的也在此,我參考過許多個大黑蘋果網站的論壇、教學等文獻,取之各精髓,從對的事找出錯誤,錯的事情找出對的方法,不斷地在測試與研究,再重新在編譯這樣的文章。
      我從群組裡面得知成員反應錯誤的問題,試著去修正找出錯誤,進而提出好的解決方式,我相信這是加入黑蘋果的使用者,所期盼樂見到結果。
      前提是並非寫出有關黑蘋果教學的作者或是工程師,能夠『全面性』適用所有的硬體設備。因為黑蘋果是完全『客製化』的產品,只能透過每一位作者提出的解決方式,逐一解決安裝和後續的問題。我個人也是基於這個理念之下,把這個研究成果發佈在網路上,提供更多人參考或是引用,甚至我也期盼更多的黑蘋果高手,給我小弟更多意見和批判,我認為這樣的氛圍是好的。這不僅僅是能夠提升自我技術的本能,相對地我提出的見解也會影更多人關注不是嗎?
      最後,我仍要感謝這一群在世界各地黑蘋果高手,默默地為『黑蘋果』提出了許多解決的方式,也因為你們,透過你們免費提供地『基礎』,造就許多人類的福祉。

Comments are closed.