OpenCore Vanilla Desktop Guide
OpenCore Vanilla Desktop Guide
Table of Contents
2 of 436
OpenCore Vanilla Desktop guide
About
OpenCore is an open-source, unconventional, first-in-class piece of software designed to intercept kernel loading to insert a highly
advanced rootkit, designed to be an alternative to Clover. OpenCore aims to resolve the constraints and issues imposed by Clover
by providing a more versatile and modular system which can better understand symbols and structures to make patching far more
precise and effective. And with its custom prelinker, kext injection becomes macOS version agnostic meaning day 1 support on any
macOS version supporting a prelinked kernel. While OpenCore is primarily designed for Hackintosh systems, it can be used in any
scenario where an emulated EFI is needed with many using it on KVMs and even real Macs
Please remember that OpenCore is still new and currently in beta. While quite stable, and arguably much more stable than Clover
in pretty much every way, is still being frequently updated and so chunks of configuration change quite often(ie. New quirks
replacing old ones)
Lastly, this guide is only meant to be a starting point in your journey with OpenCore and not recommended for beginners unless
absolutely necessary. For those starting, please see the r/Hackintosh Vanilla Desktop Guide . And those who have issues can visit
both the r/Hackintosh subreddit and r/Hackintosh discord for more help.
This guide supports 0.5.7, newer versions will require you to read the Differences.pdf . Guide will be updated soon after each
OpenCore release
Advantages of OpenCore
On average, OpenCore systems boot faster than those using Clover as less unnecessary patching is done
Better overall stability as patches can be much more precise : macOS 10.15.4 update as an example
OpenCore offers better overall security with better support for FileVault, no need to disable System Integrity Protection
(SIP) and even secure boot-like functionality support via Vaulting
OpenCore supports boot hotkey support via boot.efi - hold Option or ESC at startup to choose a boot
device, Cmd+R to enter Recovery or Cmd+Opt+P+R to reset NVRAM.
OpenCore is designed with the future in mind and uses modern methods to load 3rd party kernel extensions without
breaking System Integrity Protection which Clover uses
BootCamp switching and boot device selection are supported by reading NVRAM variables set by Startup Disk just
like a real mac.
Future development for AptioMemoryFix is directly tied to OpenCore, specifically being absorbed into OpenCore itself
with the OpenRuntime.efi being used as an extension.
UEFI and Legacy boot modes are supported
More sophisticated patching such as mask patching means macOS updates have very little chance of breaking AMD
systems, with AMD OSX patches supporting all versions of High Sierra, Mojave and Catalina. All future AMD OSX
development is tied to Opencore, so for 10.15.2+ you'll need OpenCore
OpenCore Tips
Kernel extensions are loaded in the order specified in your config file, so you must load an extension's dependencies
before you load the extension itself. For example, Lilu must be loaded before WhateverGreen or VirtualSMC.
SMBIOS data, ACPI patches and DSDT/SSDTs are applied to all operating systems. Adjust your SSDTs with
If (_OSI ("Darwin")) {}
Note that all SSDTs mentioned in this guide have been updated accordingly and should not affect booting
Some systems require pure UEFI mode to boot. (This setting is commonly called "Windows 8.1/10 UEFI Mode" by
motherboard manufacturers. See also on flashing a UEFI ROM onto older GPUs )
Issues can occur if NVMe devices are set up as SATA devices in the BIOS.
OpenCore requires a version of macOS that supports a prelinked kernel, this means any installs of OS X 10.7 Lion or
newer are supported with some later versions of OS X 10.6 Snow Leopard also having support.
Those having issues converting can refer to the Clover Conversion page
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)
If this can't be turned off in the BIOS(or even found) please consider patching it out. See Fixing CFG Lock for
more info.
Enable:
VT-X
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Requirements:
OpenCorePkg , highly recommend running the debug version to show more info
AppleSupportPkg
ProperTree to edit .plist files (OpenCore Configurator is another tool but is heavily outdated and the Mackie version is
known for corruption. Please avoid these kinds of tools at all costs!).
Cleaned NVRAM(This is seriously important if you used Clover before, as many variables will remain causing
conflicts. Luckily with OC you can press CleanNvram in the boot picker when AllowNvramReset is enabled in
your config)
Basic knowledge of how a Hackintosh works and what files yours requires(ie: Type of network controller).
You must remove Clover from your system entirely if you wish to use it as your main boot-loader. Keep a backup of
your Clover based EFI. See here on what needs to be cleaned: Clover Conversion
Depending on which OS you're on, see your specific section on making the USB:
macOS users
Windows users
Linux users
macOS install
While you don't need a fresh install of macOS to use OpenCore, some users prefer having a fresh slate with their boot manager
upgrades.
If you want to use OpenCore on a system without UEFI, please follow the Legacy Install section first, after you can
continue following the Base folder structure section
To start we'll want to grab ourselves a copy of macOS, you can skip this and head to formatting the USB if you're just making a
bootable OpenCore stick and not an installer. For everyone else, you can either download macOS from the AppStore or with
GibMacOS
For those needing macOS versions no longer hosted on Apple's catalog(ie. Sierra and older), follow the Legacy macOS install guide
Downloading macOS
From this, we get a nice list of macOS installers. If you need beta versions of macOS, you can select C. Change Catalog . For
this example we'll choose 1:
This is going to take a while as we're downloading the entire 8GB+ macOS installer, so highly recommend reading the rest of the
guide while you wait.
It's gonna ask for the macOS installer files, at the moment they're in pieces in the macOS Downloads folder found in GibMacOS
Once it's done, you can find it with the rest of the files. I recommend moving it to your applications folder to make things a bit easier
with the next section.
Now we'll be formatting the USB to prep for both the macOS installer and OpenCore. We'll want to use macOS Extended(HFS+)
with a GUID partition map. What this will do is create 2 partitions. The main MyVolume and a second called EFI which is used
as a boot partition where your firmware will check for boot files.
Next run the createinstallmedia command provided by Apple , note that the command is made for USB's formatted with the
name MyVolume :
This will take some time so may want to grab a coffee or continue reading the guide(to be fair you really shouldn't be following this
guide step by step without reading the whole thing first)
You can also replace the createinstallmedia path with that of where your installer's located, same idea with the drive name.
Setting up OpenCore's EFI environment is simple, all you need to do is mount our EFI system partition. This is automatically made
when we format with GUID but is unmounted by default, this is where our friend mountEFI comes in:
MountEFI
You'll notice that once we open the EFI partition, it's empty. This is where the fun begins.
Now with all this done, head to Setting up the EFI to finish up your work
Windows install
While you don't need a fresh install of macOS to use OpenCore, some users prefer having a fresh slate with their boot manager
upgrades.
Downloading macOS
Now search through for your desired version of macOS, for this example we'll choose option 5 for macOS Catalina:
Next open makeinstall.bat as Admin and select your drive with option O for OpenCore( ex: 1O).
Once your drive is formatted, it will then ask you for the RecoveryHDMetaDMG.pkg that we downloaded earlier. Top right of the
file window will let you copy the file path:
makeinstall will finish up by installing OpenCore to your USB's EFI System Partition, you can find this partition labeled as BOOT :
Now with all this done, head to Setting up the EFI to finish up your work
Linux install
While you don't need a fresh install of macOS to use OpenCore, some users prefer having a fresh slate with their boot manager
upgrades.
Downloading macOS
python gibMacOS.command -r
Now search through for your desired version of macOS, for this example we'll choose option 5 for macOS Catalina:
This section will target making the necessary partitions in the USB device. You can use your favorite program be it gdisk
fdisk parted gparted or gnome-disks . This guide will focus on gdisk as it's nice and can change the partition type
later on, as we need it so that macOS Recovery HD can boot. (the distro used here is Ubuntu 18.04, other versions or distros may
work)
Credit to midi1996 for his work on the Internet Install Guide guide which this is based off of.
Method 1
In terminal:
2. send p to print your block's partitions (and verify it's the one needed)
3. send o to clear the partition table and make a new GPT one (if not empty)
1. confirm with y
4. send n
4. Hex code or GUID : 0700 for Microsoft basic data partition type
5. send w
Confirm with y
In some cases a reboot is needed, but rarely, if you want to be sure, reboot your computer. You can also try
re-plugging your USB key.
run this 7z e -txar *.pkg *.dmg; 7z e *.dmg */Base* to extract BaseSystem.dmg and
2.
BaseSystem.chunklist
mount your USB partition with udisksctl (
udisksctl mount -b /dev/<your USB partition block> , no sudo required in most cases) or with
3.
mount ( sudo mount /dev/<your USB partition block> /where/your/mount/stuff , sudo is
required)
4. cd to your usb driver and mkdir com.apple.recovery.boot in the root of your FAT32 USB partition
now cp or rsync both BaseSystem.dmg and BaseSystem.chunklist into
5.
com.apple.recovery.boot folder.
2. send p to print your block's partitions (and verify it's the one needed)
3. send o to clear the partition table and make a new GPT one (if not empty)
1. confirm with y
4. send n
4. Hex code or GUID: 0700 for Microsoft basic data partition type
5. send n
6. send w
Confirm with y
In some cases a reboot is needed, but rarely, if you want to be sure, reboot your computer. You can also try
re-plugging your USB key.
3. Use lsblk again to determine the 200MB drive and the other partition
run sudo mkfs.vfat -F 32 -n "OPENCORE" /dev/<your 200MB partition block> to format the
4.
200MB partition to FAT32, named OPENCORE
then cd to gibmacos-master/macOS\ Downloads/publicrelease/xxx-xxxxx - 10.x.x macOS xxx
5.
and you should get to a pkg file
for all distros: make sure you're using bash for 7zip to work.
run this 7z e -txar *.pkg *.dmg; 7z e *.dmg */Base* this will extract the recovery from the pkg
2. through extracting the recovery update package then extracting the recovery dmg then the hfs image from it
(BaseSystem.dmg).
3. download dmg2img (available on most distros)
4. run dmg2img -l BaseSystem.dmg and determine which partition has disk image property
run dmg2img -p <the partition number> -i BaseSystem -o <your 3GB+ partition block>
5.
to extract and write the recovery image to the partition disk
It will take some time. A LOT if you're using a slow USB (took me about less than 5 minutes with a fast USB2.
0 drive).
Now with all this done, head to Setting up the EFI to finish up your work
To setup OpenCore’s folder structure, you’ll want to grab the EFI folder found in OpenCorePkg's releases (this will already be done
on the BOOT USB drive for windows users):
Now something you'll notice is that it comes with a bunch of files in Drivers and Tools folder, we don't want most of these:
OpenUsbKbDxe.efi
Used for OpenCore picker on legacy systems running DuetPkg, not recommended and even harmful on
Ivy Bridge and newer
NvmExpressDxe.efi
Used for Haswell and older when no NVMe driver is built into the firmware
XhciDxe.efi
Used for Sandy Bridge and older when no XHCI driver is built into the firmware
HiiDatabase.efi
Used for fixing GUI support like OpenShell.efi on Sandy Bridge and older
OpenCanopy.efi
This is OpenCore's optional GUI, we'll be going over how to set this up in installer-guide so remove this for
now
Way to many to list them all, but I recommend keeping OpenShell.efi for troubleshooting purposes
A cleaned up EFI:
Clean EFI
Now you can place your necessary firmware drivers(.efi) from AppleSupportPkg into the Drivers folder and Kexts/ACPI into their
respective folders. Please note that UEFI drivers from Clover are not supported with OpenCore!(EmuVariableUEFI,
AptioMemoryFix, OsxAptioFixDrv, etc). Please see the Clover firmware driver conversion for more info on supported drivers and
those merged into OpenCore.
Here's what a populated EFI can look like (yours will be different):
Reminder:
Now head to Gathering Files to get the needed kexts and firmware drivers
Gathering files
Gathering files
This section is for gathering miscellaneous files for booting macOS, we do expect you to know your hardware well before starting
and hopefully made a Hackintosh before as we won't be deep diving in here.
See the supported hardware section for some better insight into what macOS requires to boot, hardware support between Clover
and OpenCore are quite similar.
Firmware Drivers
These are the drivers used by OpenCore, for the majority of systems you only need 3 .efi drivers to get up and running:
ApfsDriverLoader.efi
HfsPlus.efi
Needed for seeing HFS volumes(ie. macOS Installers and Recovery partitions/images). Do not mix other HFS
drivers
OpenRuntime.efi
Replacement for AptioMemoryFix.efi , used as an extension for OpenCore to help with patching boot.efi for
NVRAM fixes and better memory management.
OpenUsbKbDxe.efi
Used for OpenCore picker on legacy systems running DuetPkg, not recommended and even harmful on UEFI
(Ivy Bridge and newer)
NvmExpressDxe.efi
Used for Haswell and older when no NVMe driver is built into the firmware, not needed if you're not using an
NVMe drive
XhciDxe.efi
Used for Sandy Bridge and older when no XHCI driver is built into the firmware, not needed if you're not using a
USB 3.0 expansion card
HfsPlusLegacy.efi
Legacy variant of HfsPlus, used for systems that lack RDRAND instruction support. This is generally seen on
Sandy Bridge and older
For a full list of compatible drivers, see 11.2 Properties in the OpenCorePkg Docs . These files will go in your Drivers folder in your
EFI
Kexts
A kext is a kernel extension, you can think of this as a driver for macOS, these files will go into the Kexts folder in your EFI
All kext listed below can be found pre-compiled in the Kext Repo . Kexts here are compiled each time there's a new commit.
Must haves:
VirtualSMC
Emulates the SMC chip found on real macs, without this macOS will not boot
Alternative is FakeSMC which can have better or worse support, most commonly used on legacy hardware.
Lilu
A kext to patch many processes, required for AppleALC and WhateverGreen and recommended for VirtualSMC
VirtualSMC Plugins:
SMCProcessor.kext
Used for monitoring CPU temperature, doesn't work AMD CPU based systems
SMCSuperIO.kext
Used for monitoring fan speed, doesn't work AMD CPU based systems
SMCLightSensor.kext
Used for the ambient light sensor on laptops, desktops can ignore
Do not use if you don't have an ambient light sensor, can cause issues otherwise
SMCBatteryManager.kext
Graphics:
WhateverGreen
Used for graphics patching DRM, boardID, framebuffer fixes, etc, all GPUs benefit from this kext.
Note the SSDT-PNLF.dsl file included is only required for laptops and AIOs, see * Getting started with ACPI for
more info
Audio:
AppleALC
Used for AppleHDA patching, used for giving you onboard audio. AMD 15h/16h may have issues with this and
Ryzen/Threadripper systems rarely have mic support
Ethernet:
IntelMausiEthernet
Required for Intel NICs, chipsets that are based off of I211 will need the SmallTreeIntel82576 kext
SmallTreeIntel82576 kext
Required for I211 NICs, based off of the SmallTree kext but patched to support I211
Required for most AMD boards running Intel NICs
AtherosE2200Ethernet
RealtekRTL8111
LucyRTL8125Ethernet
USB:
USBInjectAll
Used for injecting Intel USB controllers on systems without defined USB ports in ACPI
Not needed on Skylake and newer(AsRock is dumb and does need this)
Does not work on AMD CPUs at all
XHCI-unsupported
H370
B360
H310
Z390(Not needed on Mojave and newer)
X79
X99
AsRock boards(On Intel motherboards specifically, basically all of their boards)
AirportBrcmFixup
Used for patching non-Apple Broadcom cards, will not work on intel, Killer, Realtek, etc
BrcmPatchRAM
Used for uploading firmware on Broadcom bluetooth chipset, required for all non-Apple/Fenvi Airport cards.
To be paired with BrcmFirmwareData.kext
1. BrcmBluetoothInjector
2. BrcmFirmwareData
3. BrcmPatchRAM3
NullCPUPowerManagment
We have a much better solution known as DummyPowerManagement found under Kernel -> Quirks in
your config.plist, this will be covered in a later page
XLNCUSBFIX
VoodooHDA
Audio for FX systems and front panel Mic+Audio support for Ryzen system, do not mix with AppleALC. Audio
Extra's:
AppleMCEReporterDisabler
Useful starting with Catalina to disable the AppleMCEReporter kext which will cause kernel panics on AMD CPUs
and dual-socket systems
Affected SMBIOS:
MacPro6,1
MacPro7,1
iMacPro1,1
VoodooTSCSync
Needed for syncing TSC on some of Intel's HEDT and server motherboards, without this macOS may be
extremely slow or even unbootable. Skylake-X should use TSCAdjustReset instead
TSCAdjustReset
On Skylake-X, many firmwares including Asus and EVGA won't write the TSC to all cores. So we'll need to reset
the TSC on cold boot and wake. Compiled version can be found here: TSCAdjustReset.kext . Note that you must
open up the kext(ShowPackageContents in finder, Contents -> Info.plist ) and change the Info.plist ->
IOKitPersonalities -> IOPropertyMatch -> IOCPUNumber to the number of CPU threads you have
starting from 0 (i9 7980xe 18 core would be 35 as it has 36 threads total)
NVMeFix
Used for fixing power management and initialization on non-Apple NVMe, requires macOS 10.14 or newer
Laptop Specifics:
VoodooPS2
VoodooI2C
Used for fixing I2C devices, found with some fancier touchpads and touchscreen machines
To be paired with a plugin:
To figure out what kind of keyboard and trackpad you have, check DeviceManager in Windows or dmesg |grep input in Linux
NoTouchID
Recommended for SMBIOS that include a TouchID sensor to fix auth issues
SSDTs
So you see all those SSDTs in the AcpiSamples folder and wonder whether you need any of them. For us, we will be going over
what SSDTs you need in your specific ACPI section of the config.plist, as the SSDTs you need are platform specific. With some
even system specific where they need to be configured and you can easily get lost if I give you a list of SSDTs to choose from now.
Getting started with ACPI has an extended section on SSDTs including compiling them on different platforms.
A quick TL;DR of needed SSDTs(This is source code, you will have to compile them into a .aml file):
Desktop
Haswell AMD(15/16
CoffeeLake CometLake
SSDT IvyBridge /Broadwell Skylake KabyLake /17h)
SSDT- SSDT-
AWAC N/A N/A N/A N/A AWAC AWAC N/A
SSDT- SSDT-
NVRAM
N/A N/A N/A N/A PMC PMC N/A
This section is dedicated to the process of both dumping and making ACPI tables. Due to the many different types of SSDT
possible, the guide has been spun out into it's own.
Intel Config.plist
Ivy Bridge
Ivy Bridge
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
Needed for proper CPU power management, you will need to run Pike's ssdtPRGen.sh script to
SSDT-PM generate this file. This will be run in post install .
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
SSDT-EC and recommended for other versions of macOS.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block
This blocks certain ACPI tabes from loading, for us we really care about this. Main reason is that Apple's XCPM does not support
IvyBridge all to well and can cause AppleIntelCPUPowerManagement panics on boot. To avoid this we make our own PM SSDT
and drop the old tables:
TableLength Number 0
TableLength Number 0
Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks: Settings relating to boot.efi patching and firmware fixes, one we need to change is RebuildAppleMemoryMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: YES
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: NO
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
This section is set up via WhateverGreen's Framebuffer Patching Guide and is used for fixing certain iGPU properties like
ig-platform-id . The way we get the proper value for this is to look at the framebuffer we intend to use, then swap the pairs of
hex bytes.
If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA
Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching
Applies AppleALC audio injection, you'll need to do your own research on which codec your motherboard has and
match it with AppleALC's layout. AppleALC Supported Codecs .
For us, we'll be using the boot-arg alcid=xxx instead to accomplish this. alcid will override all other layout-IDs present. More
info on this is covered in the Post-Install Page
Block: Removes device properties from the map, for us we can ignore this
Fun Fact: The reason the byte order is swapped is due to Endianness , specifically Little Endians that modern CPUs use for
ordering bytes. The more you know!
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons.
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
Used for disabling all other GPUs than the integrated Intel iGPU, useful for those wanting to run
-wegnoegpu newer versions of macOS where their dGPU isn't supported
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this Ivy Bridge example, we'll chose the iMac13,2 SMBIOS - this is done intentionally for compatibility's sake. There are two
main SMBIOS used for Ivy Bridge:
iMac13,1 - this is used for computers utilizing the iGPU for displaying.
iMac13,2 - this is used for computers using a dGPU for displaying, and an iGPU for computing tasks only.
Note: Mobile users should refer to the SMBIOS page on which to choose: Mobile SMBIOS
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMac13,2 SMBIOS Info #
3 #######################################################
4
5 Type: iMac13,2
6 Serial: C02KCYZLDNCW
7 Board Serial: C02309301QXF2FRJC
8 SmUUID: A154B586-874B-4E57-A1FF-9D6E503E4580
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: YES
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
DVMT Pre-Allocated(iGPU Memory): 32MB
Post-install
Haswell
Haswell
Both Haswell and Broadwell users can follow this Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Haswell 71 of 436
OpenCore Vanilla Desktop guide
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Haswell 72 of 436
OpenCore Vanilla Desktop guide
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
SSDT-PLUG Allows for native CPU power management on Haswell and newer
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
SSDT-EC and recommended for other versions of macOS.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Haswell 73 of 436
OpenCore Vanilla Desktop guide
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks: Settings relating to boot.efi patching and firmware fixes, one we need to change is RebuildAppleMemoryMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
Haswell 74 of 436
OpenCore Vanilla Desktop guide
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Haswell 75 of 436
OpenCore Vanilla Desktop guide
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
SetupVirtualMap: YES
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: NO
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
Haswell 76 of 436
OpenCore Vanilla Desktop guide
This section is set up via WhateverGreen's Framebuffer Patching Guide and is used for fixing certain iGPU properties like
ig-platform-id . The way we get the proper value for this is to look at the framebuffer we intend to use, then swap the pairs of
hex bytes.
If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA
0x0D220003 - this is used when the Desktop Haswell iGPU is used to drive a display
0x04120004 - this is used when the Desktop Haswell iGPU is only used for computing tasks and doesn't drive a
display
I added another portion as well that shows a device-id fake in case you have an HD 4400 which is unsupported in macOS.
0x04120000 - this is the device id for HD 4600 which does have support in macOS
Haswell 77 of 436
OpenCore Vanilla Desktop guide
(This is an example for a desktop HD 4400 without a dGPU and no BIOS options for iGPU memory)
(This is an example for a desktop Iris Pro 6200 and no BIOS options for iGPU memory)
Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching
Applies AppleALC audio injection, you'll need to do your own research on which codec your motherboard has and
match it with AppleALC's layout. AppleALC Supported Codecs .
For us, we'll be using the boot-arg alcid=xxx instead to accomplish this. alcid will override all other layout-IDs present. More
info on this is covered in the Post-Install Page
Fun Fact: The reason the byte order is swapped is due to Endianness , specifically Little Endians that modern CPUs use for
ordering bytes. The more you know!
Block: Removes device properties from the map, for us we can ignore this
Haswell 78 of 436
OpenCore Vanilla Desktop guide
Kernel
Kernel
Haswell 79 of 436
OpenCore Vanilla Desktop guide
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Haswell 80 of 436
OpenCore Vanilla Desktop guide
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons.
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
Haswell 81 of 436
OpenCore Vanilla Desktop guide
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Haswell 82 of 436
OpenCore Vanilla Desktop guide
Misc
Misc
HibernateMode: None
Haswell 83 of 436
OpenCore Vanilla Desktop guide
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Haswell 84 of 436
OpenCore Vanilla Desktop guide
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
Haswell 85 of 436
OpenCore Vanilla Desktop guide
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
Haswell 86 of 436
OpenCore Vanilla Desktop guide
NVRAM
NVRAM
UIScale:
Haswell 87 of 436
OpenCore Vanilla Desktop guide
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
Used for disabling all other GPUs than the integrated Intel iGPU, useful for those wanting to run
-wegnoegpu newer versions of macOS where their dGPU isn't supported
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
Haswell 88 of 436
OpenCore Vanilla Desktop guide
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Haswell 89 of 436
OpenCore Vanilla Desktop guide
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this Haswell example, we chose the iMac15,1 SMBIOS. The typical breakdown is as follows:
iMac14,1
iMac14,2
iMac15,1
Broadwell
iMac16,1
Haswell 90 of 436
OpenCore Vanilla Desktop guide
Note: Mobile users should refer to the SMBIOS page on which to choose: Mobile SMBIOS
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMac15,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMac15,1
6 Serial: C02M9SYJFY10
7 Board Serial: C02408101J9G2Y7A8
8 SmUUID: 7B227BEC-660D-405F-8E60-411B3E4EF055
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
Haswell 91 of 436
OpenCore Vanilla Desktop guide
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
Haswell 92 of 436
OpenCore Vanilla Desktop guide
UEFI
UEFI
ConnectDrivers: YES
Haswell 93 of 436
OpenCore Vanilla Desktop guide
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
Haswell 94 of 436
OpenCore Vanilla Desktop guide
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Haswell 95 of 436
OpenCore Vanilla Desktop guide
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Haswell 96 of 436
OpenCore Vanilla Desktop guide
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: YES
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Haswell 97 of 436
OpenCore Vanilla Desktop guide
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
DVMT Pre-Allocated(iGPU Memory): 64MB
Post-install
Haswell 98 of 436
OpenCore Vanilla Desktop guide
Skylake
Skylake
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Skylake 99 of 436
OpenCore Vanilla Desktop guide
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
SSDT-PLUG Allows for native CPU power management on Haswell and newer
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
and recommended for other versions of macOS. This SSDT also has a second function, USBX.
SSDT-EC-USBX
This is used for forcing USB power properties, requires SSDT-EC so this just jumbles them
together.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are RebuildAppleMemoryMap ,
SyncRuntimePermissions and SetupVirtualMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: NO
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer. Some firmware like
Gigabyte may still require it, and will kernel panic without this
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: YES
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
This section is set up via WhateverGreen's Framebuffer Patching Guide and is used for fixing certain iGPU properties like
ig-platform-id . The way we get the proper value for this is to look at the framebuffer we intend to use, then swap the pairs of
hex bytes.
If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA
0x19120000 - this is used when the Desktop iGPU is used to drive a display
0x19120001 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display
(This is an example for a desktop HD 530 without a dGPU and no BIOS options for iGPU memory)
Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching
Applies AppleALC audio injection, you'll need to do your own research on which codec your motherboard has and
match it with AppleALC's layout. AppleALC Supported Codecs .
For us, we'll be using the boot-arg alcid=xxx instead to accomplish this. alcid will override all other layout-IDs present. More
info on this is covered in the Post-Install Page
Block: Removes device properties from map, for us we can ignore this
Fun Fact: The reason the byte order is swapped is due to Endianness , specifically Little Endians that modern CPUs use for
ordering bytes. The more you know!
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons.
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
Used for disabling all other GPUs than the integrated Intel iGPU, useful for those wanting to run
-wegnoegpu newer versions of macOS where their dGPU isn't supported
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
Note: Mobile users should refer to the SMBIOS page on which to choose: Mobile SMBIOS
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMac17,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMac17,1
6 Serial: C02S3HYWGG7L
7 Board Serial: C02629102GUGPF7AD
8 SmUUID: 3508AD44-B67D-4AD7-A109-7955130A1033
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
DVMT Pre-Allocated(iGPU Memory): 64MB
Post-install
Kaby Lake
Kaby Lake
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
SSDT-PLUG Allows for native CPU power management on Haswell and newer
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
and recommended for other versions of macOS. This SSDT also has a second function, USBX.
SSDT-EC-USBX
This is used for forcing USB power properties, requires SSDT-EC so this just jumbles them
together.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are RebuildAppleMemoryMap ,
SyncRuntimePermissions and SetupVirtualMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions:: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: NO
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer. Some firmware like
Gigabyte may still require it, and will kernel panic without this
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: YES
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
This section is set up via WhateverGreen's Framebuffer Patching Guide and is used for fixing certain iGPU properties like
ig-platform-id . The way we get the proper value for this is to look at the framebuffer we intend to use, then swap the pairs of
hex bytes.
If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA
0x59120000 - this is used when the Desktop iGPU is used to drive a display
0x59120003 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display
We also add 2 more properties, framebuffer-patch-enable and framebuffer-stolenmem . The first enables patching
via WhateverGreen.kext, and the second sets the min stolen memory to 19MB. This is usually unnecessary, as this can be
configured in BIOS(64MB recommended) but required when not available.
(This is an example for a desktop HD 630 without a dGPU and no BIOS options for iGPU memory)
Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching
Applies AppleALC audio injection, you'll need to do your own research on which codec your motherboard has and
match it with AppleALC's layout. AppleALC Supported Codecs .
For us, we'll be using the boot-arg alcid=xxx instead to accomplish this. alcid will override all other layout-IDs present. More
info on this is covered in the Post-Install Page
Block: Removes device properties from the map, for us we can ignore this
Fun Fact: The reason the byte order is swapped is due to Endianness , specifically Little Endians that modern CPUs use for
ordering bytes
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons.
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
Used for disabling all other GPUs than the integrated Intel iGPU, useful for those wanting to run
-wegnoegpu newer versions of macOS where their dGPU isn't supported
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this Kaby Lake example, we'll chose the iMac18,1 SMBIOS - this is done intentionally for compatibility's sake. There are two
main SMBIOS used for Kaby Lake:
iMac18,1 - this is used for computers utilizing the iGPU for displaying.
iMac18,3 - this is used for computers using a dGPU for displaying, and an iGPU for computing tasks only.
Note: Mobile users should refer to the SMBIOS page on which to choose: Mobile SMBIOS
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMac18,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMac18,1
6 Serial: C02Z2CZ5H7JY
7 Board Serial: C02928701GUH69FFB
8 SmUUID: AA043F8D-33B6-4A1A-94F7-46972AAD0607
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
DVMT Pre-Allocated(iGPU Memory): 64MB
Post-install
Coffee Lake
Coffee Lake
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
SSDT-PLUG Allows for native CPU power management on Haswell and newer
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
and recommended for other versions of macOS. This SSDT also has a second function, USBX.
SSDT-EC-USBX
This is used for forcing USB power properties, requires SSDT-EC so this just jumbles them
together.
This is the 300 series RTC patch , required for most B360, B365, H310, H370, Z390 and some
Z370 boards which prevent systems from booting macOS. The alternative is SSDT-RTC0 for when
SSDT-AWAC AWAC SSDT is incompatible due to missing the Legacy RTC clock, to check whether you need it
and which to use please see Getting started with ACPI page.
So true 300 series motherboards(non-Z370) don't declare the FW chip as MMIO in ACPI and so
XNU ignores the MMIO region declared by the UEFI memory map. This SSDT brings back
SSDT-PMC NVRAM support and uses the scope PCI0.LPCB , this is the most common scope so a pre-
made can be found here: SSDT-PMC.aml
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing devices to be passthrough to macOS that are generally ignored, for us we can ignore this section. Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are DevirtualiseMmio ,
RebuildAppleMemoryMap , SyncRuntimePermissions and SetupVirtualMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: YES
Reduces Stolen Memory Footprint, expands options for slide=N values and very helpful with fixing Memory
Allocation issues on Z390. Requires ProtectUefiServices as well on IceLake and Z390 Coffee Lake
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and Z390
systems'
If on Z390, enable this quirk
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: NO
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer. Some firmware like
Gigabyte may still require it, and will kernel panic without this
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: YES
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
This section is set up via WhateverGreen's Framebuffer Patching Guide and is used for fixing certain iGPU properties like
ig-platform-id . The way we get the proper value for this is to look at the framebuffer we intend to use, then swap the pairs of
hex bytes.
If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA
0x3E9B0007 - this is used when the Desktop iGPU is used to drive a display
0x3E920003 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display
Worth noting that for 10.12 -> 10.13.5, you would need to fake the iGPU to the same values in the Kaby Lake guide, as this was
before native Coffee Lake iGPU showed up. 10.13.6 natively supports Coffee Lake
We also add 2 more properties, framebuffer-patch-enable and framebuffer-stolenmem . The first enables patching
via WhateverGreen.kext, and the second sets the min stolen memory to 19MB. This is usually unnecessary, as this can be
configured in BIOS(64MB recommended) but required when not available.
For users with black screen issues after verbose on B360, B365, H310, H370, Z390, please see the BusID iGPU patching page
(This is an example for a desktop UHD 630 without a dGPU and no BIOS options for iGPU memory)
Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching
Applies AppleALC audio injection, you'll need to do your own research on which codec your motherboard has and
match it with AppleALC's layout. AppleALC Supported Codecs .
For us, we'll be using the boot-arg alcid=xxx instead to accomplish this. alcid will override all other layout-IDs present. More
info on this is covered in the Post-Install Page
Fun Fact: The reason the byte order is swapped is due to Endianness , specifically Little Endians that modern CPUs use for
ordering bytes. The more you know!
Block: Removes device properties from the map, for us we can ignore this
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons.
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
Used for disabling all other GPUs than the integrated Intel iGPU, useful for those wanting to run
-wegnoegpu newer versions of macOS where their dGPU isn't supported
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this Coffee Lake example, I chose the iMac19,1 SMBIOS - this is done intentionally for compatibility's sake. There are two main
SMBIOS used for Coffee Lake:
You'll use 18,3 when you have a Pascal or Maxwell dGPU and are limited to versions of macOS with Web Drivers
Note: Mobile users should refer to the SMBIOS page on which to choose: Mobile SMBIOS
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMac19,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMac19,1
6 Serial: C02XG0FDH7JY
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
DVMT Pre-Allocated(iGPU Memory): 64MB
Post-install
Haswell-E
Haswell-E
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
Needed for proper CPU power management, you will need to run Pike's ssdtPRGen.sh script to
SSDT-PM generate this file. This will be run in post install .
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
SSDT-EC and recommended for other versions of macOS.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing devices to be passthrough to macOS that are generally ignored, for us we can ignore this section. Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are DevirtualiseMmio ,
DisableVariableWrite and RebuildAppleMemoryMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: YES
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: YES
Needed for systems with non-functioning NVRAM, you can verify here if yours works. For X99 we'll assume
NVRAM doesn't work but post install you can double check
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: YES
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: NO
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
By default, the Sample.plist has this section set for iGPU and Audio. We have no iGPU so PCIRoot
PciRoot(0x0)/Pci(0x2,0x0) can be removed from Add section. For audio we'll be setting the layout in the boot-args
section, so removal of PciRoot(0x0)/Pci(0x1b,0x0) is also recommended from both Add and Block sections
TL;DR, delete all the PciRoot's here as we won't be using this section.
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs and enabling power management on Haswell-E and Boardwell-E
Haswell E:
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , AppleXcpmExtraMsrs
, DisableIOMapper , PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should
be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: YES
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons. Required for
Broadwell-E and lower
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: YES
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM like X99
LegacyOverwrite: YES
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM like X99
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: NO
Enables writing to flash memory for all added variables, not compatible with emulated NVRAM
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMacPro1,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMacPro1,1
6 Serial: C02YX0TZHX87
7 Board Serial: C029269024NJG36CB
8 SmUUID: DEA17B2D-2F9F-4955-B266-A74C47678AD3
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: YES
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Post-install
Broadwell-E
Broadwell-E
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
Needed for proper CPU power management, you will need to run Pike's ssdtPRGen.sh script to
SSDT-PM generate this file. This will be run in post install .
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
SSDT-EC and recommended for other versions of macOS.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing devices to be passthrough to macOS that are generally ignored, for us we can ignore this section. Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are DevirtualiseMmio ,
DisableVariableWrite and RebuildAppleMemoryMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: YES
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: YES
Needed for systems with non-functioning NVRAM, you can verify here if yours works. For X99 we'll assume
NVRAM doesn't work but post install you can double check
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: YES
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: NO
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
By default, the Sample.plist has this section set for iGPU and Audio. We have no iGPU so PCIRoot
PciRoot(0x0)/Pci(0x2,0x0) can be removed from Add section. For audio we'll be setting the layout in the boot-args
section, so removal of PciRoot(0x0)/Pci(0x1b,0x0) is also recommended from both Add and Block sections
TL;DR, delete all the PciRoot's here as we won't be using this section.
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs and enabling power management on Haswell-E and Boardwell-E
Broadwell E:
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , AppleXcpmExtraMsrs
, DisableIOMapper , PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should
be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: YES
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons. Required for
Broadwell-E and lower
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: YES
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM like X99
LegacyOverwrite: YES
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM like X99
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: NO
Enables writing to flash memory for all added variables, not compatible with emulated NVRAM
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMacPro1,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMacPro1,1
6 Serial: C02YX0TZHX87
7 Board Serial: C029269024NJG36CB
8 SmUUID: DEA17B2D-2F9F-4955-B266-A74C47678AD3
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: YES
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled)
Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Post-install
Skylake-X
Skylake-X
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
Intel BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
For us we'll need a couple of SSDTs to bring back functionality that Clover provided:
Required_SSDTs
Description
SSDT-PLUG Allows for native CPU power management on Haswell and newer
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users
and recommended for other versions of macOS. This SSDT also has a second function, USBX.
SSDT-EC-USBX
This is used for forcing USB power properties, requires SSDT-EC so this just jumbles them
together.
This is the 300 series RTC patch , required for most B360, B365, H310, H370, Z390 and some
Z370 boards which prevent systems from booting macOS. The alternative is SSDT-RTC0 for when
SSDT-AWAC AWAC SSDT is incompatible due to missing the Legacy RTC clock, to check whether you need it
and which to use please see Getting started with ACPI page.
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove the entry for it
in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing devices to be passthrough to macOS that are generally ignored, for us we can ignore this section. Quirks:
Settings relating to boot.efi patching and firmware fixes, ones we need to change are DevirtualiseMmio ,
RebuildAppleMemoryMap , SyncRuntimePermissions and SetupVirtualMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: YES
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: NO
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer. Some firmware like
Gigabyte may still require it, and will kernel panic without this
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: YES
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
By default, the Sample.plist has this section set for iGPU and Audio. We have no iGPU so PCIRoot
PciRoot(0x0)/Pci(0x2,0x0) can be removed from Add section. For audio we'll be setting the layout in the boot-args
section, so removal of PciRoot(0x0)/Pci(0x1b,0x0) is also recommended from both Add and Block sections
TL;DR, delete all the PciRoot's here as we won't be using this section.
Kernel
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs, thankfully both Skylake-X and Cascade Lake-X have the same CPU ID as Xeon
W chips which ship in the iMac Pro. So here we'll leave it blank
Block: Blocks kexts from loading. Not relevant for us Patch: Patches both the kernel and kexts Quirks:
Settings relating to the kernel, for us we'll be enabling AppleCpuPmCfgLock , AppleXcpmCfgLock , DisableIOMapper ,
PanicNoKextDump , PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. Please
verify you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmCfgLock: YES
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. Please verify
you can disable CFG-Lock, most systems won't boot with it on so requiring use of this quirk
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and many Xeons. Skylake-X can
ignore
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops
DisableIoMapper: YES
Needed to get around VT-D if either unable to disable in BIOS or needed for other operating systems, much
better alternative to dart=0 as SIP can stay on in Catalina
DummyPowerManagement: NO
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. Please
create a USB map when possible.
The reason being is that UsbInjectAll reimplements builtin macOS functionality without proper current tuning. It is much cleaner to
just describe your ports in a single plist-only kext, which will not waste runtime memory and such
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMacPro1,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMacPro1,1
6 Serial: C02YX0TZHX87
7 Board Serial: C029269024NJG36CB
8 SmUUID: DEA17B2D-2F9F-4955-B266-A74C47678AD3
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
r/Hackintosh Subreddit
r/Hackintosh Discord
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
VT-d (can be enabled if you set DisableIoMapper to YES)
CSM
Thunderbolt(For initial install, as Thunderbolt can cause issues if not setup correctly)
Intel SGX
Intel Platform Trust
CFG Lock (MSR 0xE2 write protection)(This must be off, if you can't find the option then enable both
AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks. Your hack will not boot with CFG-
Lock enabled) Enable:
VT-x
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Post-install
AMD Config.plist
Bulldozer/Jaguar
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
AMD BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
AMD Kernel Patches : Needed for booting macOS on AMD hardware(save these for later, we'll go over how to use
them below)
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
SSDT-EC-USBX
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users and
recommended for other versions of macOS
This SSDT also has a second function, USBX. This is used for forcing USB power properties and requires SSDT-
EC so this just jumbles them together.
I've also provided a precompiled version for users with EC0 , this is the most common device on AMD systems:
SSDT-EC-USBX-AMD.aml
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove
the entry for it in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks: Settings relating to boot.efi patching and firmware fixes, one we need to change is RebuildAppleMemoryMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: YES
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: NO
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
By default, the Sample.plist has this section set for iGPU and Audio. We have no iGPU so PCIRoot
PciRoot(0x0)/Pci(0x2,0x0) can be removed from Add section. For audio we'll be setting the layout in the boot-args
section, so removal of PciRoot(0x0)/Pci(0x1b,0x0) is also recommended from both Add and Block sections
TL;DR, delete all the PciRoot's here as we won't be using this section.
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons(AMD CPUs don't require this)
Patch: This is where the AMD kernel patching magic happens. Please do note that KernelToPatch and MatchOS from Clover
becomes Kernel and MinKernel / MaxKernel in OpenCore, you can find pre-made patches by AlGrey (algrey#9303):
Kernel patches:
To merge:
Quirks: Settings relating to the kernel, for us we'll be enabling DummyPowerManagement , PanicNoKextDump ,
PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: NO
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. AMD
users can ignore
AppleXcpmCfgLock: NO
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. AMD users can
ignore
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and certain Xeons
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops. To be used in
tandem with PlatformInfo -> UpdateSMBIOSMode -> Custom
DisableIoMapper: NO
DummyPowerManagement: YES
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this. Note this shouldn't be needed on Mojave and newer
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. A more
proper solution for AMD can be found here: AMD USB Mapping
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this example, we'll choose the iMacPro1,1 SMBIOS but some SMBIOS play with certain GPUs better than others:
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMacPro1,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMacPro1,1
6 Serial: C02YX0TZHX87
7 Board Serial: C029269024NJG36CB
8 SmUUID: DEA17B2D-2F9F-4955-B266-A74C47678AD3
The order is Product | Serial | Board Serial (MLB) The Type part gets copied to Generic -> SystemProductName.
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive, generally found on systems that upgraded from
Legacy to UEFI installs
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
AMD OS X Discord
r/Hackintosh Subreddit
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
Compatibility Support Module (CSM)(Must be off, GPU errors like gIO are common when this option in enabled
)
Enable:
Above 4G decoding(This must be on, if you can't find the option then add npci=0x2000 to boot-args. Do not
have both this option and npci enabled at the same time)
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Post-install
Zen
Table of Contents:
Starting Point
ACPI
Booter
DeviceProperties
Kernel
Misc
NVRAM
SMBIOS
UEFI
Cleaning up
AMD BIOS settings
Starting Point
So making a config.plist may seem hard, its not. It just takes some time but this guide will tell you how to configure everything, you
won't be left in the cold. This also means if you have issues, review your config settings to make sure they're correct. Main things to
note with OpenCore:
All properties must be defined, there are no default OpenCore will fall back on so do not delete sections unless
told explicitly so. If the guide doesn't mention the option, leave it at default.
The Sample.plist cannot be used As-Is, you must configure it to your system
DO NOT USE CONFIGURATORS, these rarely respect OpenCore's configuration and even some like Mackie's will
add Clover properties and corrupt plists!
Now with all that, we'll need some things to get started:
ProperTree : For editing our config, this editor has some super useful tools for OpenCore
GenSMBIOS : For generating our SMBIOS
Sample.plist : This is found under the Docs folder of the release download
AMD Kernel Patches : Needed for booting macOS on AMD hardware(save these for later, we'll go over how to use
them below)
macOS: ProperTree.command
Windows: ProperTree.bat
Run the Clean Snapshot function(Cmd/Ctrl + Shift + R and point it at your EFI/OC folder),
This will remove all the entries from the config.plist and then adds all your SSDTs, Kexts and Firmware drivers to
the config
Cmd+R is another option that will add all your files as well but will leave entries disabled if they were set like that
before, useful for when you're troubleshooting
And read this guide more than once before setting up OpenCore and make sure you have it set up correctly. Do note that
images will not always be the most up-to-date so please read the text below them, if nothing's mentioned then leave as
default.
ACPI
ACPI
Add:
This is where you'll add SSDTs for your system, these are very important to booting macOS and have many uses like USB maps ,
disabling unsupported GPUs and such. And with our system, its even required to boot. Guide on making them found here:
Getting started with ACPI
SSDT-EC-USBX
Hides the Embedded controller and creates a fake one for macOS, needed for all Catalina users and
recommended for other versions of macOS
This SSDT also has a second function, USBX. This is used for forcing USB power properties and requires SSDT-
EC so this just jumbles them together.
I've also provided a precompiled version for users with EC0 , this is the most common device on AMD systems:
SSDT-EC-USBX-AMD.aml
Note that you should not add your generated DSDT.aml here, it is already in your firmware. So if present, remove
the entry for it in your config.plist and under EFI/OC/ACPI.
For those wanting a deeper dive into dumping your DSDT, how to make these SSDTs, and compiling them, please see the Getting
started with ACPI page. Compiled SSDTs have a .aml extension(Assembled) and will go into the EFI/OC/ACPI folder and must
be specified in your config under ACPI -> Add as well.
Block This blocks certain ACPI tabes from loading, for us we can ignore this Patch:
This section allows us to dynamically modify parts of the ACPI (DSDT, SSDT, etc.) via OpenCore. For us, our patches are handled
by our SSDTs. This is a much cleaner solution as this will allow us to boot Windows and other OSes with OpenCore
FadtEnableReset: NO
Enable reboot and shutdown on legacy hardware, not recommended unless needed
NormalizeHeaders: NO
Cleanup ACPI header fields, only relevant for macOS High Sierra 10.13
RebaseRegions: NO
Attempt to heuristically relocate ACPI memory regions, not needed unless custom DSDT is used.
ResetHwSig: NO
Needed for hardware that fails to maintain hardware signature across the reboots and cause issues with waking
from hibernation
ResetLogoStatus: NO
Workaround for OEM Windows logo not drawing on systems with BGRT tables.
Booter
Booter
This section is dedicated to quirks relating to boot.efi patching with OpenRuntime, the replacement for AptioMemoryFix.efi
MmioWhitelist:
This section is allowing spaces to be passthrough to macOS that are generally ignored, useful when paired with
DevirtualiseMmio
Quirks: Settings relating to boot.efi patching and firmware fixes, for us we care about enabling SetupVirtualMap
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: NO
Reduces Stolen Memory Footprint, expands options for slide=N values and generally useful especially on
HEDT and Xeon systems
DisableSingleUser: NO
Disables the use of Cmd+S and -s , this is closer to the behaviour of T2 based machines
DisableVariableWrite: NO
Needed for systems with non-functioning NVRAM, you can verify here if yours works
DiscardHibernateMap: NO
Reuse original hibernate memory map, only needed for certain legacy hardware
EnableSafeModeSlide: YES
EnableWriteUnprotector: YES
ForceExitBootServices: NO
Ensures ExitBootServices calls succeeds even when MemoryMap has changed, don't use unless necessary
ProtectMemoryRegions: NO
Needed for fixing artefacts and sleep-wake issues, generally only needed on very old firmwares
ProtectSecureBoot: NO
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems
ProvideCustomSlide: YES
If there's a conflicting slide value, this option forces macOS to use a pseudo-random value. Needed for those
receiving Only N/256 slide values are usable! debug message
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this
SetupVirtualMap: NO
Fixes SetVirtualAddresses calls to virtual addresses, not needed on Skylake and newer. Some firmware like
Gigabyte may still require it, and will kernel panic without this
SignalAppleOS: NO
Tricks the hardware into thinking its always booting macOS, mainly beneficial for MacBook Pro's with dGPUs as
booting Windows won't allow for the iGPU to be used
SyncRuntimePermissions: YES
Fixes alignment with MAT tables and required to boot Windows and Linux with MAT tables, also recommended
for macOS. Mainly relevant for Skylake and newer
DeviceProperties
DeviceProperties
By default, the Sample.plist has this section set for iGPU and Audio. We have no iGPU so PCIRoot
PciRoot(0x0)/Pci(0x2,0x0) can be removed from Add section. For audio we'll be VoodooHDA, so removal of
PciRoot(0x0)/Pci(0x1b,0x0) is also recommended from both Add and Block sections
TL;DR, delete all the PciRoot's here as we won't be using this section.
Kernel
Add: Here's where you specify which kexts to load, order matters here so make sure Lilu.kext is always first! Other higher priority
kexts come after Lilu such as VirtualSMC, AppleALC, WhateverGreen, etc. A reminder that ProperTree users can run Cmd/Ctrl +
Shift + R to add all their kexts in the correct order without manually typing each kext out.
BundlePath
Enabled
ExecutablePath
Path to the actual executable is hidden within the kext, you can see what path your kext has by right-clicking and
selecting Show Package Contents . Generally, they'll be Contents/MacOS/Kext but some have kexts
hidden within under Plugin folder. Do note that plist only kexts do not need this filled in.
ex: Contents/MacOS/Lilu
PlistPath
Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons(AMD CPUs don't require this)
Patch: This is where the AMD kernel patching magic happens. Please do note that KernelToPatch and MatchOS from Clover
becomes Kernel and MinKernel / MaxKernel in OpenCore, you can find pre-made patches by AlGrey (algrey#9303):
Kernel patches:
To merge:
Quirks: Settings relating to the kernel, for us we'll be enabling DummyPowerManagement , PanicNoKextDump ,
PowerTimeoutKernelPanic and XhciPortLimit . Everything else should be left as default
AppleCpuPmCfgLock: NO
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be AppleIntelCPUPM. AMD
users can ignore
AppleXcpmCfgLock: NO
Only needed when CFG-Lock can't be disabled in BIOS, Clover counterpart would be KernelPM. AMD users can
ignore
AppleXcpmExtraMsrs: NO
Disables multiple MSR access needed for unsupported CPUs like Pentiums and certain Xeons
AppleXcpmForceBoost: NO
Forces maximum multiplier, only recommended to enable on scientific or media calculation machines that are
constantly under load. Main Xeons benefit from this
CustomSMBIOSGuid: NO
Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops. To be used in
tandem with PlatformInfo -> UpdateSMBIOSMode -> Custom
DisableIoMapper: NO
DummyPowerManagement: YES
New alternative to NullCPUPowerManagement, required for all AMD CPU based systems as there's no native
power management. Intel can ignore
ExternalDiskIcons: NO
External Icons Patch, for when internal drives are treated as external drives but can also make USB drives
internal. For NVMe on Z87 and below you just add built-in property via DeviceProperties.
IncreasePciBarSize: NO
Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GB, enabling Above4GDecoding in the BIOS is a much
cleaner and safer approach. Some X99 boards may require this, you'll generally experience a kernel panic on
IOPCIFamily if you need this
LapicKernelPanic: NO
Disables kernel panic on AP core lapic interrupt, generally needed for HP systems. Clover equivalent is
Kernel LAPIC
PanicNoKextDump: YES
Allows for reading kernel panics logs when kernel panics occur
PowerTimeoutKernelPanic: YES
Helps fix kernel panics relating to power changes with Apple drivers in macOS Catalina, most notably with digital
audio.
ThirdPartyDrives: NO
Enables TRIM, not needed for NVMe but AHCI based drives may require this. Please check under system report
to see if your drive supports TRIM
XhciPortLimit: YES
This is actually the 15 port limit patch, don't rely on it as it's not a guaranteed solution for fixing USB. A more
proper solution for AMD can be found here: AMD USB Mapping
Misc
Misc
HibernateMode: None
PickerMode: Builtin
HideAuxiliary: NO
Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour
HideSelf: YES
ConsoleAttributes: 0
Sets OpenCore's UI color, won't be covered here but see 8.3.8 of Configuration.pdf for more info
PickerAttributes: 0
Used for setting custom picker attributes, use of this setting will be covered in Post-Install
PickerAudioAssist: NO
Used for enabling VoiceOver like support in the picker, unless you want your hack talking to you keep this
disabled
PollAppleHotKeys: NO
Allows you to use Apple's hotkeys during boot, depending on the firmware you may need to use OpenUsbKbDxe.
efi instead of OpenCore's builtin support. Do note that if you can select anything in OC's picker, disabling this
option can help. Popular commands:
TakeoffDelay: 0
Used to add a delay for hotkeys when OpenCore is a bit to fast to register, 5000-10000 microseconds is the
preferred range for users with broken hotkeys support
Timeout: 5
This sets how long OpenCore will wait until it automatically boots from the default selection
Debug: Helpful for debugging OpenCore boot issues(We'll be changing everything but DisplayDelay )
AppleDebug: YES
Enables boot.efi logging, useful for debugging. Note this is only supported on 10.15.4 and newer
DisableWatchDog: YES
Disables the UEFI watchdog, can help with early boot issues
Target: 67
DisplayLevel: 2147483650
These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip
AllowNvramReset: YES
Allows for NVRAM reset both in the boot picker and when pressing Cmd+Opt+P+R
AllowSetDefault: YES
Allow CTRL+Enter and CTRL+Index to set default boot device in the picker
AuthRestart: NO:
Enables Authenticated restart for FileVault2 so password is not required on reboot. Can be considered a security
risk so optional
ExposeSensitiveData: 6
Vault: Optional
We won't be dealing vaulting so we can ignore, you won't boot with this set to Secure
This is a word, it is not optional to omit this setting. You will regret it if you don't set it to Optional , note that it
is case-sensitive
ScanPolicy: 0
0 allows you to see all drives available, please refer to Security section for further details. Will not boot USBs
with this set to default
Tools Used for running OC debugging tools like the shell, ProperTree's snapshot function will add these for you. For us, we won't
be using any tools
Name
Enabled
Path
Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore
NVRAM
NVRAM
UIScale:
boot-args Description
This enables verbose mode, which shows all the behind-the-scenes text that scrolls by as you're
booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you
-v
an inside look at the boot process, and can help you identify issues, problem kexts, etc.
This disables macOS's watchdog which helps prevents a reboot on a kernel panic. That way you can
debug=0x100
hopefully glean some useful info and follow the breadcrumbs to get past the issues.
This is a companion setting to debug=0x100 that tells the OS to also print the symbols on a kernel
keepsyms=1
panic. That can give some more helpful insight as to what's causing the panic itself.
Used for setting layout-id for AppleALC, see supported codecs to figure out which layout to use for
alcid=1 your specific system. More info on this is covered in the Post-Install Page
GPU-Specific boot-args:
boot-args Description
Used for disabling boardID on Navi GPUs(RX 5000 series), without this you'll get a black screen.
agdpmod=pikera
Don't use if you don't have Navi(ie. Polaris and Vega cards shouldn't use this)
nvda_drv_vrl=1 Used for enabling Nvidia's WebDrivers on Maxwell and Pascal cards in Sierra and HighSierra
csr-active-config: Settings for SIP, generally recommended to manually change this within Recovery partition with
csrutil via the recovery partition
csr-active-config is set to 00000000 which enables System Integrity Protection. You can choose a number of other options to
enable/disable sections of SIP. Some common ones are as follows:
prev-lang:kbd: <>
Needed for non-latin keyboards in the format of lang-COUNTRY:keyboard , recommended to keep blank
though you can specify it(Default in Sample config is Russian):
American: en-US:0 ( 656e2d55533a30 in HEX)
Full list can be found in AppleKeyboardLayouts.txt
Hint: prev-lang:kbd can be changed into a String so you can input en-US:0 directly instead of converting
to HEX
Block: Forcibly rewrites NVRAM variables, do note that Add will not overwrite values already present in NVRAM so values like
boot-args should be left alone.
LegacyEnable: NO
Allows for NVRAM to be stored on nvram.plist, needed for systems without native NVRAM
LegacyOverwrite: NO
Permits overwriting firmware variables from nvram.plist, only needed for systems without native NVRAM
LegacySchema
Used for assigning NVRAM variables, used with LegacyEnable set to YES
WriteFlash: YES
Platforminfo
PlatformInfo
For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.
For this example, we'll choose the iMacPro1,1 SMBIOS but some SMBIOS play with certain GPUs better than others:
Run GenSMBIOS, pick option 1 for downloading MacSerial and Option 3 for selecting out SMBIOS. This will give us an output
similar to the following:
1 #######################################################
2 # iMacPro1,1 SMBIOS Info #
3 #######################################################
4
5 Type: iMacPro1,1
6 Serial: C02YX0TZHX87
7 Board Serial: C029269024NJG36CB
8 SmUUID: DEA17B2D-2F9F-4955-B266-A74C47678AD3
The order is Product | Serial | Board Serial (MLB) The Type part gets copied to Generic -> SystemProductName.
The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.
We set Generic -> ROM to either an Apple ROM (dumped from a real Mac), your NIC MAC address, or any random MAC address
(could be just 6 random bytes, for this guide we'll use 11223300 0000 . After install follow the Fixing iServices page on how to
find your real MAC Address)
Reminder that you want either an invalid serial or valid serial numbers but those not in use, you want to get a message
back like: "Invalid Serial" or "Purchase Date not Validated"
Generates Platforminfo based on Generic section instead of DataHub, NVRAM, and SMBIOS sections
Generic:
SpoofVendor: YES
Swaps vendor field for Acidanthera, generally not safe to use Apple as a vendor in most case
AdviseWindows: NO
Used for when the EFI partition isn't first on the Windows drive, generally found on systems that upgraded from
Legacy to UEFI installs
UpdateDataHub: YES
UpdateNVRAM: YES
UpdateSMBIOS: YES
UpdateSMBIOSMode: Create
Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk
UEFI
UEFI
ConnectDrivers: YES
Forces .efi drivers, change to NO will automatically connect added UEFI drivers. This can make booting slightly
faster, but not all drivers connect themselves. E.g. certain file system drivers may not load.
Drivers: Add your .efi drivers here Only drivers present here should be:
HfsPlus.efi
ApfsDriverLoader.efi
OpenRuntime.efi
Audio: Related to AudioDxe settings, for us we'll be ignoring(leave as default). This is unrelated to audio support in macOS
AudioSupport: NO
Used for enabling the audio port out, this requires AudioOut
AudioDevice: [Blank]
This will be the PciRoot of your audio device, gfxutil and debug log are great ways to find this
AudioCodec: 0
Specify your audio codec address, can be found in either debug log or with under IOHDACodecAddress in
IOService
AudioOut: 0
Specifies which output is used, use the debug log to see what your board has
Same idea, can be found in either debug log or with HdaCodecDump.efi
MinimumVolume: 20
PlayChime: NO
VolumeAmplifier: 0
Multiplication coefficient for system volume to raw volume linear translation from 0 to 1000, see Configuration.pdf
for more info on calculation
Input: Related to boot.efi keyboard passthrough used for FileVault and Hotkey support
KeyFiltering: NO
Verifies and discards uninitialized data, mainly prevalent on 7 series Gigabyte boards
KeyForgetThreshold: 5
The delay between each key input when holding a key down, for best results use 5 milliseconds
KeyMergeThreshold: 2
The length of time that a key will be registered before resetting, for best results use 2 milliseconds
KeySupport: YES
Enables OpenCore's built in key support and required for boot picker selection, do not use with
OpenUsbKbDxe.efi
KeySupportMode: Auto
KeySwap: NO
PointerSupport: NO
Used for fixing broken pointer support, commonly used for Z87 Asus boards
PointerSupportMode:
Specifies OEM protocol, currently only supports Z87 and Z97 ASUS boards so leave blank
TimerResolution: 50000
Set architecture timer resolution, Asus Z87 boards use 60000 for the interface. Settings to 0 can also work for
some
TextRenderer: BuiltinGraphics
Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly
ConsoleMode: [Blank]
Resolution: Max
Sets OpenCore's resolution, Max will use the highest available resolution or can be specified (
WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080) )
ClearScreenOnModeSwitch: NO
Needed for when half of the previously drawn image remains, will force black screen before switching to
TextMode. Do note that this is only required in cases when using System TextRenderer
IgnoreTextInGraphics: NO
Fix for UI corruption when both text and graphics outputs, only relevant for users using System TextRenderer
ProvideConsoleGop: YES
Enables GOP(Graphics output Protocol) which the macOS bootloader requires for console handle, required for
graphical output once the kernel takes over
DirectGopRendering: NO
Use builtin graphics output protocol renderer for console, mainly relevant for MacPro5,1 users
ReconnectOnResChange: NO
ReplaceTabWithSpace: NO
Depending on the firmware, some system may need this to properly edit files in the UEFI shell when unable to
handle Tabs. This swaps it for spaces instead-but majority can ignore it but do note that ConsoleControl set to
True may be needed
SanitiseClearScreen: NO
Fixes High resolutions displays that display OpenCore in 1024x768, only relevant for users using System
TextRenderer
Protocols: (Most values can be ignored here as they're meant for real Macs/VMs)
AppleSmcIo: NO
Reinstalls Apple SMC I/O, this is the equivalent of VirtualSMC.efi which is only needed for users using FileVault
FirmwareVolume: NO
HashServices: NO
Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility
UnicodeCollation: NO
Some older firmware have broken Unicode collation, fixes UEFI shell compatibility on these systems(generally
IvyBridge and older)
Quirks:
ExitBootServicesDelay: 0
Only required for very specific use cases like setting to 3000 - 5000 for ASUS Z87-Pro running FileVault2
IgnoreInvalidFlexRatio: NO
Fix for when MSR_FLEX_RATIO (0x194) can't be disabled in the BIOS, required for all pre-Skylake based
systems
ReleaseUsbOwnership: NO
Releases USB controller from firmware driver, needed for when your firmware doesn't support EHCI/XHCI
Handoff. Clover equivalent is FixOwnership
RequestBootVarFallback: YES
RequestBootVarRouting: YES
UnblockFsConnect: NO
Some firmware block partition handles by opening them in By Driver mode, which results in File System protocols
being unable to install. Mainly relevant for HP systems when no drives are listed
Cleaning up
And now you're ready to save and place it into your EFI under EFI/OC.
For those having booting issues, please make sure to read the Troubleshooting section first and if your questions are still
unanswered we have plenty of resources at your disposal:
AMD OS X Discord
r/Hackintosh Subreddit
Sanity check:
So thanks to the efforts of Ramus, we also have an amazing tool to help verify your config for those who may have missed
something:
Sanity Checker
Disable:
Fast Boot
Compatibility Support Module (CSM)(Must be off, GPU errors like gIO are common when this option in enabled
)
Enable:
Above 4G decoding(This must be on, if you can't find the option then add npci=0x2000 to boot-args. Do not
have both this option and npci enabled at the same time)
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode
Post-install
Post Install
Post-Install
So you've finally finished installing macOS with OpenCore but know there's still some things to clean up, well you've come to the
right place!
Universal
Correcting Audio
Enabling FileVault and other security features
Booting macOS without a USB
Updating OpenCore, kexts and macOS
Disabling OpenCore Logging
Fixing iServices
Fixing DRM
Fixing Power Management
Intel
AMD
For those limited to macOS High Sierra and are having issues installing web drivers, the following tool will help patch in support:
Web-Driver-Toolkit
Note: Kepler GPUs do not need web drivers, they're natively supported by macOS even in Catalina
So something that makes OpenCore truly special is how it's been built with security in mind which is quite rare especially in the
Hackintosh community. Well here we'll be going through and setting up some of OpenCore's great Security features:
FileVault
Vault
ScanPolicy
FileVault
FileVault is macOS's builtin drive encryption, and with OpenCore support for it has been drastically improved compared to the
legacy Clover drivers.
OpenRuntime.efi
Do not use VirtualSMC.efi with OpenCore, its already baked inside. You do however require VirtualSMC.kext still
AuthRestart set to YES(Enables Authenticated restart for FileVault2 so password is not required on reboot.
Can be considered a security risk so optional)
KeySupport set to YES(Only when using OpenCore's builtin input, users of OpenUsbKbDxe should avoid)
ProvideConsoleGop to YES
With all this, you can proceed to enable FileVault like on a normal mac under
System Preferences -> Security & Privacy -> FileVault
Vault
What is vaulting? Well vaulting is based around 2 things, vault.plist and vault.sig:
This can be seen as secure boot for OpenCore, so no one can modify it and get in without your permission.
The specifics of vaulting is that a 256 byte RSA-2048 signature of vault.plist will be shoved into our OpenCore.efi. This key can
either be shoved into OpenCoreVault.c before compiling or with sign.command if you already have OpenCore.efi compiled.
Do note that nvram.plist won't be vaulted so users with emulated NVRAM still have risk of someone adding/removing certain
NVRAM variables
Basic : Requires just vault.plist to be present, mainly used for filesystem integrity verification
Secure : Requires both vault.plist and vault.sig, used for best security as vault.plist changes require a new
signature
Needed with Insyde firmwares for fixing secureboot keys and reporting violations
Setting up vault: Grab OpenCorePkg and open the CreateVault folder, inside we'll find the following:
create_vault.sh
RsaTool
sign.command
So when we run this command, it'll look for the EFI folder located beside our Utilities folder, so we want to bring either our personal
EFI into the OpenCorePkg folder or bring Utilities into our EFI folder:
Disabling Vault after setup: If you're doing heavy troubleshooting or have the need to disable Vault, the main things to change:
ScanPolicy
What this quirk allows to prevent scanning and booting from untrusted sources. Setting to 0 will allow all sources present to be
bootable but calculating a specific ScanPolicy value will allow you a greater range of flexibility and security.
To calculate the ScanPolicy value, you simply add up all the hexadecimal values(with a hexadecimal calculator, you can access this
from the built-in macOS calculator app with +3 ). Once it's all added up, you would add this hexadecimal value to ScanPolicy(you
will need to convert it to a decimal value first, Xcode will automatically convert it when you paste it)
restricts scanning to only known file systems defined as a part of this policy. File system drivers may not be aware of
this policy, and to avoid mounting of undesired file systems it is best not to load its driver. This bit does not affect dmg
mounting, which may have any file system. Known file systems are prefixed with OCSCAN_ALLOW_FS.
restricts scanning to only known device types defined as a part of this policy. This is not always possible to detect
protocol tunneling, so be aware that on some systems it may be possible for e.g. USB HDDs to be recognised as
SATA. Cases like this must be reported. Known device types are prefixed with OCSCAN_ALLOW_DEVICE.
By default, ScanPolicy is given a value of 0xF0103 (983,299) which is the combination of the following:
OC_SCAN_FILE_SYSTEM_LOCK
OC_SCAN_DEVICE_LOCK
OC_SCAN_ALLOW_FS_APFS
OC_SCAN_ALLOW_DEVICE_SATA
OC_SCAN_ALLOW_DEVICE_SASEX
OC_SCAN_ALLOW_DEVICE_SCSI
OC_SCAN_ALLOW_DEVICE_NVME
And lets just say for this example that you want to add OC_SCAN_ALLOW_DEVICE_USB:
Fixing Audio
Table of Contents:
So to start, we'll assume you already have Lilu and AppleALC installed, if you're unsure if it's been loaded correctly you can run the
following in terminal(This will also check if AppleHDA is loaded, as without this AppleALC has nothing to patch):
If all 3 show up, you're good to go. And make sure VoodooHDA is not present. This will conflict with AppleALC otherwise.
So for this example, we'll assume your codec is ALC1220. To verify yours, you have a couple options:
Now with a codec, we'll want to cross reference it with AppleALC's supported codec list:
0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34
Which hardware revision is supported( 0x100003 ), only relevant when multiple revisions are listed with different
layouts
Various layout IDs supported by our codec(
layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34 )
Now with a list of supported layout IDs, we're ready to try some out
Note: If your Audio Codec is ALC 3XXX this is likely false and just a rebranded controller, do your research and see what the actual
controller is.
An example of this is the ALC3601, but when we load up Linux the real name is shown: ALC 671
To test out our layout IDs, we're going to be using the boot-arg alcid=xxx where xxx is your layout. Remember that to try layout
IDs one at a time. Do not add multiple IDs or alcid boot-args, if one doesn't work then try the next ID and etc
1 config.plist
2 NVRAM
3 Add
4 7C436110-AB2A-4BBB-A880-FE41995C9F82
5 boot-args | String | alcid=11
Once you've found a Layout ID that works with your hack, we can create a more permanent solution for closer to how real macs set
their Layout ID.
With AppleALC, there's a priority hierarchy with which properties are prioritized:
1. alcid=xxx boot-arg, useful for debugging and overrides all other values
As we can see in AppeALC's source , it expects your layout ID to be set via alc-layout-id so to make things easier on
AppleALC we'll set it with DeviceProperties
To start, we'll need to find out where our Audio controller is located on the PCI map. For this, we'll be using a handy tool called gfxutil
then with the macOS terminal:
path/to/gfxutil -f HDEF
Then add this PciRoot with the child alc-layout-id to your config.plist under DeviceProperties -> Add:
Note that the value is in HEX/Data, you can use a simple decimal to hexadecimal calculator to find yours.
printf '%x\n' DECI_VAL :
Note that the final value should be 4 bytes in total(ie. 0B 00 00 00 ), for layout IDs surpassing 255( FF 00 00 00 ) will need
to remember that the bytes are swapped. So 256 will become FF 01 00 00
Miscellaneous issues
No Mic on AMD:
This is a common issue with when running AppleALC with AMD, specifically no patches have been made to support
Mic input. At the moment the "best" solution is to either buy a USB DAC/Mic or go the VoodooHDA.kext method.
Problem with VoodooHDA is that it's been known to be unstable and have worse audio quality than AppleALC
This is likely do to IRQ conflicts, on Clover there's a whole sweep of ACPI hot-patches that are applied automagically. Fixing this is
a little bit painful but SSDTTime 's FixHPET option can handle most cases.
For odd cases where RTC and HPET take IRQs from other devices like USB and audio, you can reference the HP Compaq
DC7900 ACPI patch example in the trashOS repo
Troubleshooting
If all 3 show up, you're good to go. And make sure VoodooHDA is not present. This will conflict with AppleALC otherwise. Other
kexts to make sure you do not have in your system:
realtekALC.kext
CloverALC.kext
VoodooHDA.kext
HDA Blocker.kext
HDAEnabler#.kext(# can be 1, 2, or 3)
Generally the best place to start is by looking through your OpenCore logs and seeing if Lilu and AppleALC injected correctly:
Injection order: Make sure that Lilu is above AppleALC in kext order
All kexts are latest release: Especially important for Lilu plugins, as mismatched kexts can cause issues
As you can see from the above image, we have the following:
Note: layout-id | Data | 07000000 is the default layout, and alc-layout-id will override it and be
the layout AppleHDA will use
Note: Do not rename your audio controller manually, this can cause issues as AppleALC is trying to patch already. Let
AppleALC do it's work.
More examples:
Correct alc-layout-id
As you can see from the above 2, the right image is missing a lot of AppleHDAInput devices, meaning that AppleALC can't match
up your physical ports to something it can understand and output to. This means you've got some work to find the right layout ID for
your system.
This will check if the signature is valid for AppleHDA, if it's not then you're going to need to either get an original copy of AppleHDA
for your system and replace it or update macOS(kexts will be cleaned out on updates). This will only happen when you're manually
patched AppleHDA so if this is a fresh install it's highly unlikely you will have signature issues.
So to start, we'll first want to grab OpenCore off of our installer. To do this, we'll be using a neat tool from CorpNewt called MountEFI
For this example, we'll assume your USB is called Install macOS Catalina :
Once the EFI's mounted, we'll want to grab our EFI folder on there and keep in a safe place. We'll then want to eject the USB
drive's EFI as having multiple EFIs mounted can confuse macOS sometimes, best practice is to keep only 1 EFI mounted at a time
(you can eject just the EFI, the drive itself doesn't need to be removed)
Note: Installers made with GibMacOS's MakeInstall.bat on Windows will default to a Master Boot Record(MBR) partition map, this
means there is no dedicated EFI partition instead being the BOOT partition that mounts by default in macOS.
Now with this done, lets mount our macOS drive. With macOS Catalina, macOS is actually partitioned into 2 volumes: System
Partition and User Partition. This means that MountEFI may report multiple drives in it's picker but each partition will still share the
same EFI(The UEFI spec only allows for 1 EFI per drive). You can tell if it's the same drive with diskXsY (Y is just to say what
partition it is)
When you mount your main drive's EFI, you may be greeted with a folder called APPLE , this is used for updating the firmware on
real Macs but has no effect on our hardware. You can wipe everything on the EFI partition and replace it with the one found on your
USB
When transferring over your EFI, there are still boot sectors that need to be written to so your non-UEFI BIOS would be able to find
it. So don't forget to rerun the BootInstall.command on your macOS drive
Table of Contents:
Updating OpenCore
Updating Kexts
Updating macOS
Updating OpenCore
So how do I update?
1. Replace the OpenCore files with the ones you just downloaded
2. The important ones to update:
EFI/BOOT/BOOTx64.efi
EFI/OC/OpenCore.efi
EFI/OC/Drivers/OpenRuntime (Don't forget this one, OpenCore will not boot with mismatched
versions)
You can also update other drivers you have if present, these are just the ones that must be updated in order to boot
3.
correctly
Once you've made the adjustments and made sure you config is compliant with the newest release of OpenCore,
3. make sure to double check your setting with the OpenCore Guide on what to set everything to, otherwise read the
Differences.pdf if you want to get a bit more technical.
1. Boot!
Once everything's working with the dummy USB, you can mount the EFI and move it over to the hard drive's EFI
2.
partition. Remember to keep a copy of your old EFI in cases where OpenCore is acting funny down the road
Updating Kexts
Updating Kexts is a similar process to updating OpenCore, make a copy of everything and update on a dummy USB
in case there's issues
The easiest way to update your kexts is via 2 tools:
Updating macOS
So this is probably one of the most challenging parts, maintaining your system through OS updates. The main things
to keep in mind:
With OS updates, make sure everything has been updated and you have some form of recovery like
TimeMachine or an older macOS installer with a known good EFI on it
Do a bit of google-fu to see if others are having issues with the newest update
I've also provided a bit more of a detailed map of what's changed in macOS versions, see below:
macOS Catalina
10.15.0
Requires proper EC
Dual socket and most AMD CPUs need AppleMCEReporterDisabler.kext
MacPro5,1 support has been dropped
10.15.1
10.15.2
10.15.3
No change
Requires all previous fixes
10.15.4
Table of Contents:
Do note that this is only recommended for users who have already installed macOS, for users who are installing for the first time
enable AppleCpuPmCfgLock and AppleXcpmCfgLock under Kernel -> Quirks
So you've installed macOS but you're using those pesky CFG-Lock patches that we want to get rid of, well to do this is fairly
simple. You'll need the following:
VerifyMsrE2
Modified GRUB Shell
And don't forget to disable the following from your config.plist under Kernel -> Quirks :
AppleCpuPmCfgLock
AppleXcpmCfgLock
And the final part, grabbing your BIOS from the vendors' website. Now the fun part!
Boot OpenCore and select the VerifyMsrE2 option in the picker. This tool will tell you whether your BIOS supports CFG-Lock
and if it can be unlocked.
Open your firmware with UEFITool and then find CFG Lock as a Unicode string. If nothing pops up then your
1.
firmware doesn't support CFG Lock , otherwise continue on.
1. You'll find that this string is found within a Setup folder, right-click and export as Setup.bin
2. Open your setup file with ifrextract and export as a .txt file with terminal:
Open the text file and search for CFG Lock, VarStoreInfo (VarOffset/VarName): and note the offset right
3.
after it(ie: 0x5A4 )
1. Run the Modified GRUB Shell and paste the following where 0x5A4 is replaced with your value:
Do note that variable offsets are unique not just to each motherboard but even to its firmware version. Never try to
use an offset without checking.
And you're done! Now you'll have correct CPU power management
Note: Every time you reset your BIOS you will need to flip this bit again, make sure to write it down with the BIOS version so you
know which.
Wanting a more clean booting experience with macOS without all that verbose text while booting? Well you need a couple things:
Recommended Configuration
01 : Standard resolution
02 : HiDPI (generally required for FileVault to function correctly on smaller displays)
Optionally can specify resolution: WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080)
Fixing DRM
Table of Contents:
So before we can get started with fixing DRM, we need to make sure your hardware is working. The best way to check is by running
VDADecoderChecker :
If you fail at this point, there's a couple things you can check for:
Make sure the SMBIOS you're running matches with your hardware
Don't use a Mac Mini SMBIOS on a desktop for example, as Mac Minis run mobile hardware and so macOS will
expect the same
Make sure the iGPU is enabled in the BIOS and has the correct properties for your setup ( AAPL,ig-platform-id
and if needed, device-id )
You can either review the DeviceProperties section from the guide or WhateverGreen's manual
Avoid unnecessary ACPI renames, all important ones are handled in WhateverGreen
Make sure not to have any legacy graphics patches present as they've been absorbed into WhateverGreen:
IntelGraphicsFixup.kext
NvidiaGraphicsFixup.kext
Shiki.kext
Generally the best place to start is by looking through your OpenCore logs and seeing if Lilu and WhateverGreen injected correctly:
Injection order: Make sure that Lilu is above AppleALC in kext order
All kexts are latest release: Especially important for Lilu plugins, as mismatched kexts can cause issues
Note: On macOS 10.15 and newer, AppleGVA debugging is disabled by default, if you get a generic error while running
VDADecoderChecker you can enable debugging with the following:
Testing DRM
So before we get too deep, we need to go over some things, mainly the types of DRM you'll see out in the wild:
FairPlay 1.x: Software based DRM, used for supporting legacy Macs more easily
Easiest way to test this is by playing an iTunes movie: FairPlay 1.x test
FairPlay 1.x trailers will work on any configuration if WhateverGreen is properly set up - including iGPU-only
configurations. However, FairPlay 1.x movies will only play on iGPU-only configurations for around 3-5 seconds,
erroring that HDCP is unsupported afterwards.
Trailer itself does not use DRM but Amazon still checks before playing
You can open TV.app, choose TV+ -> Free Apple TV+ Premieres, then click on any episode to test without any trial
(you do need an iCloud account)
Apple TV+ also has a free trial if you want to use it
Note: Requires either an absent iGPU (Xeon) or newer AMD GPU to work (Polaris+)
If everything works on these tests, you have no need to continue! Otherwise, proceed on.
Fixing DRM
So for fixing DRM we can go down mainly 1 route: patching DRM to use either software or AMD decoding. Vit made a great little
chart for different hardware configurations:
So how do you use it? First, identify what configuration you have in the chart (AMD represents GPU, not CPU). The SMBIOS listed
(IM = iMac, MM = Mac Mini, IMP = iMac Pro, MP = Mac Pro) is what you should use if you match the hardware configuration. If you
don't match any of the configurations in the chart, you're out of luck.
Next, identify what Shiki mode you need to use. If there are two configurations for your setup, they will differ in the Shiki flags used.
Generally, you want hardware decoding over software decoding. If the mode column is blank, then you are done. Otherwise, you
should add shikigva as a property to any GPU, using DevicesProperties > Add. For example, if the mode we need to use is
shikigva=80 :
You can also use the boot argument - this is in the mode column.
Here's one example. If we have an Intel i9-9900K and an RX 560, the configuration would be "AMD+IGPU", and we should be using
an iMac or Mac Mini SMBIOS (for this specific configuration, iMac19,1). Then we see there are two options for the configuration:
one where the mode is shikigva=16 , and one with shikigva=80 . We see the difference is in "Prime Trailers" and "Prime
/Netflix". We want Netflix to work, so we'll choose the shikigva=80 option. Then inject shikigva with type number/integer
and value 80 into our iGPU or dGPU, reboot, and DRM should work.
Here's another example. This time, We have an Ryzen 3700X and an RX 480. Our configuration in this case is just "AMD", and we
should be using either an iMac Pro or Mac Pro SMBIOS. Again, there are two options: no shiki arguments, and shikigva=128 .
We prefer hardware decoding over software decoding, so we'll choose the shikigva=128 option, and again inject shikigva
into our dGPU, this time with value 128 . A reboot and DRM works.
Notes:
path/to/gfxutil -f GFX0
GFX0 : For dGPUs, if multiple installed check IORegistryExplorer for what your AMD card is called
IGPU : For iGPU
If you inject shikigva using DeviceProperties, ensure you only do so to one GPU, otherwise WhateverGreen will
use whatever it finds first and it is not guaranteed to be consistent.
IQSV stands for Intel Quick Sync Video: this only works if iGPU is present and enabled and it is set up correctly.
Special configurations (like Haswell + AMD dGPU with an iMac SMBIOS, but iGPU is disabled) are not covered in the
chart. You must do research on this yourself.
Shiki source is useful in understanding what flags do what and when they should be used, and may help with special
configurations.
So how do we fix iGPU performance? Well by loading Apple's GuC (Graphics Micro Code). The main thing to note is that firmware
loading is restricted to:
So how do we apply it? Under DeviceProperties -> Add -> PciRoot(0x0)/Pci(0x2,0x0) , add:
The best way to check is to monitor the iGPU's frequency is with either Intel Power Gadget or checking the boot logs for Apple
Scheduler references. Make sure you have the igfxfw property applied:
Fixing iServices
Table of Contents:
This page is for those having iMessage and other iServices issues, this is a very basic guide so will not go as in-depth into the
issues as some other guides. This specific guide is a translation and reinterpretation of the AppleLife Guide on fixing iService:
Apple - iMessage, FaceTime, iCloud
Note: You and you alone are responsible for your AppleID, read the guide carefully and take full responsibility if you screw up.
Dortania and other guides are not held accountable for what you do.
Download GenSMBIOS and select option 1 to download MacSerial and next option 3 to generate some new serials. What we're
looking for is a valid serial that currently has no registered purchase date.
Tip: iMacPro1,1 10 will print 10 serials, this will save you some time on generating
Now enter the serial into the Apple Check Coverage page , you will get 1 of 3 responses:
"We’re sorry, but this serial number isn’t valid. Please check your information and try again.":
This last one is what we're after, as we want something genuine but currently not in use by anyone. Now we can translate the rest
of the values into our config.plist -> PlatformInfo -> Add:
Type = SystemProductName
Serial = SystemSerialNumber
Board Serial = MLB
SmUUID = SystemUUID
Note: "We’re sorry, but this serial number isn’t valid. Please check your information and try again." works for many users as well, do
note though if you've had a bad track record with Apple/iServices you many need one that's "Purchase Date not Validated".
Otherwise there may be suspicion
Note 2: Using a "Purchase Date not Validated:" can cause issues down the line if another machine of the same serial ever gets
activated, for initial setup it can help alleviate issues with your account but in the long run an invalid serial can be a safer choice.
Fixing En0
To start, grab Hackintool ( Github link ) and head to System -> Peripherals (Info -> Misc on older versions of Hackintool)
Here under Network Interfaces (network card icon), look for en0 under BSD and check whether the device has a checkmark
under Builtin. If there is a checkmark, skip to Fixing ROM section otherwise continue reading.
Well, we'll want to reset macOS so it can build the interfaces fresh, open terminal and run the following:
1 sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
2 sudo rm /Library/Preferences/SystemConfiguration/preferences.plist
If this doesn't work, add NullEthernet.kext and ssdt-rmne.aml to your EFI and config.plist under Kernel -> Add and ACPI -> Add
respectively. The SSDT is precompiled so no extra work needed, reminder compiled files have a .aml extension and .dsl can be
seen as source code.
Now head under the PCI tab of Hackintool and export your PCI DeviceProperties, this will create a pcidevices.plist on your desktop
Now search through the pcidevices.plist and find the PCIRoot of your ethernet controller. For us, this would be
PciRoot(0x0)/Pci(0x1f,0x6)
Copy PCIRoot
Now with the PCIRoot, go into your config.plist -> DeviceProperties -> Add and apply the property of built-in with type Data
and value 01
Add to config.plist
Fixing ROM
This is a section many may have forgotten about but this is found in your config.plist under PlatformInfo -> generic -> ROM
To find your actual MAC Address/ROM value, you can find in a couple places:
BIOS
macOS: System Preferences -> Network -> Ethernet -> Advanced -> MAC Address
Windows: Settings -> Network & Internet -> Ethernet -> Ethernet -> Physical MAC Address
Some users have even gone as far as using real Apple MAC Address dumps for their config, for this guide we'll be using our real
MAC Address but note that this is another option.
When adding this to your config, c0:7e:bf:c3:af:ff should be converted to c07ebfc3afff as the Data type cannot
accept colons( : ).
Verifying NVRAM
Something that many forget about iServices is that NVRAM is crucial to getting it working correctly, the reason being is that
iMessage keys and such are stored in NVRAM. Without NVRAM, iMessage can neither see nor store keys.
So we'll need to verify NVRAM works, regardless if "it should work" as some firmwares can be more of a pain than others.
Please refer to the Emulated NVRAM section of the OpenCore Guide for both testing if you have working NVRAM and emulating it
if you dont.
This is important for those who've tried setting up iMessage but failed, to start make sure your NVRAM has been cleared. You can
enable the option in the boot picker in your config under config.plist -> Misc -> Security -> AllowNvramReset.
path/to/macserial -s
This will provide us with a full rundown of our system, verify that what is presented matches up with your work.
1 ids: identity-rsa-key-pair-signature-v1
2 ids: identity-rsa-private-key
3 ids: identity-rsa-public-key
4 ids: message-protection-key
5 ids: message-protection-public-data-registered
6 ids: personal-public-key-cache
7 iMessage Encryption Key
8 iMessage Signing Key
9 com.apple.facetime: registrationV1
10 etc ...
And a final layer of precaution is to make a new AppleID to play with, this makes sure that if you do end up blacklisting your account
that it's not your main.
Tip: Adding a payment card to the account and having a decent amount of purchases can also help. While not concrete, you can
think of an AppleID as a credit score where the better an Apple customer you are the more likely they won't have activation issues
or get an easier pass with AppleSupport
Welp mate, you've done it. You blackmailed your AppleID. The fix is simple but not pretty, you MUST call Apple. Otherwise, there
is no proceeding besides using a new account. Adding a payment card before calling can help legitimize the account so it doesn't
seem as much like a bot.
Emulated NVRAM
Table of Contents:
So this section is for those who don't have native NVRAM, the most common hardware to have incompatible native NVRAM with
macOS are X99 and some X299 series chipsets:
X99
X299
For B360, B365, H310, H370, Z390 users, make sure you have SSDT-PMC both under EFI/OC/ACPI and config.plist -> ACPI ->
Add. For more info on making and compiling SSDTs, please see Getting started with ACPI
So some may not have noticed but Clover may have installed RC scripts into macOS for proper NVRAM emulation. This is an issue
as it conflicts with OpenCore's method of emulation.
Files to delete:
/Volumes/EFI/EFI/CLOVER/drivers64UEFI/EmuVariableUefi-64.efi
/Volumes/EFI/nvram.plist
/etc/rc.clover.lib
/etc/rc.boot.d/10.save_and_rotate_boot_log.local
/etc/rc.boot.d/20.mount_ESP.local
/etc/rc.boot.d/70.disable_sleep_proxy_client.local.disabled
/etc/rc.shutdown.d/80.save_nvram_plist.local
/etc/rc.boot.d
/etc/rc.shutdown.d
To start, open the terminal and run the following one line at a time:
1 sudo -s
2 sudo nvram -c
3 sudo nvram myvar=test
4 exit
If nothing returns then your NVRAM is not working. If a line containing myvar test returns, your NVRAM is working.
Note: nvram -c requires SIP to be off, an alternative is to wipe NVRAM at the boot menu. Reminder you'll need
Misc -> Security -> AllowNvramReset -> YES
Booter:
NVRAM:
OpenRuntime.efi driver(this is needed for proper sleep, shutdown and other services to work correctly
Now grab the 'LogoutHook.command' and place it somewhere safe (e.g. within your user directory, as shown below):
Do keep in mind this requires the nvram command to support the -x flag for this to work correctly which is unavailable on
macOS 10.12 and below. If you are installing macOS 10.12 or earlier, you need to copy nvram.mojave into the same folder as
LogoutHook.command , which fixes this by invoking it instead of the system nvram command.
Something else to note is that macOS is only able to read nvram.plist but it won't be able to write to nvram.plist unless running the
shutdown process. This means running the test above won't work
Enabling X86PlatformShim
Using CPU Friend
Sandy and Ivy Bridge Power Management
Enabling X86PlatformPlugin
So before we can fine tune power manegement to our liking, we need to first make sure Apple's XCPM core is loaded. Note that this
is supported only on Haswell and newer, Sandy and Ivy Bridge should refer to the bottom of the guide: Sandy and Ivy Bridge
Power Management .
To start, grab IORegistryExplorer and look for AppleACPICPU (note if you use search, it may find entries):
XCPM Present
As you can see from the left image, we have the X86PlatformPlugin attached meaning Apple's CPU Power Management Drivers
are doing their thing. If you get something like to the right image, then there's likely an issue. Make sure to check the following:
If you're missing this, head to Getting Started With ACPI on how to make this
SSDT-PLUG is set to the first thread of your CPU, you can check by selecting the first CPU listed( CP00 for our
example) and make sure you have this in the properties:
X99 Note:
XCPM does not natively support Haswell-E and Broadwell-E, this means we need to spoof the CPU ID into a model that does
supports XCPM:
Haswell E:
Broadwell-E:
X86PlatformPlugin loaded
CPUFriend
CPUFriendFriend
The min hex freq should be what the lowest possible TDP for the CPU, on Intel's ARK site search for
TDP-down Frequency and convert this value to HEX. Note that not all CPUs support TDP-down Frequency , like the i7-
9700T vs i7 9700. In these scenarios, you'll want to do a bit more research into your CPU, specifically:
For this example we'll be using the i9 7920x which has a base clock of 2.9 Ghz but no LPM, so we'll choose 1.3 Ghz(13x100) and
work our way up/down until we find stability.
Next up is the Energy Performance Preference, EPP. This tells macOS how fast to turbo up the CPU to its full clock. 00 will tell
macOS to let the CPU go as fast as it can as quickly as it can while FF will tell macOS to take things slowly and let the CPU ramp
up over a much longer period of time. Depending on what you're doing and the cooling on your machine, you may want to set
something in the middle. Below chart can help out a bit:
EPP Speed
Once you're finished, you'll be provided with a CPUFriendDataProvider.kext and ssdt_data.aml. Which you choose is your
preference but I recommend the kext variant to avoid any headaches with data injection into Windows and Linux.
Note: Load order does not matter with the CPUFriendDataProvider as it's just a plist-only kext
With Sandy and Ivy Bridge, consumer PCs have issues connecting to Apple's XCPM. So to get around this we need to create our
own Power Management Table.
To drop the CpuPm and Cpu0Ist tables, head to ACPI -> Block:
TableLength Number 0
TableLength Number 0
Once this is done, we can now grab ssdtPRgen and run it:
Once you're done, you'll be provided with an SSDT.aml under /Users/your-name>/Library/ssdtPRGen/ssdt.dsl , you
can easily find it with the Cmd+Shift+G shortcut and pasting ~/Library/ssdtPRGen/
Remember to now add this to both EFI/OC/ACPI and your config.plist, I recommend renaming it to SSDT-PM to find it more easily
Troubleshooting
General Troubleshooting
General Troubleshooting
This section is for those having issues booting either OpenCore, macOS or having issues inside macOS. This page is divided up
into a couple sections:
Other issues
This includes troubleshooting tools used for making your USB, fixing cosmetics in OpenCore, etc
While still a work in progress, laptop users wanting to convert an existing Clover install can see the Clover to OpenCore conversion
for more info
And if your issue is not covered, please read the official OpenCore documentation: Configuration.pdf
OpenCore booting
Turn off Vaulting in your config.plist under Misc -> Security -> Vault by setting it to:
Optional
If you have already executed the sign.command you will need to restore the OpenCore.efi file as the 256 byte RSA-2048
signature has been shoved in. Can grab a new copy of OpenCore.efi here: OpenCorePkg
Note: Vault and FileVault are 2 separate things, see Security and FileVault for more details
This is likely a spelling mistake, options in OpenCore are case-sensitive so make sure you check closely, Optional is the correct
way to enter it under Misc -> Security -> Vault
Stuck on EndRandomSeed
Couple problems:
ProvideConsoleGop is likely missing as this is needed for transitioning to the next screen, this was originally part
of AptioMemoryFix but is now within OpenCore as this quirk. Can be found under UEFI -> Output
Missing kernel patches (only applies for AMD CPUs, make sure they're OpenCore patches and not Clover. Clover
uses MatchOS while OpenCore has MinKernel and Maxkernel )
IgnoreInvalidFlexRatio missing, this is needed for Broadwell and older. Not for AMD and Skylake or newer
AppleXcpmExtraMsrs may be required, this is generally meant for Pentiums, HEDT and other odd systems not
natively supported in macOS. Do not use on AMD
Another possible problem is that some users either forget or cannot disable CFG-Lock in the BIOS(specifically relating to a locked
0xE2 MSR bit for power management, obviously much safer to turn off CFG-Lock). Do note this is for Intel users only, not AMD.
When this happens, there's a couple of possible fixes:
Stuck on [EB|#LOG:EXITBS:START]
This is actually the exact same error as EndRandomSeed so all the same fixes apply:
ProvideConsoleGop is likely missing as this is needed for transitioning to the next screen, this was originally part
of AptioMemoryFix but is now within OpenCore as this quirk. Can be found under UEFI -> Output
Missing kernel patches (only applies for AMD CPUs, make sure they're OpenCore patches and not Clover. Clover
uses MatchOS while OpenCore has MinKernel and Maxkernel )
IgnoreInvalidFlexRatio missing, this is needed for Broadwell and older. Not for AMD and Skylake or newer
AppleXcpmExtraMsrs may be required, this is generally meant for Pentiums, HEDT and other odd systems not
natively supported in macOS. Do not use on AMD
Another possible problem is that some users either forget or cannot disable CFG-Lock in the BIOS(specifically relating to a locked
0xE2 MSR bit for power management, obviously much safer to turn off CFG-Lock). Do note this is for Intel users only, not AMD.
When this happens, there's a couple of possible fixes:
If this doesn't help, grab the debug versions of OpenCore.efi and BOOTx64.efi and replace them in your EFI. This will show
much more info on where your hack is actually getting stuck.
So this isn't actually an error, instead OpenCore isn't showing you all the debug info. This is right before/while the kernel is being
loaded so things we need to check for:
Intel:
CFG-Lock disabled in the BIOS or AppleCpuPmCfgLock and AppleCpuPmCfgLock enabled under Kernel -
> Quirks
AMD:
Verify you have added the correct kernel patches to your config(remember, OpenCore patches use MinKernel
Ryzen/Threadripper(17h)
Bulldozer/Jaguar(15h/16h)
If this doesn't help, grab the debug versions of OpenCore.efi and BOOTx64.efi and replace them in your EFI. This will show
much more info on where your hack is actually getting stuck.
This is due to OpenCore being unable to find any drives with the current ScanPolicy, setting to 0 will allow all boot options to be
shown
Same fix as OCB: OcScanForBootEntries failure - Not Found , OpenCore is unable to find any drives with the current
ScanPolicy, setting to 0 will allow all boot options to be shown
This is due to either incorrect BIOS settings and/or incorrect Booter values. Make sure config.plist -> Booter -> Quirks is correct and
verify your BIOS settings:
Above4GDecoding is Enabled
CSM is Disabled(Enabling Windows8.1/10 WHQL Mode can do the same on some boards)
BIOS is up-to-date(Z390 and HEDT are known for having poorly written firmwares)
Stuck on
OCS: No schema for DSDT, KernelAndKextPatch, RtVariable, SMBIOS,
SystemParameters...
This is due to either using a Clover config with OpenCore or using a configurator such as Mackie's Clover and OpenCore
configurator. You'll need to start over and make a new config or figure out all the garbage you need to remove from your config.
This is why we don't support configurators, they are known for these issues
Verify that your EFI/OC/Drivers matches up with your config.plist -> UEFI -> Drivers Note that the entries are case-sensitive.
A value is set as real when it's not supposed to be, generally being that Xcode converted HaltLevel by
accident:
<key>HaltLevel</key>
<real>2147483648</real>
<key>HaltLevel</key>
<integer>2147483648</integer>
Disable PollAppleHotKeys and enable KeySupport , then remove OpenUsbKbDxe from your config.plist -
Disable PollAppleHotKeys and enable KeySupport , then remove OpenUsbKbDxe from your config.plist -
> UEFI -> Drivers
If the above doesn't work, reverse: disable KeySupport , then add OpenUsbKbDxe to your config.plist -> UEFI -
> Drivers
This error happens when SMBIOS is one no longer supported by that version of macOS, make sure values are set in
PlatformInfo->Generic with Automatic enabled. Reminder of supported SMBIOS:
iMac13,x+
iMacPro1,1
MacPro6,1+
MacBook8,1+
MacBookAir5,x+
MacBookPro9,x+
The Length and checksum value is what we care about, so if our SSDT is actually 347 bytes then we want to change
Length to 0x0000015B (347) (the 015B is in HEX)
Best way to actually fix this is to grab a newer copy of iASL or Acidanthera's copy of maciASL and remaking the SSDT
Incorrect EFI folder structure, make sure all of your OC files are within an EFI folder located on your ESP(EFI system
partition)
Note: FwRuntimeServices has been renamed to OpenRuntime with 0.5.7 and newer
macOS booting
Well this general area is where a lot of PCI devices are first setup and configured, and is where most booting issues will happen.
Other names incude:
apfs_module_start... ,
Waiting for Root device ,
Waiting on...IOResources... ,
previous shutdown cause...
Missing EC patch:
For dekstops, make sure you have your EC SSDT both in EFI/OC/ACPI and ACPI -> Add, double check it's
enabled.
If you don't have one, grab it here: Getting started with ACPI
Laptop users will need to rename their main EC: Getting started with ACPI
IRQ conflict:
Most common on older laptops and prebuilts, run SSDTTime's FixHPET option and add the resulting SSDT-
HPET.aml and ACPI patches to your config( the SSDT will not work without the ACPI patches)
UPDATE YOUR BIOS, make sure it's on the latest. Most OEMs have very broken PCI allocation on older
firmwares, especially AMD
Make sure either Above4G is enabled in the BIOS, if no option available then add npci=0x2000 to boot args.
AMD CPU Note: Do not have both the Above4G setting enabled and npci in boot args, they will conflict
. This rule does not apply to X99
Other BIOS settings that are important: CSM disabled, Windows 8.1/10 UEFI Mode enabled\
NVRAM Failing:
Common issue HEDT and 300 series motherboards, you have a couple paths to go down:
300 Series Consumer Intel: See Getting started with ACPI on making SSDT-PMC.aml
HEDT: See Emulating NVRAM on how to stop NVRAM write, note that for install you do not need to run the
script. Just setup the config.plist
RTC Missing:
Commonly found on 300 series and X299/CasacdeLake-X refresh motherboards, caused by the RTC clock being
disabled by default. See Getting started with ACPI on creating an SSDT-AWAC.aml
Some drunk firmware writer at HP also disabled the RTC on the HP 250 g6 with no way to actually re-enable it,
for users cursed with such hardware you'll need to create a fake RTC clock for macOS to play with:
Example of what a disabled RTC with no way to enable looks like(note that there is no value to re-enable it like STAS ):
If you're hitting the 15 port limit, you can temporarily get around this with XhciPortLimit but for long term use, we
recommend making a USBmap . CorpNewt also has a guide for this: USBmap Guide
Another issue can be that certain firmware won't pass USB ownership to macOS, to fix this we can enable
UEFI -> Quriks -> ReleaseUsbOwnership in your config.plist
For 15h and 16h AMD CPUs, you may need to add the following:
XLNCUSBFix.kext
AMD StopSign-fixv5
Another possible issue is missing USB ports in your DSDT, macOS isn't great at finding hardware and needs things explicitly
defined to it for many things. This means if a USB port is not defined, macOS won't be able to find it. To fix this we use USBInjectAll
to fix booting, note that this only works on Intel USB Chipsets and should only be required on Broadwell and older systems(with
some newer AsRock boards also needing it)
For AMD users with missing ports in DSDT, you're gonna have to try all the ports in your system and pray, generally 3.1 AsMedia
ports work without issue.
Default sample config is in russian because slavs rule the Hackintosh world, check your prev-lang:kbd value under
NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 . Set to 656e2d55533a30 for American: en-US:0 and a
full list can be found in AppleKeyboardLayouts.txt
You may also need to reset NVRAM in the boot picker as well
Still didn't work? Well time for the big guns. We'll force remove that exact property and let OpenCore rebuild it:
NVRAM -> Block -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 -> Item 0 then set it Type String and Value
prev-lang:kbd
date 0901000019
This is right before the GPU is properly initialized, verify the following:
-igfxmlr boot argument. This can also manifest as a "Divide by Zero" error.
Commonly due to systems running AWAC clocks, pleas see the Getting started with ACPI section
Generally seen as an issue surrounding the prelinked kernel, specifically that macOS is having a hard time interpreting the ones we
injected. Verify that your kexts are in the correct order(master then plugins, Lilu always being first) and that kexts with executables
have them and plist only kexts don't.
With macOS catalina, dual socket support is broken, and a fun fact about AMD firmware is that some boards will actually report
multiple socketed CPUs. To fix this, add AppleMCEReporterDisabler to both EFI/OC/Kexts and config.plist -> Kernel -> Add
This is likely due to faulty or outright missing NullCPUPowerManagement, the one hosted on AMD OSX's Vanilla Guide is
corrupted. Go yell at Shannee to fix it. To fix the issue, remove NullCPUPowerManagement from Kernel -> Add and
EFI/OC/Kexts then enable DummyPowerManagement under Kernel -> Quirks
For Skylake-X, many firmwares including Asus and EVGA won't write to all cores. So we'll need to reset the TSC on cold boot and
wake with TSCAdjustReset . Compiled version can be found here: TSCAdjustReset.kext . Note that you must open up the kext
(ShowPackageContents in finder, Contents -> Info.plist ) and change the Info.plist ->
IOKitPersonalities -> IOPropertyMatch -> IOCPUNumber to the number of CPU threads you have starting from 0
(i9 7980xe 18 core would be 35 as it has 36 threads total)
VoodooI2C Troubleshooting
Check the order that your kexts load - make they match what is shown under Gathering Files :
Make sure you have SSDT-GPIO in EFI/OC/ACPI and in your config.plist under ACPI -> Add in your config.plist. If you are still
having issues, reference the Getting Started With ACPI GPIO page .
So this is due to some issue around the Booter -> Quirks you set, main things to check for:
SetupVirtualMap
required for firmwares that need virtual memory address to be corrected, this is commonly found on laptops and
Gigabyte systems
Note that Icelake's memory protections break this quirks so avoid it
RebuildAppleMemoryMap
Makes sure the memory map is compatible with macOS, some OEMs like Lenovo do not like this quirk so disable
it
This is due to either a missing SMC emulator or broken one, make sure of the following:
Note by default Disk Utility only shows partitions, press Cmd/Win+2 to show all devices(Alternatively you can
press the view button)
Default
macOS post-install
Find PCI path for your NIC with gfxutil (ie: ethernet , GBE1, ). Then via DeviceProperties in your config.plist,
apply the property of built-in with the value of 01 and type Data . Hackintool can also grab the PCIRooth
path if you're having issues with gfxutil. Recommended method
NullEthernet.kext + SSDT-RMNE . Only recommended when first solution doesn't work
If these fixes do not work, see the Fixing iServices page for more in-depth guide.
No on-board audio
Refer to Fixing Audio with AppleALC section
Count Number 1
Limit Number 0
Find Data
Replace Data c3
Note: This patch no longer works with macOS Catalina 10.15.4, you'll need to use RTCMemoryFixup and exclude ranges. See here
for more info
The following boot-arg should handle 99% of cases(pair this with RTCMemoryFixup):
rtcfx_exclude=00-FF
If this works, slowly shorten the exculded area until you find the part macOS is getting fussy on
DRM Broken
See Fixing DRM page
Add MacProMemoryNotificationDisabler kext to EFI/OC/Kexts and Kernel -> Add . Note that this kext has an odd quirk here it
requires WhateverGreen to function correctly.
So with AMD, whenever Apple calls CPU specific functions the app will either not work or outright crash. Here are some apps and
their "fixes":
Virtual Machine running off of AppleHV's framework will not work(ie: Parallels 15, Vmware)
Docker broken
Docker toolbox is the only solution as it's based off of VirtualBox, many features are unavailable with this version
There's an Intel specific check in the installer, app itself is likely fine
In terminal:
Sleep transition timed out after 180 seconds while calling power state change callbacks. Suspected
bundle: com.apple.iokit.IOUSBHostFamily.
You can double check which controller is XHC0 via IOReg and checking the Vendor ID(1022 for AMD chipset). The fix for this sleep
issue is either:
Avoid the chipset USB all together(ideally set _STA = 0x0 to disable the controller outright with an SSDT)
Correct the USBX power properties to what the controller expects
Other issues
This is usually due to an outdated version of Python, try either updating Python or add iasl to the scripts folder for SSDTTime:
macOS link
Windows link
Linux link
Outdated Bootcamp drivers(generally ver 6.0 will come with brigadier, BootCamp Utility in macOS provides newer
version like ver 6.1). CorpNewt has also forked brigadier fixing these issues as well: CorpNewt's brigadier
Follow Hiding Verbose for correct setup, set UIScale to 02 for HiDPI
Users also have noticed that setting ConsoleMode to Max will sometimes fail, leaving it empty can help
For iStat, you'll have to wait for an update. For AMD users, you can use either:
SMCAMDProcessor
Still in early beta but great work has been done, note it's been mainly tested on Ryzen
FakeSMC3_with_plugins
Make sure Misc -> Security -> ScanPolicy is set to 0 to show all drives
Enable Misc -> Boot -> Hideself is enabled when Windows bootloader is located on the same drive
"You can't change the startup disk to the selected disk" error
This is commonly caused by irregular partition setup of the Windows drive, specifically that the EFI is not the first partition. To fix
this, we need to enable this quirk:
This is due to alignment issues, make sure SyncRuntimePermissions is enabled on firmwares supporting MATs. Check your
logs whether your firmware supports Memory Attribute Tables(generally seen on 2018 firmwares and newer)
0xc000000d
This is due to OpenCore getting confused when trying to boot boot Windows and accidentally thinking it's booting OpenCore. This
can be avoided by either move Windows to it's own drive or adding a custom drive path under BlessOverride. See Configuration.pdf
for more details.
iASL Warning: There were 19 external control methods found during disassembly, but only 0 were resolved
(19 unresolved)
This happens when one ACPI table requires the rest for proper referencing, it does not accept the creation of DSDTs as we're only
using it for creating a select few SSDTs. For those who are worried, you can run the following:
OpenCore Debugging
Needing to figure out why you're getting issues or stalling? Well, you've come to the right place.
To start, make sure you're using either the DEBUG or NOOPT versions of OpenCore. This will provide much more info than the
RELEASE version.
To calculate the target, we can use a HEX calculator and then convert it to decimal. For us we want to have our values on stored
onto a .txt file for later viewing:
Note this can heavily increase boot times on firmwares with poor GOP implementations
So we can set Misc -> Debug -> Target -> 83 DisplayLevel Used for setting what is logged
Just like with Target , we use a HEX calculator then convert to decimal:
0x80000042 Converted to decimal Misc -> Debug -> DisplayLevel -> 2147483714
DisableWatchdog: YES Disables the UEFI watchdog, used for when OpenCore is stalling on something non-critical.
Disabling logging
Table of Contents:
OpenCore Booting
boot.efi Handoff
XNU/Kernel Handoff
macOS Handoff
So with troubleshooting a hackintosh, it can be a bit difficult to really understand where you're getting stuck as the exact keyword
you're trying to search for may not match anything on google. While this page won't solve all your issues, it should at least help
better understand where in the macOS boot-process you're getting stuck and hopefully give some ideas as to why you're stuck.
OpenCore Booting
This section will be brief, as OpenCore boot issues are fairly rare and usually simple user error:
If you're having issues booting at this point, main things to check for:
boot.efi Handoff
This is where macOS's bootloader(boot.efi) comes onto the scene, specifically what it does is prep the environment for the kernel to
load and where Opencore injects kexts. If you're getting stuck at this point, there's likely an issue with loading the kernel, main
culprits:
Stuck on [EB|#LOG:EXITBS:START]
Couldn't allocate runtime area errors
Note: In macOS 10.15.4, Apple changed the boot.efi debugging protocol, so things will look quite a bit different from before but all
the same rules still apply
XNU/Kernel Handoff
Now that boot.efi has setup everything for us, we now get to watch the kernel do it's thing. This section is commonly referred as the
Rooting phase :
This section is where SMBIOS data is verified, ACPI tables/Kexts are loaded and macOS tries to get everything in order. Failures
here are generally a result of:
Corrupted SSDTs
Corrupted kexts(or incorrectly setup under your config.plist -> Kernel -> Add)
Messed up memory map
Now here we have [ PCI configurations begin ] , this section can be seen as a hardware test for our systems, kexts and
SSDTs we injected, and where IOKit starts hardware probs to find devices to attach to.
Embedded Controllers
Storage(NVMe, SATA, etc)
PCI/e
NVRAM
RTC
PS2 and I2C
For more specific info on how to get around this area, see here:
Stuck on RTC... , PCI Configuration Begins , Previous Shutdown... , HPET , HID: Legacy...
This is where the 15 port limit and USB mapping comes into play, and where the infamous "Waiting for Root Device" errors pops in,
main things to check for:
This is where our FakeSMC/VirtualSMC come into the scene and do their magic, DSMOS itself is a kext that verifies if your system
has an SMC and will request a key. If this key is missing, then DSMOS will not decrypt the rest of the binaries and you'll get stuck
here. You may also get stuck at AppleACPICPU which is just the same error.
This is where Apple's audio driver comes in, and where AppleALC shines. Generally rare to see issues here but if you do, try
disabling AppleALC and any other audio related kexts.
And here we get to the GPU driver initialization, and where WhateverGreen also does its magic. Generally errors here are due to
the GPU and not WhateverGreen itself, main culprits:
macOS Handoff
And you've finally got past all that verbose! If you're getting stuck at the Apple logo after all that verbose, then there's a couple
things to check for:
Extras
Legacy Install
Wanna try OpenCore but can't boot UEFI based sources? Well don't fret, there's hope for you! OpenCore supports DuetPkg which
emulates a UEFI environment for legacy systems.
BootInstall.command
Install source(MacOS Journaled + GUID, size of USb depends on the version of macOS. 16GB recommended for
catalina)
BootInstall Location
Within your OpenCore build folder, navigate to Utilities/BootInstall . Here you'll find a file called
BootInstall.command . What this does is install DuetPkg to your desired drive.
Now you'll want to run BootInstall.command , do note that you may need sudo for this to work correctly on newer versions
of macOS
sudo Utilities/BootInstall/BootInstall.command
This will give you a list of available disks, choose yours and you will be prompted to write a new MBR. Choose yes [y] and you'll
be finished.
Finished Installer
Base EFI
This will provide you with an EFI partition with a boot file, this is where we'll add our OpenCore EFI.
Note: The firmware drivers used for legacy users differ slightly:
OpenUsbKbDxe.efi
HfsPlusLegacy.efi
Needed for seeing Hfs drives like installers, the legacy variant is required for SandyBridge and older due to
missing RDRAND instruction support
So to get started, we're gonna need 0.5.7 as this build version has the GUI included with the rest of the files. If you're on an older
version, I recommend updating: Updating OpenCore
Binary Resources
OpenCanopy.efi
Once you have both of these, we'll next want to add it to our EFI partition:
Note the 0.5.7 copy puts into the wrong spot under just EFI, this will cause an image load error and halt
OpenCore
This enables .VolumeIcon.icns reading off the drive, this is how macOS installer icons work
0x0008: This is another value which allows for alternative icons, such as the legacy GUI found on legacy
Macs. This can be combined with 1 for both legacy GUI and custom drive icons(PickerAttributes: 9 )
Other settings for PickerAttributes can be found in the Configuration.pdf
Once all this is saved, you can reboot and be greeted with a true Mac-like GUI:
Credit to Vit9696
Add the Resources folder to EFI/OC, just like we did with the OpenCore GUI section
For those running out of space, OCEFIAudio_VoiceOver_Boot.wav is all that's required for the Boot-Chime
Settings up NVRAM:
AudioCodec:
Check IORegistryExplorer -> HDEF -> AppleHDAController -> IOHDACodecDevice and see the
IOHDACodecAddress property
ex: 0x0
Can also check via termina(Note if multiple show up, use the vendor ID to find the right device)l:
Audio Device:
/path/to/gfxutil -f HDEF
ex: PciRoot(0x0)/Pci(0x1f,0x3)
AudioOut:
The specific output of your Audio controller, easiest way to find the right one is to go through each one(from 0 to
N - 1)
ex: 2
You can find all the ones for your codec in the OpenCore debug logs:
AudioSupport:
MinimumVolume:
PlayChime:
VolumeAmplifier:
OpenCore hasn't forgotten about you! With the AudioDxe setup, you can enable both picker audio and FileVault
voiceover with these 2 settings:
UEFI -> Protocols -> AppleAudio -> True to enable FileVault voice over
See Security and FileVault on how to setup the rest for proper FileVault support
iGPU Patching
GPU Patching
This little section is for those who need more than what is provided by simple framebuffer patching and WhateverGreen's auto-
patches:
This section is for users running "true" 300 series motherboards( B360, B365, H310, H370, Z390) who are having issues setting up
their iGPU as a display out.
So to get started I'll assume you've already done basic framebuffer patches in your config from the Coffeelake portion of the guide ,
it should look something like this:
Now that we're prepped, we can start looking into busID patching. Checking the dumps on Insanelymac shows us this for the
1 ID: 3E9B0007, STOLEN: 57 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x00801302
2 TOTAL STOLEN: 58 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 172 MB, MAX OVERALL: 173 MB
(181940224 bytes)
3 GPU Name: Intel UHD Graphics 630
4 Model Name(s):
5 Camelia: Disabled
6 Mobile: 0, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
7 [1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x000003C7 - DP
8 [2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x000003C7 - DP
9 [3] busId: 0x06, pipe: 8, type: 0x00000400, flags: 0x000003C7 - DP
10 01050900 00040000 C7030000
11 02040A00 00040000 C7030000
12 03060800 00040000 C7030000
Looking at all this can be quite overwhelming, but we'll break it down to be a bit simpler. For use we care about this:
These are your iGPUs ports by default, lets go through port 1 and see what each section is used for: The first port:
Port: 01
busId: 0x05
Things to note:
You cannot use the same busId twice, having 2 in use will create conflicts
Pipe number and flags don't need to changed
00 04 00 00 - DisplayPort
00 08 00 00 - HDMI
04 00 00 00 - Digital DVI
02 00 00 00 - LVDS (for laptops)
01 00 00 00 - Dummy port
Walk through busids for Port 1 if the previous didn't work(yup you gotta do a shit ton of reboots). The maximum busid
4.
on most platforms is 0x06
If you still get no output, set port 1's busid to 00 and start going through busids for port 2 and so on
framebuffer-con0-enable = 01000000
framebuffer-con1-enable = 01000000
framebuffer-con2-enable = 01000000
framebuffer-con0-alldata = port 1
framebuffer-con1-alldata = port 2
framebuffer-con2-alldata = port 3
So when adding the patches, port 1 will actually become con0 as the ports start at 0. These are also all data types when entering
your values.
Table of Contents:
So what is KASLR?
And who is this info for?
So how do I fix this?
Prepping the BIOS
Test boot
Finding the Slide value
Using DevirtualiseMmio
This section is for users who wish to understand and fix "Couldn't allocate runtime area" errors. This is most common with either
Z390, X99 and X299. This section will also support Clover as the info is also useful for them.
So what is KASLR
Well KASLR stands for Kernel address space layout randomization, what it's used for is security purposes. Specifically, this makes
it much harder for attackers to figure out where the important objects are in memory as it's always random both between machines
and between boots. M ore in-depth explainer on KASLR
Where this becomes an issue is when you introduce devices with either small memory maps or just way too many devices present.
There likely is space for the kernel to operate but there's also free space where the kernel won't fit entirely. This is where
slide=xxx fits in. Instead of letting macOS choose a random area to operate in each boot, we'll constrain it to somewhere that
we know will work.
Well as I mentioned earlier, this is for users who don't have enough space for the kernel or moves to a place that is too small. You'll
generally experience an error similar to this when booting:
panic(cpu 6 caller 0xffffff801fc057ba): a freed zone element has been modified in zone kalloc.4096:
expected 0x3f00116dbe8a46f6 but found 0x3f00116d00000000
The best part about these errors is that they can be random, also the reason why power cycling your PC 20 times also can fix the
issue but only temporarily.
Fun Fact: It takes around 31 ms to find an area to operate in, manually setting a slide value can on average can reduce boot times
by 0.207%!!!
The real fix to this is quite simple actually, the process is both the same for Clover and OpenCore users. What you'll need:
Clover users:
Clover Shell(most users already have this included, usually called shell64.efi or some variation)
OcQuirks (Don't mix Aptio fixes together or use OsxAptioFixDrvX, AptioMemoryFix, only OcQuirks is supported in
this guide)
OpenCore users:
OpenRuntime
OpenShell (Don't forget to enable this under Root -> Misc -> Tools )
And we'll also need to configure our config.plist -> Booter(for OpenCore) or OcQuirks.plist(for Clover):
AvoidRuntimeDefrag: YES
Fixes UEFI runtime services like date, time, NVRAM, power control, etc
DevirtualiseMmio: YES
Reduces Stolen Memory Footprint, expands options for slide=N values and very helpful with fixing Memory
Allocation issues on Z390.
EnableSafeModeSlide: YES
ProtectUefiServices: NO
Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, 300 series and newer
systems like Ice Lake and Comet Lake
ProvideCustomSlide: YES
This makes sure the kernel will only choose good regions and avoid those that may result inboot failures. It's still
random but omits those bad reions in its randomization
RebuildAppleMemoryMap: YES
Generates Memory Map compatible with macOS, can break on some laptop OEM firmwares so if you receive
early boot failures disable this, this makes sure our memory map will fit to what the kernel expects
The reason we need to reset the memory map is we want it to be more deterministic, what I mean by this is that there will be less
variation on each boot so we have fewer edge cases(Memory Maps are not always consistent on boots). To prep:
Update BIOS(extremely important as early BIOS's shipped are known to have memory map issues, especially with
Z390)
Clear CMOS
Enable much needed BIOS settings:
Above4GDecoding : This allows devices to use memory regions above 4GB meaning macOS will have more
room to fit, can be problematic on some X99, X299 so recommended to test with and without.
Boot Options -> Windows8.1/10 mode : This will make sure no old legacy garbage is loaded. Fun fact,
other OS is only designed for booting older versions of Windows and not for other OS.
Disable as many unneeded devices in the BIOS(this means there is less variation in the map on each boot, so fewer
chances of boot failure). Common settings:
CSM : For legacy support, adds a bunch of garbage we don't want. This also can break the shell so you can't
boot into it.
Intel SGX : Software Guard Extensions, takes up a lot of space and does nothing in macOS.
Parallel Port : macOS can't even see parallel.
Serial Port : I'd like to know how many of you are debugging the kernel...
iGPU : Not ideal but some systems have such bloated maps that the iGPU just can't fit.
Thunderbolt : Many hacks don't have thunderbolt working, boards that don't have thunderbolt but have this
option just waste more space.
LED lighting : Sorry mate, time to go.
Legacy USB : More Legacy Crap.
Test boot
With our adjusted EFI, config.plist and BIOS settings, it's time we try out our new setup. If you still have issues, well it looks like we'll
need to do a deep dive and calculate our slide value
Now what you'll want to do is open the EFI shell in your boot manager of choice and run memmap . This will give you a list of all
pages and their sizes. This is where the fun begins.
Now you may be wondering how the hell we convert this to a slide value, well it's quite simple. What we're interested in is the
largest available value within the Start column. In this example we see that 000000006B626000 is our largest, do note that
these are in HEX so if there are multiple values close to each other you may need to convert them to decimal. To the calculate slide
value(macOS's built-in calculator has a programming function by pressing +3):
000000006B626000 = 0x6B626000 ( 0x6B626000 - 0x100000 )/ 0x200000 = 0x35A And to verify that this is correct:
Whenever the returned value is not the original( 0x6B500000 vs 0x6B626000 ), just add +1 to your final slide value. This is due
to rounding. So for example 0x35A converted to decimal becomes 858 and then +1 will give you slide=859 .
That is correct, this is caused by memory maps that include Above4GDecoding sectors which cannot be used. So you will need
to keep going down the list until you find a small enough value(for us that would be 0000000000100000 ).
And just to make it a bit clearer on the formula: (HEX - 0x100000 )/ 0x200000 = Slide Value in HEX
0x100000 + (Slide Value in HEX * 0x200000 ) = Your original HEX value(if not then add +1 to your slide value)
Now navigate into your config.plist and add your slide value with the rest of your boot arguments(for us it would be slide=0
when using 0x100000 ). If this value still gives you errors then you may proceed to the second-largest Start value and so on.
Sometimes you may find that when you calculate slide that you receive super small vales like slide=-0.379150390625 , when
this happens round this to slide=0 .
And for users who are having issues finding their slide value can also type $slide [insert largest #Pages value] in the
#Sandbox channel on the r/Hackintosh Discord
Well fret not, for there is a simple solution. After running memmap in the shell, run:
This will add a memmap.txt file to the root of your EFI, you can then proceed to drop it into the r/Hackintosh discord in the
#Sandbox channel and type $slide [insert a link to memmap.txt]
Using DevirtualiseMmio
DevirtualiseMmio is quite an interesting quirk, specifically in that it gets around a huge hurdle with many PCI device systems like
some Z390 boards and virtually all HEDT boards like X99 and X299. How it does this is it takes MMIO regions and removes runtime
attributes allowing them to be used as space for the kernel to sit comfortably, pair this with ProvideCustomSlide quirk means
we can keep the security feature of slide while also getting a bootable machine.
For extremely problematic systems like Threadripper TRX40 19H, we need to find specific regions that aren't required for proper
operation. This is where MmioWhitelist comes into play. Note that whitelisting isn't required for most systems
If you run the debug version of OpenCore with DevirtualiseMmio, you'll notice this in your logs:
So we have 6 regions we need to go through and see which are bad, best idea is to block all MMIO sections except one and try
each region to get a list of good regions.
Now lets take the above example and create our own MmioWhitelist, we'll need to first convert the address from hexadecimal to
decimal:
MMIO devirt 0x60000000 -> 1610612736 MMIO devirt 0xFE000000 -> 4261412864 MMIO devirt 0xFEC00000 -> 4273995776
MMIO devirt 0xFED00000 -> 4275044352 MMIO devirt 0xFEE00000 -> 4276092928 MMIO devirt 0xFF000000 -> 4278190080
Table of Contents:
Boot Flag
DeviceProperties Method
SSDT Method
Fixing Windows
So you need to hide your unsupported GPU? Well with OpenCore things are slightly different, specifically that we need to specify to
which exact device we want to spoof. There are 3 ways we can do this:
Boot Flag
DeviceProperties
SSDT
CSM must be off in the BIOS for the spoofing to work correctly, especially on AMD CPU based systems
Boot Flag
By far the simplest way, all you need to do is add the following boot-arg: -wegnoegpu
Do note that this will disable all GPUs excluding the iGPU
DeviceProperties Method
Here is quite simple, find the PCI route with gfxutil and then create a new DeviceProperties section with your spoof:
path/to/gfxutil -f GFX0
DevicePath = PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
With this, navigate towards Root -> DeviceProperties -> Add and add your PCI route with the following properties:
SSDT Method
There are many ways to find the path but generally, the easiest way is to get into Device Manager under windows and find the PCI
path.
12 })
13 }
14
15 Return (Package (0x0A)
16 {
17 "name",
18 Buffer (0x09)
19 {
20 "#display"
21 },
22
23 "IOName",
24 "#display",
25 "class-code",
26 Buffer (0x04)
27 {
28 0xFF, 0xFF, 0xFF, 0xFF
29 },
30
31 "vendor-id",
32 Buffer (0x04)
33 {
34 0xFF, 0xFF, 0x00, 0x00
35 },
36
37 "device-id",
38 Buffer (0x04)
39 {
40 0xFF, 0xFF, 0x00, 0x00
41 }
42 })
43 }
44 }
A copy of this SSDT can be found here: Spoof-SSDT.dsl You will need MaciASL to compile this, reminder that .aml is assembled
and .dsl is source code. You can compile with MaciASL by running File -> Save As -> ACPI Machine Language.
Source: CorpNewt
Fixing Windows
So something that many users are annoyed about is the fact that you need to switch between GPU outputs. Well a neat little trick
on Windows is that you can reroute your display options to a specific GPU:
Credit
No good guide is made by one man, here's credit to those who've helped out:
vit9696
CorpNewt
Heavily inspiring this guide(if not a rip off) and helping overal with questions and advice
Spoof SSDT source
Midi
AlGrey#9303
NoOne/IOIIIO
DhinakG
And to the rest who've helped out as well, thank you! Developers of OpenCore:
al3xtjames
Andrey1970AppleLife
Download-Fritz
Goldfish64
PMHeart
savvamitrofanov
vit9696
And for those who have recommendations or issues with this guide, you can find the GitHub repo for this site here . Sources:
OpenCore Documentation
KASLR slide:
vit9696's Explainer
Apianti's explainer
KASLR Explainer
More KASLR Explainer
Cleaning RC scripts:
ACPI Dumping:
acpica
iServices Guide:
WhateverGreen's manual
WhateverGreen's DRM chart
DRM Testing
rEFInd Guide:
rEFInd Manual