前言
從 OpenCore (V0.5.7)版本的說明內容當中,已得知做了許多的改變,並加入GUI 圖形化的介面,你可以使用原有文字型態的簡約方式,或是加入圖形化的主題,讓你的黑蘋果可以自行設計主題和icon,做出不一樣的引導主題。在Quicks 的細項當中,刪除了一些選項,卻新增 UEFI-Output 大項。相關說明,請移至第一章開始看起。
本教學會隨著版本的修正而新增或刪減章節。
簡介
OpenCore (簡稱OC) 是一款開放源代碼的較特特殊常規的一種引導程序,旨在攔截內核加載以插入高度高級的rootkit,其目的是創造一個更加嚴謹的模組化的輕量引導系統,透過通用和模塊化的系統來解決Clover帶來的限制和問題,進而替代Clover。儘管OpenCore主要是為Hackintosh系統所設計的,但它亦可適用於其他系統需要模擬EFI的任何情況。
請記住,OpenCore 雖然是新型的引導程序,目前仍處於測試階段。隨著越來越多的kexts開始放棄Clover,早日學習使用OC,會對你未來使用黑蘋果會有很大的助益。請仔細閱讀並時刻牢記你的硬體可能有不同的配置要求。如果你打算要開始使用OC引導的話,你得先做足好功課,多看一些相關OC引導的文章,再來自行製作OC引導。
最後,本教學指南僅是您使用OpenCore的起點,除非絕對必要,否則不建議初學者使用。對於那些開始,請參閱r / Hackintosh Vanilla Desktop Guide。那些有問題的人可以訪問r / Hackintosh subreddit和r / Hackintosh不和諧以獲得更多幫助。
OpenCore的優勢
- 平均而言,OpenCore系統的啟動速度比使用Clover的系統快,這是因為自動修補工作較少
- OpenCore通過提供對FileVault的更好支持來提供更好的整體安全性,無需禁用SIP甚至通過Vaulting進行安全啟動支持
- OpenCore通過
boot.efi
-按住Option
或ESC
在啟動時選擇啟動設備,Command+R
進入恢復或Command+Option+P+R
重置NVRAM 來支持啟動熱鍵。 - OpenCore的設計著眼於未來,並使用現代方法加載第三方內核擴展,而不會破壞Clover使用的系統完整性保護
- 通過讀取啟動磁盤設置的NVRAM變量,就可以像實際Mac一樣支持BootCamp切換和引導設備選擇。
- AptioMemoryFix的未來開發直接與OpenCore綁定,特別是通過FwRuntimeVariable.efi作為擴展將其吸收到OpenCore中。0.5.7 版將FwRuntimeServices”改稱為“ OpenRuntime”。
- 支持UEFI和傳統啟動模式。
- 掩碼修補程序意味著macOS更新幾乎沒有機會破壞AMD系統,而AMD OSX修補程序支持High Sierra,Mojave和Catalina的所有版本。所有未來的AMD OSX開發都與Opencore相關,因此對於10.15.2+,您將需要OpenCore
OpenCore技巧
- 內核擴展按配置文件中指定的順序加載,因此在加載擴展本身之前,必須先加載擴展的依賴項。例如,必須在WhateverGreen或VirtualSMC之前加載Lilu。
- ACPI修補程序和SSDT適用於所有操作系統。調整您的SSDT
If (_OSI ("Darwin")) {}
或將rEFind與OpenCore結合使用。 - 某些系統需要純UEFI模式才能啟動。(此設置通常被主板製造商稱為“ Windows 8.1 / 10 UEFI模式”。另請參見將UEFI ROM刷新到較舊的GPU上)
- 如果在BIOS中將NVMe設備設置為SATA設備,則會出現問題。
- OpenCore需要支持預鏈接內核的macOS版本,這意味著OS X 10.7 Lion或更高版本的任何安裝都受OS X 10.6 Snow Leopard的某些更高版本的支持。
備註:
ㄧ:以下是我個人推薦 OpenCore 相關的教學網站,本教學文章皆取自於自各大黑蘋果教學網站精髓,經個人多次測試沒問題之後,而寫出這一份適用Z390系列等比較新的主機板,重新再編譯而來。針對Z300型主機板過去曾說不支援NVRAM的部分,已經有解決方案。請參考這裡。
二:本教學以OpenCore 0.5.7 推出正式版之前,許多設定值相會不定時修改。由於測試版的 Config 程式碼太多雜亂無章,一旦設定完以後,仍無法使用的可能性,你得需要做比對。
Opencore Vanilla Desktop Guide
Getting Started With OpenCorer
OpenCore Configuration
精解OpenCore(黑果小兵)
AppleLife.ru in Russian
Hackintosh-Forum.de in German
InsanelyMac in English
Xjn’s Blog 中國 Xjn’s 部落格
Open Core 官方討論群
NSK 主題下載
OpenCore更新日誌
v0.5.7 OpenCore黑蘋果引導配置說明第三版-基於OpenCore-0.5.7-03-19編譯版。
- 將EFI / OC / Drivers文件夾中的“ FwRuntimeServices”改稱為“ OpenRuntime”。
- 將EFI / OC / Drivers文件夾中的“ AppleUsbKbDxe”改稱為“ OpenUsbKbDxe”。
- 將EFI / OC / Tools文件夾中的“ BootLiquor.efi”改稱為“ OpenCanopy.efi”。
- 0.5.7-03-14編譯版 用“ Windows”替換“ BOOTCAMP Windows”。
- 在工具中添加OpenCoreShell提供的OpenShell.efi 0.5.7-03-12編譯版 添加Booter-Quirks-ProtectUefiServices項,用於修復Z390在DevirtualiseMmio上的問題(03-12添加) 在啟動選項中增加了時間機器(TimeMachine)。
- 在引導中添加了早期預覽版本的支持。 修復NVMe驅動中的一些問題。 添加了DirectGopCacheMode選項,與顯卡的FB緩存相關。
- 添加KeyFiltering項,解決由於KB驅動不完善導致的問題。
- 在音頻部分添加工具和自定義選項。 添加了FwProtect工具,可以使用Shell配置完整的NVRAM文件。 添加了針對10.15.4+的調試支持 添加了針對10.15.4+的調試日誌。
BIOS設置
禁用:
- 快速啟動
- VT-d(如果將DisableIoMapper設置為YES,則可以啟用)
- CSM
- Thunderbolt
- Intel SGX
- Intel Platform Trust
- CFG鎖(MSR 0xE2寫保護)
- 如果無法在BIOS中關閉(甚至找不到),請考慮對其進行修補。有關更多信息,請參見固定CFG鎖。
- AMD CPU用戶無需擔心。
啟用:
- VT-x
- 4G以上解碼
- Hyper-Threading
- Execute Disable Bit
- EHCI/XHCI Hand-off
- 操作系統類型:Windows 8.1 / 10 UEFI模式
- 舊版RTC設備(與Z370 +相關)準備工作請下載下列軟體:
- Xcode (從app store下載)
- Apple 開發人員下載頁面
- OpenCore(下載官方版下載最新的release版本)
- OpenCore (下載最新的BETA-release版本)
- ProperTree 編輯的.plist軟件
- OpenCore Configurator OpenCore 適配器
- MacASL aml編輯軟件
- Hackintool
- AppleSupportPkg (官方版)
- AppleSupportPkg (下載最新的BETA-release版本)
- AptioFixPkg
創建USB
ㄧ、創建USB很簡單。您所需要做的就是選擇格式:Mac OS 擴充格式(日誌式),架構為GUID分區圖配置表,名稱為OpenCore EFI、EFI皆可。
二、當你安裝macOS 映像檔時,該USB自然就會產生ESP分區,該分區會自動分割為200MB的容量,大部分載這分區裡,我們是安裝CLOVER 引導程序,若沒有安裝CLOVER EFI,也可以直接安裝OC引導程序。
三、在教學EP-6教學影片中,教給大家採用且親自製作『多功能引導安裝救援碟』的方式,我另外把USB安裝碟再分割約1GB的容量,該分區格式化FAT-DOS 32BIT的格式,因為UEFI只認得該格式,所以我們要格式化為FAT-DOS 32BIT,由於OpenCore的整個EFI只小於5MB容量,再加上放置PE系統,來達到多引導功能的安裝救援碟。
以下的教學是以第三種方式來做示範。
基本文件夾結構
要設置OpenCore的文件夾結構,您需要從OpenCorePkg抓取那些文件,並構建您的EFI使其類似於以下內容:
ㄧ、 OPENCORE目錄和文件
- 請打開下載好的最新版OC(0.5.6)BEAT版,把Doc文件夾下面的SampleFull.plist 改名為 config.plist,並把此文件移動到EFI目錄裡面。
- 打開EFI—Kexts 資料夾,把主機板相關硬體的kexts 先放進去。
- 根據作者指示,放入KEXT有一定的順序排列。
現在,您會注意到,它和文件夾中附帶了一堆文件,我們不需要其中的大多數:Drivers
Tools
從驅動程序中刪除:
- AppleUsbKbDxe.efi 用於在拾取的OpenCore 運行DuetPkg遺留系統,
- NvmExpressDxe.efi 當固件未內置NVMe驅動程序時,用於Haswell及更早版本
- XhciDxe.efi 固件未內置XHCI驅動程序時,用於Sandy Bridge和更早的版本
- HiiDatabase.efi 用於修復GUI支持,例如Sandy Bridge和更早版本上的Shell.efi
從Tools 刪除程序檔:
BootKicker.efi
:用於在正版Mac上修復Apple Picker
。
- CleanNvram.efi 我們將使用OpenCore的內置功能
- GopStop.efi 用於測試的GOP
- HdaCodecDump.efi 用於查找AudioDxe設置的信息,本指南未涵蓋,因此不需要
- VerifyMsrE2.efi 用於驗證MSR鎖,對於安裝,我們可以忽略
現在,你可以把你從AppleSupportPkg必要的固件驅動程序(.efi)插入驅動程序文件夾和kext文件/ ACPI到各自的文件夾中。請注意,OpenCore不支持Clover的UEFI驅動程序!(EmuVariableUEFI,AptioMemoryFix,OsxAptioFixDrv等)。請參閱Clover固件驅動程序轉換,以獲取有關支持的驅動程序以及已合併到OpenCore中的驅動程序的更多信息。
Firmware Drivers
- 這些是OpenCore使用的驅動程序,對於大多數係統來說,只需要3個.efi驅動程序即可啟動並運行:OpenCore可以使用的驅動程序包括。這裡請注意,根據作者指示,放入efi 有一定的順序排列,不可以排錯,否則OC無法運行。
- ApfsDriverLoader.efi APFS文件系統引導驅動程序在UEFI固件的可啟動APFS容器中添加了對嵌入式APFS驅動程序的支持。
- FwRuntimeServices.efi 協議通過支持只讀,只寫NVRAM變量,提升了的OpenCore和黎路的安全性有些怪癖如
RequestBootVarRouting
。此依賴程序驅動
由於運行時驅動餓性質(與目標操作系統並行運行),因此它不能在的OpenCore本身實現,而是與OpenCore捆綁在一起。 - VBoxHfs.efi HFS格式支持。
For legacy users::
- AppleUsbKbDxe.efi 用於在拾取的OpenCore 運行DuetPkg遺留系統,不建議甚至是有害的UEFI(Ivy Bridge的更新版本)
- NvmExpressDxe.efi 當韌體中未內置NVMe驅動程序時,用於Haswell及更早版本,如果您不使用NVMe驅動器,則不需要
- XhciDxe.efi 當固件中未內置XHCI驅動程序時,用於Sandy Bridge及更早版本,如果不使用USB 3.0擴展卡則不需要。
- HfsPlusLegacy.efi HfsPlus的舊版變體,用於缺少RDRAND指令支持的系統。通常在SandyBridge和更舊的版本上看到
- MemoryAllocation.efi 這個程序可以幫助z390系列,空出第一個512MB內存。當你在開啟內顯時,不會因為BIOS分配內存不一時,既使使用了slide 參數,也會卡在++++++ 或是slide 這裏,無法進入系統。
有關兼容驅動程序的完整列表,請參見OpenCorePkg Docs中的11.2屬性。這些文件將放在EFI的Drivers文件夾中。
Kexts:
一個KEXT是ķernel 分機 ension,你可以認為這是MacOS的驅動程序,這些文件將進入kext文件文件夾中EFI。你可以在Kext Repo中預編譯以下列出的所有kext 。每次有新提交時,都會編譯此處的Kext。
Must haves:
- VirtualSMC 模擬在實際macs上找到的SMC芯片,如果沒有此macOS,它將無法啟動。
替代方法是FakeSMC,它可以具有更好或更壞的支持,而該支持通常在舊硬件上使用。 - Lilu 一個修補程序,用於修補許多過程,這些過程對於AppleALC和WhateverGreen是必需的,對於VirtualSMC是推薦的。
VirtualSMC插件:
- SMCProcessor.kext –用於監視CPU溫度,不適用於基於AMD CPU的系統
- SMCSuperIO.kext 用於監視風扇速度,不適用於基於AMD CPU的系統
SMCLightSensor.kext 用於筆記本電腦上的環境光傳感器,台式機可以忽略,
如果您沒有環境光傳感器,請勿使用,否則可能導致問題。- SMCBatteryManager.kext 用於測量筆記本電腦上的電池讀數,台式機可以忽略。除非已為電池充好電,否則請勿使用,否則可能導致問題。
Graphics:
- WhateverGreen 用於圖形補丁DRM,boardID,幀緩衝區修復等,所有GPU都將從此kext中受益。
AUDIO:
- AppleALC 用於AppleHDA修補,用於為您提供板載音頻。AMD 15h / 16h可能與此有關,而Ryzen / Threadripper系統很少支持麥克風。
Ethernet:
- IntelMausi.kext 對於Intel NIC,基於I211-AT的晶片組將需要SmallTreeIntel82576 kext
- SmallTreeIntel82576.kext I211-AT NIC必需,基於SmallTree kext,但已打補丁以支持I211-AT。大多數運行Intel NIC的AMD板必需。
- AtherosE2200Ethernet Atheros和Killer NIC需要。
- RealtekRTL8111 Realtek NIC必需
USB:
- USBInjectAll 用於注入Intel USB控制器的H370,B360,H310和X79 / X99 / X299系統也可能需要不受XHCI支持的系統。USBInjectAll在基於AMD CPU的系統上不起作用。
WiFi and Bluetooth:
- AirportBrcmFixup 用於修補非Apple Broadcom卡,不適用於Intel,Killer,Realtek等。
- BrcmPatchRAM 用於在Broadcom藍牙芯片組上上傳固件,這是所有非Apple Airport卡所必需的。與BrcmFirmwareData.kext配對。適用於10.14+的BrcmPatchRAM3(必須與BrcmBluetoothInjector配對)。適用於10.11-10.14的BrcmPatchRAM2。適用於10.10或更舊版本的BrcmPatchRAM。
順序應為:Kernel -> Add
Brcm藍牙注射器
1.
2.Brcm 韌體數據
3.BrcmPatchRAM3
AMD CPU Specific kexts:
NullCPUPowerManagment感謝的OpenCore 0.5.5,目前更好的解決方案。找到DummyPowerManagement
Kernel -> Quirks
- XLNCUSBFIX
USB修復AMD FX系統,對Ryzen無影響 - VoodooHDA
FX系統的音頻和Ryzen系統的前面板Mic + Audio支持,請勿與AppleALC混用。音頻質量明顯比Zen CPU上的AppleALC差
額外的程序:
- AppleMCEReporterDisabler 從Catalina開始有用以禁用AppleMCEReporter kext,這將導致AMD CPU和雙插槽系統上的內核崩潰。受影響的SMBIOS:MacPro6,1、MacPro7,1、iMacPro1,1
- VoodooTSCSync 在沒有此macOS的情況下,需要在某些英特爾的HEDT和服務器主板上同步TSC,這可能會非常慢甚至無法啟動。Skylake-X應該改用TSCAdjustReset
- TSCAdjustReset 在Skylake-X上,包括華碩和EVGA在內的許多固件都不會將TSC寫入所有內核。因此,我們需要在冷啟動和喚醒時重置TSC。編譯版本可以在這裡找到:TSCAdjustReset.kext。請注意,您必須打開kext(finder中的ShowPackageContents ),並將Info.plist->更改為您從中開始的CPU線程數(i9 7980xe 18核將是因為它共有36個線程)
Contents -> Info.plist
IOKitPersonalities -> IOPropertyMatch -> IOCPUNumber
0
35
- NVMeFix 用於在非Apple NVMe上修復電源管理和初始化,需要macOS 10.14或更高版本
備註:備註:從2019 年9 月以後, Acidanthera 開發的內核驅動(Lilu, AppleALC 等等) 不再會在Clover 上做兼容性測試。
- 新增主題的文件:NDK 相關制定和製作方法,請到這裡。
根據CPU架構的不同,在ACPI所需要的SSDT.aml修護檔也會不同,請依以下的說明來編譯所需要SSDT.efi
Ivy Bridge:
Haswell:
Skylake:
Kabylake:
Coffeelake:
Haswell-E:
Broadwell-E:
Skylake-X:
AMD:
把下載好的文件放入該處的資料夾中,整個 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.plist
Xcode並打開。
從上圖有看到五個警告標語,分別為:
- 這只是一個示例。不要嘗試加載它。
- 在啟動之前,請確保您了解每個字段。
- 在大多數情況下,建議使用Sample.plist。
- 將SampleFull.plist用於壽命終止模型:2011年或更早。
- https://docs.google.com/spreadsheets/d/1kGFz3_kp5xCDRRQpfnIUOvbiHXTmxEgyx97u73ImXXE/edit#gid=0
這五個標語是沒有任何意義,請直接刪除即可,但我們要留意的是以下選單:
- ACPI:用於加載,阻止和修補ACPI。
- DeviceProperties:在此處設置PCI設備補丁,例如Intel Framebuffer補丁。
- Kermel:我們在哪裡告訴OpenCore要加載哪些kext,要加載的順序以及要阻止的kext。
- Mise:OpenCore引導加載程序本身的設置。
- NVRAM:在這裡設置引導標誌和SIP之類的NVRAM屬性。
- Platforminfo:這是我們設置您的SMBIOS的地方。
- UEFI:告訴OpenCore加載哪些驅動程序以及加載順序。
1.ACPI
ACPI 選項包括了四個部分:Add, Block, Patch, Quirks。首先我們先把 root下面的五條WARNING警語 刪除,該訊息是沒有實際意義。
在這裡,您將為系統添加SSDT修補程序,這些修補程序對筆記本電腦和OEM台式機最有用,但對於USBMap,禁用不受支持的GPU等也很常見。
對於我們來說,我們需要幾個SSDT來恢復Clover提供的功能:
- SSDT-PLUG
- 允許進行本機CPU電源管理,Clover替代項將在下
Acpi -> GenerateOptions -> PluginType
。請注意,此SSDT是針對AppleACPICPU
連接了附件的系統製作的CPU0
,儘管某些ACPI表的開頭是PR00
這樣,所以請相應地進行調整。在IORegistryExplorer中查看首先連接了哪個設備的AppleACPICPU 也會給您提示。
- 允許進行本機CPU電源管理,Clover替代項將在下
- SSDT-EC-USBX
- 糾正所有Catalina用戶所需的EC設備。要進行設置,您需要
PNP0C09
在DSDT中找出設備的名稱EC0
,即H_EC
,PGEC
和ECDV
。您可以在此處閱讀有關Catalina中嵌入式控制器問題的更多信息:macOS Catalina中的新增功能
- 糾正所有Catalina用戶所需的EC設備。要進行設置,您需要
- SSDT-AWAC
- 這是300系列RTC補丁程序,對於大多數B360,B365,H310,H370,Z390和某些Z370闆卡來說都是必需的,它們會阻止系統引導macOS。如果AWAC SSDT因遺漏舊版RTC時鐘而不兼容,則替代方法是SSDT-RTC0,以檢查自己需要搜索的內容
AWAC
,如果顯示出來,則STAS
在DSDT中搜索。如果STAS
搜索沒有任何結果,則需要RTC0補丁
- 這是300系列RTC補丁程序,對於大多數B360,B365,H310,H370,Z390和某些Z370闆卡來說都是必需的,它們會阻止系統引導macOS。如果AWAC SSDT因遺漏舊版RTC時鐘而不兼容,則替代方法是SSDT-RTC0,以檢查自己需要搜索的內容
- SSDT-PMC
- 因此,真正的300系列主機板(非Z370)不會在ACPI中將FW芯片聲明為MMIO,因此XNU會忽略UEFI記憶體訪問所聲明的MMIO區域。該SSDT帶回了NVRAM支持,並且可以按原樣進行編譯,使用該補丁。SSDT-PMC.aml
對於那些不了解有關插件類型和EC 的SSDT 的人,可以使用CorpNewt的SSDTTime正確設置您的SSDT。其餘的SSDT可以使用MaciASL進行編譯,別忘了編譯後的SSDT具有.aml附檔名(已彙編),並將進入EFI / OC / ACPI文件夾。您可以通過運行File-> SaveAs-> ACPI Machine Language使用MaciASL進行編譯。有關包括Windows和Linux在內的ACPI的更深入的了解,請參閱ACPI入門頁面。
- MaciASL – >另存為,確保文件格式是ACPI機器語言的二進制
System DSDT
- 請注意,所有ACPI補丁程序都將應用於DSDT
- SSDTTime可以在Linux和Windows解壓
- 請注意,如果通過OpenCore引導,ACPI補丁將應用於DSDT
- 三葉草啟動菜單中的F4
- DSDT可以在
EFI/CLOVER/ACPI/origin
- DSDT可以在
acpidump.efi
- 將此添加到並在您的配置下,然後在Opencore的選擇器中選擇此選項。將DSDT.dat重命名為DSDT.aml。工具提供的
EFI/OC/Tools
Misc -> Tools
acpica
- 將此添加到並在您的配置下,然後在Opencore的選擇器中選擇此選項。將DSDT.dat重命名為DSDT.aml。工具提供的
1-1.ACPI-Add
這個單元主要填寫我們使用常常使用的SSDT以及DSDT文件,如果沒有的話,請把0-8項默認的ssdt選項全部給刪除掉。假設你有修改的SSDT或者DSDT文件能力,請先將文件放入EFI/OC/ACPI下。
範例:
1-2.ACPI–Block
對應Clover-ACPI-Drop Tables,除非你明白確切意義,暫時不填寫。
1-3.ACPI–Patch
這裡我們需要填寫一下熱補丁。10.15中,把EC控制器 (EC0) 改名為 EC 來確保能進入Cataline 作業系統。假設你還不知道你的控制器叫什麼名字,請將下面熱補丁都填上:
注意:某些主機板的 EC 控制器名字可能會叫 H_EC 等,請自行提取 DSDT並蒐索PNP0C09,來獲取EC控制器的名字。
遇到 RTC問題 而無法進入系統,同樣地也需要嘗試添加hotpatch補丁來解決:
1-4.ACPI-Quirks
該項目共有有五項,選擇Yes or No ,大致解釋如下:
Quirks | Value | 解釋 |
FadtEnableReset | NO | 在舊版硬件上啟用重新引導和關閉功能,除非需要否則不建議這樣做 |
NormalizeHeaders | NO | 清理ACPI標頭字段,僅與macOS High Sierra 10.13相關(Z390選Yes) |
RebaseRegions | NO | 嘗試試探性地重定位ACPI內存區域,除非使用了自定義DSDT,否則不需要。 |
ResetHwSig | NO | 休眠相關項:在重新啟動後,無法維持硬體簽名,並導致從休眠中喚醒的問題的硬體設備。(桌機不需要設定) |
ResetLogoStatus | NO | 無法在具有BGRT表的系統上繪製OEM Windows徽標的解決方法。 |
2.Booter
這個項目跟 Fwruntimeservice.efi 有相當大關係。在aptiomemoryfix 停止更新後,此修正檔已經正式更名為 OpenRuntime.efi,並將一些功能與OC合併、模塊化。對於使用Z390等無法原生NVRAM的主機板的用戶來說,這裡的選項請你務必要格外注意一下唷。
2-1.Booter-MmioWhitelist:
此部分允許設備直接傳遞到通常被忽略的macOS,大多數用戶可以忽略此部分。
2-2.Booter-Quirks
- AvoidRuntimeDefrag:
此選項可修復UEFI運行時服務(日期,時間,NVRAM,電源控制等)。不支援NVRAM的主機板,必須啟動該功能,我選擇 YES。 - DevirtualiseMmio:
由於Z390主機板採用KASLR方式防駭機制,記憶體注入方式,包括使用 KASLR方式 (分佈式映射到各個記憶體位址當中)以及連續性方式。PCIE 加載到記憶體,有可能會佔據所有 avaliable 值而導致 OC 的內核以及內核緩存無法注入,導致啟動失敗。故減少記憶體失竊的情況,擴展值的選項,通常並在boot args中添加slide=N
。如何找出 slide值(請參考這裡)。所以這個選項我們選擇Yes。 - DisableSingleUser:
是否開啟單用戶模式(-s)。一般不勾選,黑蘋果無需使用,這裡選擇NO。 - DisableVariableWrite:
這是一個安全選項,允許在macOS中限制NVRAM訪問。這種Quick的要求OC_FIRMWARE_RUNTIME
實現的協議 OpenRuntime.efi,對一些非原生NVRAM主板需要模擬nvram.plist,進而寫入variable值。因此我們要禁止此項來防止其他程序對nvram進行寫入,我們這裡選YES。
注意:如果你的主機板若是支持原生nvram ,請選擇NO!已加入SSDT-PMC.aml者請選擇No。 - DiscardHibernateMap:
重用原始的休眠記憶體訪問,僅某些舊版硬件需要,這裏選擇NO - EnableSafeModeSlide:
此Quick的必要性取決於安全模式的可用性。如果啟動到安全模式失敗,則可以嘗試啟用此選項。此選項與在啟動到安全模式時遇到問題的用戶有關(例如,通過按住shift或使用-x boot參數)。默認情況下,安全模式強制滑動0,就好像系統是使用slide = 0 引導參數啟動的。此 Quick 嘗試修補boot.efi 以解除該限制,並使用其他值(從1到256)。需搭配ProvideCustomSlide
一起啟用此Quick。像z390這樣本來也不用分佈式註入內存方式的(KASLR),我就選擇YES。 - EnableWriteUnprotector:
此選項通過在執行期間從CR0寄存器中刪除寫保護(WP)位來繞過UEFI運行時服務的代碼頁中的RˆX權限。這個 Quick 需要OC_FIRMWARE_RUNTIME
在中實現的協議FwRuntimeServices.efi
。所以 nvram 能正常寫入而不受到UEFI內的一些服務的影響,任何主機板必須要選擇 YES。 - ForceExitBootServices:
確保ExitBootServices調用即使MemoryMap發生了更改也成功,除非有必要,否則請勿使用) 正常情況下選 NO。 - ProtectCsmRegion:
由於需要修復工件和睡眠喚醒問題,EasureRuntimeDefrag已經解決了此問題,因此除非有必要,否則請避免這種選項,我選擇NO。 - ProtectSecureBoot:保護UEFI安全引導變量寫入參數時不被干擾而引起衝突。選擇Yes。
- ProtectUefiServices:
這是保護UEFI Service 不被韌體給覆蓋的功能。包括硬體和虛擬機(例如VMware)在內的某些現代韌體可能會在驅動程序加載和相關操作期間更新指向UEFI Service 。這會直接破壞了影響內存管理的其他Quirks,例如DevirtualiseMmio,ProtectCsmRegion或ShrinkMemoryMap,並且還可能破壞其他Quirks,具體取決於這些Quirks。當選擇 Yes 時,在boot-args 的參數 slide=x and UEFI /Drivers/MemoryAllocation.efi 二者刪除,選擇No時,二者得保留。 - ProvideCustomSlide:
當在記憶體不足時,提供自定義的KASLR slide,此選項強制 macOS 在可用的當中使用偽隨機值。這也確保了slide=
出於安全原因,永遠不會將參數傳遞給操作系統。我選擇 Yes。
Only N/255 slide values are usable! - SetupVirtualMap:
該Quick的必要性由早期啟動故障確定,通過執行分配的虛擬記憶體到物理記憶體的早期啟動身份映射來解決此問題。因此,我們通過虛擬記憶體來建立連續性記憶體來提供OC使用,並同時映射到分散的物理記憶體當中。所以這個選項我們選擇 YES。 - ShrinkMemoryMap:
某些韌體具有非常大的記憶體訪問,不適合Apple內核,最多允許運行64GB記憶體的插槽。該Quirk嘗試統一相似類型的連續插槽,以防止引導失敗。以目前新款的主機板的規範性來看,大都是符合蘋果的所要求的,所以我們並不需要啟動它,選擇NO。 - SignalAppleOS(新增):
這裡是專門討論與FwRuntimeServices進行boot.efi修補有關的Quirks,它是AptioMemoryFix.efi的替代品。
3.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,大部分的主機板也是可以用的唷!
- 假設你測試所有的ID都無效時,請確保你的操作過程正確的,並測試用萬能音效卡補丁來替換AppleALC這個修正檔。如果再不行的話,你可能需要自行編譯音效卡修正檔。請記住,某些主機板具有不同的設備位置,您可以通過檢查IOReg中的設備樹或使用gfxutil來找到您的主機板。請注意,用於HDAS / HDEF的ADR為0x001F0003,並且路徑= PciRoot(0x0)/ Pci(0x1f,0x3),PciRoot(0x0)/ Pci(0x1b,0x0)通常適用於haswell和更早版本。您可以使用以下命令找到音頻路徑(請注意,並非所有音頻控制器都稱為HDEF,有時也稱為HDAS,AZAL,HDAU等):path/to/gfxutil -f HDEF
- 確實注意到這是一個值,這意味著你將需要轉換從到這樣會被解讀為和會
layout-idDataNumberHEXLayout=5<05000000>Layout=11<0B000000>
- 有趣的事實:交換字節順序的原因是由於Endianness所致,尤其是現代CPU用於排序字節的Little Endian。
- ->
Layout-id
- 應用AppleALC音頻注入,您需要對主板具有的編解碼器進行自己的研究,並將其與AppleALC的佈局相匹配。AppleALC支持的編解碼器。
- 請記住,某些主板具有不同的設備位置,您可以通過檢查IOReg中的設備樹或使用gfxutil來找到您的主板。請注意,用於HDAS / HDEF的ADR為0x001F0003,並且路徑= PciRoot(0x0)/ Pci(0x1f,0x3),PciRoot(0x0)/ Pci(0x1b,0x0)通常適用於Haswell和更早版本。您可以使用以下命令找到音頻路徑(請注意,並非所有音頻控制器都稱為HDEF,有時也稱為HDAS,AZAL,HDAU等):
path/to/gfxutil -f HDEF
請注意,這layout-id
是一個Data
值,意味著您需要從轉換為Number
,HEX
因此Layout=5
將被解釋為<05000000>
和Layout=11
將是<0B000000>
。可以保留音頻以進行後期安裝。
CPU 內顯設定
此部分是通過Headkaze的《英特爾幀緩衝修補指南》設置的,僅應用一個實際屬性開始,即ig-platform-id。我們為此獲得適當值的方法是查看我們打算使用的ig-platform-id,轉換為十六進制。
假設我們的交換版本將如下所示0xAABBCCDDDDCCBBAA
我們使用的兩個ig-platform-id如下:
0x3E9B0007
-當iGPU用於驅動顯示器時使用07009B3E
十六進制交換時
0x3E920003
-當iGPU僅用於計算任務且不驅動顯示器時使用0300923E
十六進制交換時
值得注意的是,對於10.12-> 10.13.5,您需要在Kaby Lake指南中將iGPU偽造為相同的值,因為這是在原生Coffee Lake iGPU出現之前。
我們還添加了另外兩個屬性,framebuffer-patch-enable和framebuffer-stolenmem。第一個通過WhateverGreen.kext啟用修補程序,第二個將最小失竊內存設置為19MB。這通常是不必要的,因為可以在BIOS中進行配置。
我還添加了另一部分,該部分顯示了i3-8100的UHD 630 的偽造品。例如,它與8700k上的UHD 630具有不同的設備ID,例如(vs )。device-id3e9180863e928086
為此,我們遵循與上述ig-platform-id十六進制交換類似的過程,不過這裡我們僅處理前兩對十六進制字節。如果我們將設備ID視為 0xAABB0000,則交換版本看起來像 0xBBAA0000。最後兩對十六進制字節不做任何事情。
device-id 偽造ID:0x3e920000
-這是在8700k上找到的UHD 630的設備ID923e0000
十六進制交換時
注意:FakeID僅對於High Sierra是必需的,Mojave 則不需要。
打開 PciRoot(0x0)/Pci(0x2,0x0) 選項,此項為驅動CPU內顯。如何驅動CPU內顯,可能因情況分為以下三種:
1.只有核心顯卡的DP顯示器用戶。(HDMI驅動部分目前仍在研究當中)
2.沒有核心顯卡的用戶。此指使用i5-9400F 這樣的用戶。
3.使用 iGPU+DGU 作為主力的使用者。注意,本教學只討論8代和9代CPU的機器,至於其他CPU機型者,請其他在論壇或者黑果小兵博客中搜索相關代碼。
對於在B360,B365,H310,H370,Z390上顯示詳細信息後出現黑屏問題的用戶,請參閱BusID iGPU修補頁面。
只有內顯的且只有DP顯示器用戶
8代和9代的內顯 ID 分別為:3E9b0007,device ID為3e9b0000,但是我們需要符合一定的順序格式填入進去。前者為內顯ID,後者應為廠商代號。填寫數據大致如下!
CPU無內顯的用戶
使用無內顯的CPU,不需要填入此項,可以直接把 AAPL,ig-platform-id 刪除。
使用iGPU+DGPU,同時用獨顯做主力的使用者
一般這種情況我們一般把CPU顯卡當作加速使用,而輸出方面則用獨立顯卡。這就是我們說的『無頭模式』,使用FCPX時非常好用,同時也開啟HEVC的功能。在這裏,我們只要填一個能夠作為加速用的核顯 ID 即可了:
AAPL,ig-platform-id data <0300983e>
3-2.DeviceProperties-Block
是禁用一些設備的,我們按默認就行了,不需要任何修改。
4.Kernel
這裡是內核相關選項。
4-1.Kernel–Add
這個項目裡是要填寫kexts的相關資料。值得注意的是OC的kexts填寫必須注意順序,比如applealc的依賴是lilu,那麼lilu必須填在第一個;SMCProcessor.kext依賴於Virtualsmc.kext。那virtualsmc必須放在SMCProcessor.kext之前。
OC文件默認常用的KEXT文件已經被加載裡面了,我們只需要在加入一些沒加載的KEXT就可以了。特別要留意的是enabled那個區塊,我們要用手動的方式改成yes去開啟它,同時把一些不用給刪除了:
- BundlePath:kext的名字:
Lilu.kext
- Comment:該kext的註釋。
- Enabled:Yes/No。啟動此補丁,反之則為關閉
- Executableath:隱藏在kext中的實際可執行文件的路徑,該 kext 透過滑鼠右鍵顯示內容,查找該 kext 運行文件的絕對路徑 。有些文件夾下有kexts hiddin 。請注意,僅Plist kexts不需要填寫。
Show Package ContentsContents/MacOS/KextPlugin
。eg:Contents/MacOS/Lilu - MaxKernel: 此補丁支持的最大系統版本,填19為10.15,18位10.14;我們一般情況下留空。
- MinKernel:此補丁支持的最小系統版本
- PlistPath:隱藏在kext中的路徑
info.plist
。 eg:Contents/Info.plist - 仿真:欺騙不受支持的CPU(如奔騰和賽揚)時需要
- CpuidMask:設置為零時,將使用原始CPU位
<Clover_FCPUID_Extended_to_4_bytes_Swapped_Bytes> | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
例如:CPUID0x0306A9
為A9 06 03 00 | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
- CpuidData:CPU欺騙的值
FF FF FF FF | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
交換00
的FF
,如果需要,以交換具有較長值
4-2.Kernel–Block
阻止kexts加載。有時需要禁用某些筆記本電腦的Apple觸控板驅動程序。
4-3.Kernel–Emulate
此選項幫助 Ivy Bridge 和一些不受支持的CPU加載電源管理的,所有選項按默認即可。
4-4.Kernel–Patch
修補內核和kexts、USB解除限制補丁(在此處添加AMD CPU修補程序)。雖然OC已有修補的程序,但在某些狀況,仍得加入該補丁參數比較好。
4-5.Kernel–Quirks
這裡是內核相關的快捷選項,非常重要,請大家務必要詳看以下教學說明。
- AppleCpuPmCfgLock:NO
僅當無法在BIOS中禁用CFG-Lock時才需要,Clover對應的對像是AppleIntelCPUPM。請確認您可以禁用CFG-Lock,大多數係統無法使用它啟動,因此需要使用此Quirk。至於如何解鎖 CFG,請參考這一篇。如果你尚未解鎖,你就選擇YES,解鎖的情況下選擇NO。注意,CFG的解鎖之後,對主機的性能會更提升一些。 - AppleXcpmCfgLock::NO
僅當無法在BIOS中禁用CFG-Lock時才需要,Clover對應的對像是KernelPM。如果你尚未解鎖,你就選擇YES,解鎖的情況下選擇NO。注意,CFG的解鎖之後,對主機的性能會更提升一些。 - AppleXcpmExtraMsrs::NO
禁用奔騰和某些Xeon等不受支持的CPU所需的多個MSR訪問。針對在沒有原生電源管理的CPU上啟用。一般是Haswell-E, Broadwell-E, Skylake-X 這三種CPU需要填寫 YES。 - AppleXcpmForceBoost:NO
- CustomSMBIOSGuid:NO
對UpdateSMBIOSMode自定義模式執行GUID修補。通常與戴爾筆記本電腦有關。 - DisableIoMapper::NO
如果無法在BIOS中禁用或需要其他操作系統,則需要避開VT-D,dart=0
因為SIP可以留在Catalina中,因此是更好的替代選擇 - DummyPowerManagement:用不到,選擇No。
- ExternalDiskIcons::NO
這是AHCI控制器相關的選項。目前的主機板都對AHCI非常的支持,這裏選擇NO就可以了。對於Z87及以下版本的NVMe,您只需通過DeviceProperties添加內置屬性。 - IncreasePciBarSize:
- LapicKernelPanic:NO
在AP核心lapic中斷時禁用內核恐慌。HP筆記本的內核崩潰選項,我們選擇NO。 - PanicNoKextDump::No
允許在發生內核緊急情況時讀取內核緊急情況日誌,目前我選擇NO。 - PowerTimeoutKernelPanic:
- ThirdPartyTrim:No
開啟Sata類SSD的trim選項功能。這裡是針對sata接頭的固態SSD,我個人使用M.2,所以選擇NO。自行根據情況選擇。 - XhciPortLimit:No
這是解除USB 15個端口限制。如果你尚未編譯USB 3.0定制ssdt-uiac.aml的話,請你選擇YES。
5.Misc
這裡都是一些開機引導類的設置。
5-1.Misc–BlessOverride
這個選項是幫助我們尋找一些不尋常的EFI位置的,除非你有這種情況,不然我們不需要填寫任何東西。
5-2.Misc–Boot
- HibernateMode::檢測休眠模式。黑蘋果一般都不支持休眠喚醒,選none。如果你的主板支持原生nvram、並想測試休眠,可以考慮填auto。
- HideAuxiliary(新增):Yes。該項目顯示在選擇磁碟界面裡。
- HideSelf(新增):如果要在OC Bootloader上隱藏EFI分區,請選擇 Yes。
- PickerAttributes:0
內建選擇器支持根據UEFI規範將顏色參數作為前景色和背景色之和。黑色背景和黑色前景,(0)的值默認值。以下是顏色參數表,可以自行更換看看字型的顏色。
names:
• 0x00 — EFI_BLACK
• 0x01 — EFI_BLUE
• 0x02 — EFI_GREEN
• 0x03 — EFI_CYAN
• 0x04 — EFI_RED
• 0x05 — EFI_MAGENTA
• 0x06 — EFI_BROWN
• 0x07 — EFI_LIGHTGRAY
• 0x08 — EFI_DARKGRAY
• 0x09 — EFI_LIGHTBLUE
• 0x0A — EFI_LIGHTGREEN • 0x0B — EFI_LIGHTCYAN
• 0x0C — EFI_LIGHTRED
• 0x0D — EFI_LIGHTMAGENTA • 0x0E — EFI_YELLOW
• 0x0F — EFI_WHITE
• 0x00 — EFI_BACKGROUND_BLACK
• 0x10 — EFI_BACKGROUND_BLUE
• 0x20 — EFI_BACKGROUND_GREEN
• 0x30 — EFI_BACKGROUND_CYAN
• 0x40 — EFI_BACKGROUND_RED
• 0x50 — EFI_BACKGROUND_MAGENTA • 0x60 — EFI_BACKGROUND_BROWN
• 0x70 — EFI_BACKGROUND_LIGHTGRAY
Note: This option may not work well with System text renderer. Setting a background different from black could help testing proper GOP functioning - PickerAudioAssist:
對於macOS引導加載程序,屏幕閱讀器首選項在preferences.efires存檔中的preferences.efires檔案中設置,並由操作系統控制。對於OpenCore屏幕閱讀器支持,此選項是一個獨立的等效項。也可以通過Command + F5組合鍵在OpenCore引導選擇器和macOS引導加載程序FileVault 2登錄窗口中切換屏幕閱讀器支持。 - PickerMode(新增):啟動界面選擇(這是為將來引入UI做準備的項目)
Builtin模式:使用簡單的純文本用戶界面,默認為Builtin
External模式:如果透過外部模式主題引導時則啟用,否則使用純文字界面來展現。
Apple模式:若是蘋果引導時則啟用,否則應使用純文字界面。 - PollAppleHotKeys:允許您在引導過程中使用Apple的熱鍵,具體取決於您可能需要使用OpenUsbKbDxe.efi 而不是OpenCore內置支持的韌體。請注意,如果您可以在OC的選擇器中選擇任何內容,則禁用此選項會有所幫助。常用命令:
Cmd+V
:啟用詳細Cmd+Opt+P+R
:清理NVRAMCmd+R
:引導恢復分區Cmd+S
:以單用戶模式引導Option/Alt
:設置為時顯示啟動選擇器,替代為關鍵ShowPickerNOESC
- ShowPicker::是否顯示開機啟動盤選項。例如 MAC、WINDOWS等等。我們選擇YES。
- TakeoffDelay:0
- Timeout:倒數計時器功能。默認為5秒,亦可修改該數值。
5-3.Misc–Debug
開啟debug模式選項。是(在啟動時OpenCore停滯在某些東西上時很有用,也可以幫助解決macOS的早期啟動問題)。我們暫時不需要做任何設定。
5-4.Misc–Entries
這個選項,是幫助你添加一些你希望的引導路徑。這裡暫時略過。
5-5.Misc-Security
- AllowNvramReset:允許在啟動選擇器中和按下時重置NVRAM
Cmd+Opt+P+R
,我們選YES。 - AllowSetDefault:允許CTRL + Enter和CTRL + Index 處理來設置啟動碟的默認啟動選項,Yes。
- AuthRestart:啟用與VirtualSMC兼容的身份驗證重新啟動。 經過身份驗證的重啟是一種無需輸入密碼即可重啟啟用FileVault 2的macOS的方法。要執行經過身份驗證的重新啟動,可以使用專用的終端命令:sudo fdesetup authrestart。在安裝操作系統更新時也使用它。VirtualSMC通過將磁盤加密密鑰拆分保存在NVRAM和RTC中來執行經過身份驗證的重啟,儘管OpenCore啟動後立即將其刪除,但可以將其視為安全隱患,因此是可選的。這裡我不啟用。
- ExposeSensitiveData:這是要模擬nvram的選項,這個數值我們必須填 3。原生nvram填 2。
- HaltLevel:按默認設置即可。
- RequireSignature:黑蘋果的 vault 加密方式,我不需要這個功能,選擇NO
- ScanPolicy:顯示所有安裝系統硬碟的選項。原默認值暫時不用修改。若是要安裝全新系統時,可以填入『0』。如何開機的時候默認進入的系統永遠是Mac 系統碟,且屏蔽其他的系統碟,或是保留winOS 系統碟的開機選單。製作OC引導之安裝碟方法,如下:
掃描策略(以位為單位) - ScanPolicy值,使用十六進制計算器添加值,macOS caluclator應用程序已使用⌘+ 3內置此值)。將您的值加起來,並將此十六進制值添加到ScanPolicy中,這將需要轉換為十進制值,一旦粘貼它,Xcode會自動為您轉換。掃描策略(以位為單位) ScanPolicy值,使用十六進制計算器添加值,macOS caluclator應用程序已使用⌘+ 3內置此值)。將您的值加起來,並將此十六進制值添加到ScanPolicy中,這將需要轉換為十進制值,一旦粘貼它,Xcode會自動為您轉換。
- Vault:設定為O
主機各項周邊配置表
- 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
目前新手可以先用預設值,有關如何計算的方法,請參考這裡。
5-6.Misc-Tools:
用於運行啟動時間工具,例如清除NVRAM,EFIShell或memtest86。
Tools Used for running OC debugging tools like clearing NVRAM
- Name
- OpenCore中顯示的名稱
- Enabled
- 自說明,啟用或禁用
- Path
- 文件夾後的文件路徑
Tools
- ex: Shell.efi
- 文件夾後的文件路徑
6.NVRAM
6-1.NVRAM–Add
- 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14(Booter Path,多數人可以忽略)
UIScale:- 01:標準分辨率(三葉草等效為)
0x28
- 02:HiDPI(通常需要FileVault在較小的顯示器上正常運行,等效於Clover )
0x2A
,默認值為 01。 - DefaultBackgroundColor(新增):<00000000>
- 01:標準分辨率(三葉草等效為)
- 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 加載並允許寫入受保護的文件系統路徑
– SIP 完全關閉。官方認定。
E703000067000000
– 不建議使用。但我發現要開啟Hidpi 時,需要用這個參數值。 - 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 默認為繁體中文(英文字幕要小寫)
6-2.NVRAM-Block
4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14
強制重寫NVRAM變量,請注意Add
不會覆蓋NVRAM中已經存在的值,因此boot-args
應保留類似的值。
新增:Item:-DefaultBackgroundColor
6-3.NVRAM-LegacyEnable
用於分配NVRAM變量,將LegacyEnable設置為YES,這是針對不支援NVRAM的主板所需要的功能選項。經過測試非原生nvram主板(主要是300系列主板)使用SSDT-PMC 以後,就可以當原生nvram主板使用,不勾选此項。
6-4.NVRAM-LegacyOverwrite
允許覆蓋nvram.plist中的韌體變量,只有沒有本機NVRAM的系統才需要。這裡選NO。
6-5.NVRAM-LegacySchema
這裡是nvram的變量設置,大部分默認已經填好,我們只需添加兩個變量即可。打開7C436110-AB2A-4BBB-A880-FE41995C9F82這一欄,添加兩個item如下:
item 11 String efi-boot-device
item 12 String efi-boot-device-data
6-6.NVRAM-WriteFlash
允許為所有添加的變量寫入閃存。建議大多數韌體啟用此值,但墮於具有以下功能的韌體,則可以對其進行配置,可能與NVRAM變量存儲垃圾回收等有關。要從macOS讀取NVRAM,方法是將變量GUID和名稱分隔開,同過符號。例如nvram 7C436110-AB2A-4BBB-A880-FE41995C9F82″boot-args。
7.PlatformInfo
這裡我們填合適的機型。對於最近一代的主板來說,一般的原則,只有核顯的主機,我們選Macmini8,1;只有獨顯的機器我們選擇iMac Pro 1,1,有內顯和獨顯的主機,我們選擇iMac 19,1。
7-1.PlatformInfo-Automatic
這裡意思是是否自動填寫系統信息。基於 Generic 部分生成 PlatfrmInfo,而不是DataHub、 NVRAM 和SMBIOS部分)。OpenCore 提供了大量方法來注入PlatformInfo,啟用此選項後DataHub
,,NVRAM
和SMBIOS
的數據不會再被使用。
7-2.PlatformInfo-Generic
為了設置SMBIOS信息,我們將使用CorpNewt的GenSMBIOS應用程序。
在這個Coffee Lake的示例中,我選擇了iMac18,1 SMBIOS-出於兼容性的考慮,故意這樣做。Coffee Lake有兩種主要的SMBIOS:
iMac18,1
-用於使用iGPU進行顯示的計算機。iMac18,3
-僅用於使用dGPU進行顯示而使用iGPU進行計算任務的計算機。- 注意:儘管iMac19,1和iMac19,2更接近,但這些SMBIOS與比Mojave早的macOS版本不兼容,並且並非所有修復程序都與它們兼容(即:USBInjectAll)
GenSMBIOS將為我們提供類似於以下內容的輸出:
#######################################################
# iMac18,1 SMBIOS Info #
#######################################################
Type: iMac18,1
Serial: C02XG0FDH7JY
Board Serial: C02839303QXH69FJA
SmUUID: DBB364D6-44B2-4A02-B922-AB4396F16DA8
上面所述為機型之參數,是根據你主機原本所設定的SMBIOS值,所產生出來的。
該Type
零件將復製到通用-> SystemProductName。
該Serial
零件將復製到通用-> SystemSerialNumber。
該Board Serial
零件將復製到通用-> MLB。
該SmUUID
零件將復製到通用-> SystemUUID。
我們將Generic-> ROM設置為Apple ROM(從真實Mac轉儲),您的NIC MAC地址或任何隨機MAC地址(可以是6個隨機字節,對於本指南,我們將使用11223300 0000
)
提醒您需要有效的序列號,但未使用的序列號,您想獲得一條消息,例如:“未驗證購買日期”。以下為表格中各列的說明。
Generic
- AdviseWindows:
- MLB:用macserial讀取或生成
- ROM:
<>
可以是任意6 Byte MAC地址,如0x112233000000
- SpoofVendor:
YES
(仿冒製造商為Acidanthera來避免出現衝突) - SystemUUID:建議留空並讓OpenCore自動注入設備自帶UUID或填入設備自帶UUID以防出現Windows激活問題
- SystemProductName:用macserial讀取或生成
- SystemSerialNumber:用macserial讀取或生成如何獲取該值,請參考這裡。
UpdateDataHub:選擇YES。更新數據中心分段。根據Automatic
的值,這些細分會從Generic
或DataHub
中讀取。
UpdateNVRAM:選擇YES。是否更新NVRAM中關於樣本信息的相關類別。根據Automatic
的值,這些細分會從Generic
或PlatformNVRAM
中讀取。所有其他細分都將在NVRAM
部分中指定。如果替換值設置為false
,則可以使用nvram
部分更新上述變量;反之若替換值設置為true
,而同時nvram
部分存在任何分裂,會產生意料之外的行為。
UpdateSMBIOS:選擇YES。更新SMBIOS字段。
UpdateSMBIOSMode:選擇Create。用新分配的EfiReservedMemoryType替換錶,在需要CustomSMBIOSGuid怪癖的Dell筆記本電腦上使用Custom。
8.UEFI
UEFI相關的補丁以及設置項。
8-1 AUDIO
音效設定:說明:指定音頻控制器上用於音頻支持的編解碼器地址。 通常,它包含內置模擬音頻控制器(HDEF)上的第一個音頻編解碼器地址。
- AudioCodec:
音頻編解碼器地址,例如2,可以在調試日誌中找到(以粗體顯示):
OCAU: 1/3 PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)/VenMsg(<redacted>,00000000) (4 outputs) OCAU: 2/3 PciRoot(0x0)/Pci(0x3,0x0)/VenMsg(<redacted>,00000000) (1 outputs)
OCAU: 3/3 PciRoot(0x0)/Pci(0x1B,0x0)/VenMsg(<redacted>,02000000) (7 outputs)
或者,可以從I / O註冊表中的IOHDACodecDevice類獲取此值,該類包含在IOHDACodecAddress字段中。 - AudioDevice:用於音頻支持的指定音頻控制器的設備路徑。 通常,它包含內置的模擬音頻控制器(HDEF)設備路徑,例如PciRoot(0x0)/ Pci(0x1b,0x0)。可以在調試日誌中找到已識別的音頻控制器的列表(以粗體顯示)
OCAU: 1/3 PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)/VenMsg(<redacted>,00000000) (4 outputs) OCAU: 2/3 PciRoot(0x0)/Pci(0x3,0x0)/VenMsg(<redacted>,00000000) (1 outputs)
OCAU: 3/3 PciRoot(0x0)/Pci(0x1B,0x0)/VenMsg(<redacted>,02000000) (7 outputs)
作為替代方案,可以在macOS中使用gfxutil -f HDEF命令。指定空的設備路徑將導致使用第一個可用的音頻控制器。 - AudioOut:指定編解碼器輸出端口的索引,從0開始。 通常,它包含內置模擬音頻控制器(HDEF)中綠色的索引。調試日誌中的輸出節點數(N)(以粗體顯示)
OCAU: 1/3 PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)/VenMsg(<redacted>,00000000) (4 outputs) OCAU: 2/3 PciRoot(0x0)/Pci(0x3,0x0)/VenMsg(<redacted>,00000000) (1 outputs)
OCAU: 3/3 PciRoot(0x0)/Pci(0x1B,0x0)/VenMsg(<redacted>,02000000) (7 outputs)
找到正確端口的最快方法是將值從0暴力破解到N-1。 - AudioSuppor:通過連接到後端驅動程序來激活音頻支持。 啟用此設置會將音頻播放從內置協議路由到位於音頻控制器(AudioDevice)上的指定編解碼器(AudioCodec)的專用音頻端口(AudioOut)。
- MinimumVolume:最小音量從0到100。 49 當計算出的音量級別小於MinimumVolume時,屏幕閱讀器將使用此音量級別。如果計算出的音量小於MinimumVolume,則不會發出開機提示音。
- PlayChime:在啟動時播放提示音。 啟用此設置可通過內置音頻支持播放啟動鈴聲。音量級別由MinimumVolume和VolumeAmplifier設置以及SystemAudioVolume NVRAM變量確定。 注意:此設置與StartupMute NVRAM變量分開,以避免在固件能夠播放啟動鈴聲時發生衝突。
- VolumeAmplifier:系統體積到原始體積線性轉換的乘數範圍是0到1000。 從SystemAudioVolume讀取的音量級別範圍取決於編解碼器。要將[0,127]範圍內的讀取值轉換為原始音量範圍[0,100],則將讀取值縮放為VolumeAmplifier百分比:
RawV olume = MIN((SystemAudioV olume x V olumeAmplifier)/100,100)
注意:macOS中使用的轉換不是線性的,但是非常接近,因此細微差別被忽略了。
ConnectDrivers:Yes
8-2 UEFI-ConnectDrivers:
強制.efi驅動程序,更改為NO將自動連接添加的UEFI驅動程序。默認Yes。這樣可以使啟動速度稍快一些,但並非所有驅動程序都可以自行連接。例如,某些文件系統驅動程序可能無法加載。
8-3.UEFI-Drives
把我們之前放在OC/EFI/Drivers下面的驅動一一填上,這裡我們也注意一下填入的順序。
8-3.UEFI-Input:
與用於FileVault和Hotkey支持的boot.efi鍵盤傳遞有關。此選項是原生apple開機熱鍵的選項,需要配合我們之前設置的PollAppleHotKeys=yes以及UsbKbDxe.efi補丁一起用。下面的設置完全按照默認情況就行了。
- KeyFiltering:NO
- KeyForgetThreshold:
5
。按住某個鍵時,每個鍵輸入之間的延遲,為獲得最佳效果,請使用毫秒5
- KeyMergeThreshold:
2
。重置之前將註冊密鑰的最長時間,為獲得最佳效果,請使用毫秒2
- KeySupport:
NO
。啟用OpenCore的內置密鑰支持,並且是選擇啟動選擇器所必需的,請勿與AppleUsbKbDxe.efi一起使用 - KeySupportMode:
Auto
。將內部鍵盤輸入轉換設置為AppleKeyMapAggregator協議模式。Auto(自動)-進行自動選擇,並具有以下首選項:
V1-使用UEFI標準傳統輸入協議EFI_SIMPLE_TEXT_INPUT_PROTOCOL。
V2-使用UEFI標準的現代輸入協議EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL。
AMI-使用APTIO輸入協議AMI_EFIKEYCODE_PROTOCOL。 - KeySwap:提交期間交換Command和Option鍵。 對於在Command鍵右側具有Option鍵的鍵盤佈局,此選項可能很有用。
- PointerSupport:啟用內部指針驅動程序。 此選項通過選擇OEM協議實現標準UEFI指針協議(EFI_SIMPLE_POINTER_PROTOCOL)。該選項在EFI_SIMPLE_POINTER_PROTOCOL損壞的Z87華碩主板上可能有用。
- PointerSupportMode:指定OEM協議,當前僅支持Z87和Z97 ASUS板,因此留空。
- TimerResolution:
50000
。設置架構計時器分辨率,華碩主板用於該接口60000
,有一點需要說,如果你是華碩的z87或者z97,你需要打開PointerSupport這個選項。
8-4.UEFI-Output
- ClearScreenOnModeSwitch:NO,從圖形模式切換成文字模式時,某些韌體僅清除螢幕的一部分,先前繪製的圖像片段可見,此選項會以黑色屏蔽整個畫面在切換到文字模式。此選項僅適用系統渲染器。
- ConsoleMode:填入Max或是留空。
- DirectGopCacheMode:內置圖形輸出協議幀緩衝區的緩存模式。 調整緩存模式可能會在某些韌體上提供更好的渲染性能。提供空字符串會將緩存控制設置留給韌體。這裡選No。
- DirectGopRendering:默認No,若是勾選可能對顯示效果比較好
- IgnoreTextInGraphics:Yes。修復不用
-v
開機時日誌覆蓋蘋果標誌輸出的問題。 - ProvideConsoleGop:Yes。在選擇系統畫面前,你可能看到一些你config配置錯誤的信息,你可以根據這信息調整自己的配置,也可以選擇YES忽略。
- ReconnectOnResChange:No。有些韌體在GOP 分辨率改變後,要求重新連接控制器才能輸出文本, 開啟這個選項會導致從UEFI Shell 中,啟動OpenCore 時直接黑屏,盡量避免開啟。
- ReplaceTabWithSpace:Yes。根據硬體的不同,某些系統在無法處理Tabs時可能需要此文件來正確編輯UEFI Shell中的文件。而是將其交換為空格,但是大多數人可以忽略它,但是請注意,可能需要將ConsoleControl設置為True。
- Resolution: 開機分辨率選項。設置為WxH @ Bpp(例如1920×1080 @ 32)或WxH(例如1920×1080)格式的字符串,以從GOP請求自定義分辨率(如果有)。
設置為空字符串不更改屏幕分辨率。
•設置為最大以嘗試使用最大的可用屏幕分辨率。 在HiDPI屏幕上,可能需要將APPLE_VENDOR_VARIABLE_GUID UIScale NVRAM變量設置為02,才能在內置文本渲染器,FileVault 2 UEFI密碼界面和啟動屏幕徽標中啟用HiDPI縮放。有關更多詳細信息,請參閱“推薦變量”部分。 注意:如果控制台句柄沒有GOP協議,這將失敗。當韌體不提供韌體時,可以將ProvideConsoleGop設置為true進行添加。我的顯示器是1080P 16:9的畫面,我就填寫1920×1080。這個部分請你根據目前情況來填寫或者不填。如果遇到開機蘋果LOGO很大,你需要按你的分辨率填寫。
BuiltinGraphics — 若切換到圖形模式同時使用內建渲染器和自定義ConsoleControlu一起使用。選擇此項必需要勾選 ProvideConsoleGop,並將 Resolution 設置為Max
SystemGraphics — 轉換到圖形模式並使用帶有自定義ConsoleControlu一起使用。
SystemText — 轉換到文字模式並使用帶有自定義ConsoleControlu一起使用。
SystemGeneric — 假設引導程序讓系統運行正常時,則必須使用系統ConsoleControlu一起使用。 - SanitiseClearScreen:Yes。在高分辨屏中以1024×768顯示的問題。注意要同時開啟
ConsoleControl
並將ConsoleMode
的內容留空。 - TextRenderer:一般選SystemGraphics或SystemText。代替原ConsoleControl`和`BuiltinTextRenderer。
8-5.UEFI-Protocols
- AppleAudio:蘋果內建音效。
- AppleBootPolicy:No
重新安裝Apple SMC I / O,這是VirtualSMC.efi的等效項,只有使用FileVault的用戶才需要。 - AppleDebugLog:
- AppleEvent:No
使用macOS 虛擬機並具有vault的mac需要用的選項。 - AppleImageConversion:
重建apple圖像,選擇NO。 - AppleKeyMap:重建蘋果功能鍵,選擇NO。
- AppleSmcIo:Yes。
- AppleUserInterfaceTheme: 好像是支持第三方主題的選項。目前是沒有,選擇NO。
- DataHub:No
重建datahub協議。 - DeviceProperties:No
確保在VM或舊Mac上完全兼容的選項。我們選NO。 - FirmwareVolume:No
修復了有關Filevault的UI,設置為YES可實現更好的FileVault兼容性。 - HashServices::NO。
修復了運行FileVault時光標大小不正確的問題,設置為YES
可以更好地兼容FileVault。 - OSInfo:No
- UnicodeCollation::No
一些較舊的固件會破壞了Unicode 排序規則,開啟後可以修復這些系統上UEFI Shell 的兼容性(通常為用於IvyBridge 和更舊的設備)。
8-6.UEFI-Quirks
- ExitBootServicesDelay:0
這個選項是給舊款主機板所需要給予退出時間(單位為微秒),新款的主機板預設值填0。舊款的主機板例如Z87pro,填入 3000000-5000000 - IgnoreInvalidFlexRatio:No
修復了無法在BIOS中禁用MSR_FLEX_RATIO(0x194)的情況,這對於所有基於Skylake的系統都是必需的。CFG也必須要設定該值。 - ReleaseUsbOwnership:No
從硬體驅動程序中釋放USB控制器,這在硬體不支持EHCI / XHCI切換時需要。三葉草同等為FixOwnership
- RequestBootVarFallback:No
請求回退某些Boot前綴變量從OC_VENDOR_VARIABLE_GUID
到EFI_GLOBAL_VARIABLE_GUID
。用於修復引導選項。 - RequestBootVarRouting:Yes
將AptioMemeoryFix從重定向EFI_GLOBAL_VARIABLE_GUID
到OC\_VENDOR\_VARIABLE\_GUID
。硬體嘗試刪除引導條目時需要,建議在所有系統上啟用該韌體,以進行正確的更新安裝,啟動硬碟控制面板功能等。 - UnblockFsConnect:No
惠普筆記本在OpenCore 引導界面沒有引導項時設置為YES
。
最後測試
所有的數據大都完成填寫之後,你應該可以透過OC文件正確引導MAC OS了。
模擬NVRAM
對OC而言,NVRAM是非常核心的一環,不管是原生還是模擬的。這裡主要內容替Z390 系列為生成模擬的NVRAM.plist的解決方法。最常見的與macos不兼容的本機nvram主機板大致如下:
- B360
- B365
- H310
- H370
- Q370
- Z390
- 首先打開我們之前下載好的opencore,進入目錄下的Utilities/LogoutHook資料夾,找到logouthook.command 程序。打開Terminal (終端機),輸入一下命令:
sudo defaults write com.apple.loginwindow LogoutHook 空格,再把LogoutHook.command 文件直接拉到終端機,直接執行。 - 終端會提示要求你輸入密碼(密碼打進去不會顯示)
- 重啟後,你會在/EFI/下看到nvram.plist,代表已經成功模擬了。
- 值得一提就是,生成好的 nvram.plist 在開機的加載需要之前,請你在EFI/OC/Driver/ 資料夾,放入這個 EmuVariableRuntimeDxe.efi 文件來加載,請確保這個修正檔存在。
有關Z300主機板不支援NVRAM的部分,目前已經有解決的方案,請參考這裡的說明。