You are on page 1of 437

OpenCore Vanilla Desktop guide

Table of Contents

OpenCore Desktop Guide .................................................................................................................................................. 3


Creating the USB ................................................................................................................................................................. 5
macOS install ................................................................................................................................................................... 6
Windows install .............................................................................................................................................................. 14
Linux install .................................................................................................................................................................... 22

Adding The Base OpenCore Files ................................................................................................................................... 32


Gathering files ................................................................................................................................................................... 35
Getting started with ACPI ................................................................................................................................................. 42
Intel Config.plist ................................................................................................................................................................ 43
Ivy Bridge ....................................................................................................................................................................... 43
Haswell .......................................................................................................................................................................... 71
Skylake .......................................................................................................................................................................... 99
Kaby Lake .................................................................................................................................................................... 126
Coffee Lake ................................................................................................................................................................. 152

Intel HEDT Config.plist ................................................................................................................................................... 179


Haswell-E ..................................................................................................................................................................... 179
Broadwell-E ................................................................................................................................................................. 205
Skylake-X ..................................................................................................................................................................... 230

AMD Config.plist ............................................................................................................................................................. 255


Bulldozer/Jaguar .......................................................................................................................................................... 255
Zen ............................................................................................................................................................................... 282

Post Install ....................................................................................................................................................................... 309


Post-Install ................................................................................................................................................................... 309
Security and FileVault ............................................................................................................................................ 311
Fixing Audio ........................................................................................................................................................... 317
Booting without USB .............................................................................................................................................. 325
Updating OpenCore, kexts and macOS ................................................................................................................. 328
Fixing CFG Lock .................................................................................................................................................... 334
Fixing Resolution and Verbose .............................................................................................................................. 337
Fixing DRM ............................................................................................................................................................ 338
Fixing iServices ...................................................................................................................................................... 347
Emulated NVRAM .................................................................................................................................................. 359
Fixing Power Management .................................................................................................................................... 363

Troubleshooting .............................................................................................................................................................. 371


General Troubleshooting ............................................................................................................................................. 371
OpenCore Debugging .................................................................................................................................................. 398
macOS Boot Process .................................................................................................................................................. 400

Extras ............................................................................................................................................................................... 408


Legacy Install ............................................................................................................................................................... 408
Add GUI and Bootchime .............................................................................................................................................. 413
OpenCore Vanilla Desktop guide

iGPU Patching ............................................................................................................................................................. 420


Fixing KASLR slide values ........................................................................................................................................... 424
Disabling unsupported GPUs ...................................................................................................................................... 431
Credit ........................................................................................................................................................................... 435

2 of 436
OpenCore Vanilla Desktop guide

OpenCore Desktop Guide

Supported version: 0.5.7

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 Desktop Guide 3 of 436


OpenCore Vanilla Desktop guide

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

Recommended BIOS settings

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.

AMD CPU users don't need to worry about.

Enable:

VT-X
Above 4G decoding
Hyper-Threading
Execute Disable Bit
EHCI/XHCI Hand-off
OS type: Windows 8.1/10 UEFI Mode

OpenCore Desktop Guide 4 of 436


OpenCore Vanilla Desktop guide

Creating the USB

Creating the USB

Supported version: 0.5.7

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

Making the installer

Depending on which OS you're on, see your specific section on making the USB:

macOS users

For Sierra and older, see Legacy macOS install

Windows users
Linux users

Creating the USB 5 of 436


OpenCore Vanilla Desktop guide

macOS install

Supported version: 0.5.7

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.

Note for legacy users

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

Now lets grab GibMacOS and run the gibMacOS.command :

macOS install 6 of 436


OpenCore Vanilla Desktop guide

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:

macOS install 7 of 436


OpenCore Vanilla Desktop guide

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.

Once finished, we'll next want to run the BuildmacOSInstallApp.command :

macOS install 8 of 436


OpenCore Vanilla Desktop guide

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.

macOS install 9 of 436


OpenCore Vanilla Desktop guide

Setting up the installer

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.

macOS install 10 of 436


OpenCore Vanilla Desktop guide

Formatting the USB

Next run the createinstallmedia command provided by Apple , note that the command is made for USB's formatted with the
name MyVolume :

sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes


/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

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:

macOS install 11 of 436


OpenCore Vanilla Desktop guide

MountEFI

You'll notice that once we open the EFI partition, it's empty. This is where the fun begins.

macOS install 12 of 436


OpenCore Vanilla Desktop guide

Empty EFI partition

Now with all this done, head to Setting up the EFI to finish up your work

macOS install 13 of 436


OpenCore Vanilla Desktop guide

Windows install

Supported version: 0.5.7

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.

To start you'll need the following:

4GB USB Stick


GibMacOS

Downloading macOS

To start, open gibMacOS.bat as Admin and select Toggle Recovery-Only :

Windows install 14 of 436


OpenCore Vanilla Desktop guide

Now search through for your desired version of macOS, for this example we'll choose option 5 for macOS Catalina:

Windows install 15 of 436


OpenCore Vanilla Desktop guide

This will download the RecoveryHDMetaDmg.pkg to


\gibmacos-master\macOS Downloads\publicrelease\xxx-xxxxx - 10.x.x macOS xxx

Windows install 16 of 436


OpenCore Vanilla Desktop guide

Making the installer

Next open makeinstall.bat as Admin and select your drive with option O for OpenCore( ex: 1O).

Windows install 17 of 436


OpenCore Vanilla Desktop guide

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:

Windows install 18 of 436


OpenCore Vanilla Desktop guide

Windows install 19 of 436


OpenCore Vanilla Desktop guide

makeinstall will finish up by installing OpenCore to your USB's EFI System Partition, you can find this partition labeled as BOOT :

Windows install 20 of 436


OpenCore Vanilla Desktop guide

Now with all this done, head to Setting up the EFI to finish up your work

Windows install 21 of 436


OpenCore Vanilla Desktop guide

Linux install

Supported version: 0.5.7

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.

To start you'll need the following:

4GB USB Stick


GibMacOS

Downloading macOS

Now to start, run gibmacOS.py in terminal with Toggle Recovery-Only :

python gibMacOS.command -r

Now search through for your desired version of macOS, for this example we'll choose option 5 for macOS Catalina:

Linux install 22 of 436


OpenCore Vanilla Desktop guide

Linux install 23 of 436


OpenCore Vanilla Desktop guide

This will download the RecoveryHDMetaDmg.pkg to

\gibmacos-master\macOS Downloads\publicrelease\xxx-xxxxx - 10.x.x macOS xxx

Making the installer

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:

1. run lsblk and determine your USB device block

2. run sudo gdisk /dev/<your USB block>

Linux install 24 of 436


OpenCore Vanilla Desktop guide

1. if you're asked what partition table to use, select GPT.

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)

Linux install 25 of 436


OpenCore Vanilla Desktop guide

1. confirm with y

4. send n

1. partition number : keep blank for default

2. first sector : keep blank for default

3. last sector : keep blank for whole disk

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.

6. Close gdisk by sending q (normally it should quit on its own)

3. Use lsblk to determine your partition's identifiers


run sudo mkfs.vfat -F 32 -n "OPENCORE" /dev/<your USB partition block> to format your USB to
4.
FAT32 and 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

1. download p7zip-full (depending on your distro tools)

Linux install 26 of 436


1. OpenCore Vanilla Desktop guide

for ubuntu/ubuntu-based run sudo apt install p7zip-full


for arch/arch-based run sudo pacman -S p7zip
for the rest of you, you should know
for all distros: make sure you're using bash for 7zip to work.

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.

Method 2 (in case 1 didn't work)


In terminal:

1. run lsblk and determine your USB device block

2. run sudo gdisk /dev/<your USB block>

Linux install 27 of 436


OpenCore Vanilla Desktop guide

1. if you're asked what partition table to use, select GPT.

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

Linux install 28 of 436


OpenCore Vanilla Desktop guide

4. send n

1. partition number: keep blank for default


2. first sector: keep blank for default
3. last sector: +200M to create a 200MB partition that will be named later on OPENCORE

4. Hex code or GUID: 0700 for Microsoft basic data partition type

5. send n

1. partition number: keep blank for default


2. first sector: keep blank for default
3. last sector: keep black for default (or you can make it +3G if you want to partition further the rest of the USB)

4. Hex code or GUID: af00 for Apple HFS/HFS+ partition type

6. send w

Linux install 29 of 436


OpenCore Vanilla Desktop guide

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.

7. Close gdisk by sending q (normally it should quit on its own)

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

1. download p7zip-full (depending on your distro tools)

for ubuntu/ubuntu-based run sudo apt install p7zip-full


for arch/arch-based run sudo pacman -S p7zip
for the rest of you, you should know

Linux install 30 of 436


OpenCore Vanilla Desktop guide

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

Linux install 31 of 436


OpenCore Vanilla Desktop guide

Adding The Base OpenCore Files

Supported version: 0.5.7

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):

base EFI folder

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:

Remove from Drivers:

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

Adding The Base OpenCore Files 32 of 436


OpenCore Vanilla Desktop guide

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

Remove everything from Tools:

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):

Adding The Base OpenCore Files 33 of 436


OpenCore Vanilla Desktop guide

Populated EFI folder

Reminder:

SSDTs and custom DSDTs( .aml ) go in ACPI folder


Kexts( .kext ) go in Kexts folder
Firmware drivers( .efi ) go in the Drivers folder

Now head to Gathering Files to get the needed kexts and firmware drivers

Adding The Base OpenCore Files 34 of 436


OpenCore Vanilla Desktop guide

Gathering files

Gathering files

Supported version: 0.5.7

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.

What's the best way to figure out if my hardware is supported?

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

Needed for seeing APFS volumes(ie. macOS)

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.

For legacy users:

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

Gathering files 35 of 436


OpenCore Vanilla Desktop guide

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

Used for measuring battery readouts on laptops, desktops can ignore


Do not use until battery has been properly patched, can cause issues otherwise

Gathering files 36 of 436


OpenCore Vanilla Desktop guide

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

Required for Atheros and Killer NICs

RealtekRTL8111

For Realtek's Gigabit Ethernet

LucyRTL8125Ethernet

For Realtek's 2.5Gb Ethernet

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

Gathering files 37 of 436


OpenCore Vanilla Desktop guide

Needed for non-native USB controllers


AMD CPU based systems don't need this
Common chipsets needing this:

H370
B360
H310
Z390(Not needed on Mojave and newer)
X79
X99
AsRock boards(On Intel motherboards specifically, basically all of their boards)

WiFi and Bluetooth:

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

BrcmPatchRAM3 for 10.14+ (must be paired with BrcmBluetoothInjector)


BrcmPatchRAM2 for 10.11-10.14
BrcmPatchRAM for 10.10 or older

The order in Kernel -> Add should be:

1. BrcmBluetoothInjector
2. BrcmFirmwareData
3. BrcmPatchRAM3

AMD CPU Specific kexts:

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

USB fix for AMD FX systems, not recommended for Ryzen

VoodooHDA

Gathering files 38 of 436


OpenCore Vanilla Desktop guide

Audio for FX systems and front panel Mic+Audio support for Ryzen system, do not mix with AppleALC. Audio

quality is noticeably worse than AppleALC on Zen CPUs

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

Required for systems with PS2 keyboards and trackpads


Trackpad users should also pair this with VoodooInput (This must come before VoodooPS2 in your config.plist)

VoodooI2C

Used for fixing I2C devices, found with some fancier touchpads and touchscreen machines
To be paired with a plugin:

VoodooI2CHID - Implements the Microsoft HID device specification.


VoodooI2CElan - Implements support for Elan proprietary devices. (does not work on ELAN1200+, use the
HID instead)

Gathering files 39 of 436


OpenCore Vanilla Desktop guide

VoodooI2CSynaptics - Implements support for Synaptic's proprietary devices.


VoodooI2CFTE - Implements support for the FTE1001 touchpad.
VoodooI2CUPDDEngine - Implements Touchbase driver support.

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

Please refer to Kexts.md for a full list of supported kexts

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)

CPU-PM (Run in SSDT- SSDT- SSDT- SSDT- SSDT-


CPU Post-Install) PLUG PLUG PLUG PLUG PLUG N/A

SSDT-EC- SSDT-EC- SSDT-EC- SSDT-EC- SSDT-EC-


EC SSDT-EC SSDT-EC USBX USBX USBX USBX USBX

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

Gathering files 40 of 436


OpenCore Vanilla Desktop guide

High End Desktop

SSDT IvyBridge-E Haswell-E Broadwell-E Skylake-X

CPU CPU-PM (Run in Post-Install) SSDT-PLUG SSDT-PLUG SSDT-PLUG

EC SSDT-EC SSDT-EC SSDT-EC SSDT-EC-USBX

AWAC N/A N/A N/A SSDT-AWAC

Now head Getting Started With ACPI

Gathering files 41 of 436


OpenCore Vanilla Desktop guide

Getting started with ACPI

Getting started with ACPI

Supported version: 0.5.7

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.

Guide has been move here:

Getting Started With ACPI

Getting started with ACPI 42 of 436


OpenCore Vanilla Desktop guide

Intel Config.plist

Ivy Bridge

Ivy Bridge

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist

Ivy Bridge 43 of 436


OpenCore Vanilla Desktop guide

Open your new config.plist in ProperTree

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.

Ivy Bridge 44 of 436


OpenCore Vanilla Desktop guide

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

Ivy Bridge 45 of 436


OpenCore Vanilla Desktop guide

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:

Key Type Value

All Boolean YES

Comment String Drop CpuPm

Enabled Boolean YES

OemTableId Data 437075506d000000

TableLength Number 0

TableSignature Data 53534454

Key Type Value

All Boolean YES

Comment String Drop Cpu0Ist

Enabled Boolean YES

Ivy Bridge 46 of 436


OpenCore Vanilla Desktop guide

OemTableId Data 4370753049737400

TableLength Number 0

TableSignature Data 53534454

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

Quirk: Settings relating to ACPI, leave everything here as default.

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.

Ivy Bridge 47 of 436


OpenCore Vanilla Desktop guide

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

Ivy Bridge 48 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Ivy Bridge 49 of 436


OpenCore Vanilla Desktop guide

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

Add: Sets device properties from a map. PciRoot(0x0)/Pci(0x2,0x0)

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

The ig-platform-id's we use is as follows:

0x0166000A - this is the standard hex for the ig-plat

Ivy Bridge 50 of 436


OpenCore Vanilla Desktop guide

0A006601 when hex-swapped

Key Type Value

AAPL,ig-platform-id Data 0A006601

(This is an example for a desktop HD 4000)

Special note: Mobile users should refer to mobile iGPU section for what properties should be used: iGPU Patching

PciRoot(0x0)/Pci(0x1b,0x0) -> Layout-id

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!

Ivy Bridge 51 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Ivy Bridge 52 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons

CpuidMask: Leave this blank


CpuidData: Leave this 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

Ivy Bridge 53 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

Ivy Bridge 54 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

Ivy Bridge 55 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Ivy Bridge 56 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Ivy Bridge 57 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Ivy Bridge 58 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Ivy Bridge 59 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Ivy Bridge 60 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Ivy Bridge 61 of 436


OpenCore Vanilla Desktop guide

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Ivy Bridge 62 of 436


OpenCore Vanilla Desktop guide

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:

Ivy Bridge 63 of 436


OpenCore Vanilla Desktop guide

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Ivy Bridge 64 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Ivy Bridge 65 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Ivy Bridge 66 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Ivy Bridge 67 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Ivy Bridge 68 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Ivy Bridge 69 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

Intel BIOS settings

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

Ivy Bridge 70 of 436


OpenCore Vanilla Desktop guide

Haswell

Haswell

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

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

Haswell 76 of 436
OpenCore Vanilla Desktop guide

Add: Sets device properties from a map. PciRoot(0x0)/Pci(0x2,0x0)

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

The two ig-platform-id's we use are as follows:

0x0D220003 - this is used when the Desktop Haswell iGPU is used to drive a display

0300220D when hex-swapped

0x04120004 - this is used when the Desktop Haswell iGPU is only used for computing tasks and doesn't drive a
display

04001204 when hex-swapped

0x0D220003 - this is used when the Desktop Broadwell iGPU

07002216 when hex-swapped

I added another portion as well that shows a device-id fake in case you have an HD 4400 which is unsupported in macOS.

The device-id fake is set up like so:

0x04120000 - this is the device id for HD 4600 which does have support in macOS

12040000 when hex swapped

We also add 3 more properties, framebuffer-patch-enable , framebuffer-stolenmem and framebuffer-fbmem .


The first enables patching via WhateverGreen.kext, the second sets the min stolen memory to 19MB and third sets the framebuffer
memory to 9MB. This is usually unnecessary, as this can be configured in BIOS(64MB recommended) but required when not
available.

Key Type Value

AAPL,ig-platform-id Data 0300220D

framebuffer-patch-enable Data 01000000

framebuffer-stolenmem Data 00003001

framebuffer-fbmem Data 00009000

device-id Data 12040000

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)

Key Type Value

AAPL,ig-platform-id Data 07002216

framebuffer-patch-enable Data 01000000

framebuffer-stolenmem Data 00003001

framebuffer-fbmem Data 00009000

(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

PciRoot(0x0)/Pci(0x1b,0x0) -> Layout-id

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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons

CpuidMask: Leave this blank


CpuidData: Leave this 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

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

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Haswell 83 of 436
OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Haswell 86 of 436
OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Haswell 87 of 436
OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Haswell 88 of 436
OpenCore Vanilla Desktop guide

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

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:

Haswell with only iGPU

iMac14,1

Haswell with dGPU

iMac14,2

Haswell Refresh (Devil's Canyon)

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

Haswell 91 of 436
OpenCore Vanilla Desktop guide

UpdateSMBIOS: YES

Updates SMBIOS fields

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it 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 (

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Intel BIOS settings

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

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

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

Skylake 100 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
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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Skylake 101 of 436


OpenCore Vanilla Desktop guide

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

Skylake 102 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Skylake 103 of 436


OpenCore Vanilla Desktop guide

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

Skylake 104 of 436


OpenCore Vanilla Desktop guide

Add: Sets device properties from a map. PciRoot(0x0)/Pci(0x2,0x0)

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

The two ig-platform-id's we use are as follows:

0x19120000 - this is used when the Desktop iGPU is used to drive a display

00001219 when hex-swapped

0x19120001 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display

01001219 when hex-swapped

We also add 3 more properties, framebuffer-patch-enable , framebuffer-stolenmem and framebuffer-fbmem .


The first enables patching via WhateverGreen.kext, the second sets the min stolen memory to 19MB and third sets the framebuffer
memory to 9MB. This is usually unnecessary, as this can be configured in BIOS(64MB recommended) but required when not
available.

Key Type Value

AAPL,ig-platform-id Data 00001219

framebuffer-patch-enable Data 01000000

framebuffer-stolenmem Data 00003001

framebuffer-fbmem Data 00009000

(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

PciRoot(0x0)/Pci(0x1b,0x0) -> Layout-id

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 .

Skylake 105 of 436


OpenCore Vanilla Desktop guide

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!

Skylake 106 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Skylake 107 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons

CpuidMask: Leave this blank


CpuidData: Leave this 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

Skylake 108 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

Skylake 109 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

Skylake 110 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Skylake 111 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Skylake 112 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Skylake 113 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Skylake 114 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Skylake 115 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Skylake 116 of 436


OpenCore Vanilla Desktop guide

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Skylake 117 of 436


OpenCore Vanilla Desktop guide

Platforminfo

PlatformInfo

For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.

For this Skylake example, we'll choose the iMac17,1 SMBIOS.

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

Skylake 118 of 436


OpenCore Vanilla Desktop guide

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

Skylake 119 of 436


OpenCore Vanilla Desktop guide

UEFI

UEFI

ConnectDrivers: YES

Skylake 120 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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Skylake 121 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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Resolution: Max

Skylake 122 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

UnicodeCollation: NO

Skylake 123 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: 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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Skylake 124 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

Intel BIOS settings

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

Skylake 125 of 436


OpenCore Vanilla Desktop guide

Kaby Lake

Kaby Lake

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

macOS: ProperTree.command

Kaby Lake 126 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

Kaby Lake 127 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
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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Kaby Lake 128 of 436


OpenCore Vanilla Desktop guide

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

Kaby Lake 129 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Kaby Lake 130 of 436


OpenCore Vanilla Desktop guide

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

Add: Sets device properties from a map. PciRoot(0x0)/Pci(0x2,0x0)

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.

Kaby Lake 131 of 436


OpenCore Vanilla Desktop guide

If we think of our ig-plat as 0xAABBCCDD , our swapped version would look like DDCCBBAA

The two ig-platform-id's we use are as follows:

0x59120000 - this is used when the Desktop iGPU is used to drive a display

00001259 when hex-swapped

0x59120003 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display

03001259 when hex-swapped

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.

Key Type Value

AAPL,ig-platform-id Data 00001259

framebuffer-patch-enable Data 01000000

framebuffer-stolenmem Data 00003001

(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

PciRoot(0x0)/Pci(0x1b,0x0) -> Layout-id

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

Kaby Lake 132 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Kaby Lake 133 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons

CpuidMask: Leave this blank


CpuidData: Leave this 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

Kaby Lake 134 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

Kaby Lake 135 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

Kaby Lake 136 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Kaby Lake 137 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Kaby Lake 138 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Kaby Lake 139 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Kaby Lake 140 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Kaby Lake 141 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Kaby Lake 142 of 436


OpenCore Vanilla Desktop guide

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Kaby Lake 143 of 436


OpenCore Vanilla Desktop guide

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:

Kaby Lake 144 of 436


OpenCore Vanilla Desktop guide

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Kaby Lake 145 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Kaby Lake 146 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Kaby Lake 147 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Kaby Lake 148 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Kaby Lake 149 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Kaby Lake 150 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

Intel BIOS settings

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 151 of 436


OpenCore Vanilla Desktop guide

Coffee Lake

Coffee Lake

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

macOS: ProperTree.command

Coffee Lake 152 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

Coffee Lake 153 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
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

Quirk: Settings relating to ACPI, leave everything here as default.

FadtEnableReset: NO

Enable reboot and shutdown on legacy hardware, not recommended unless needed

Coffee Lake 154 of 436


OpenCore Vanilla Desktop guide

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

Coffee Lake 155 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Coffee Lake 156 of 436


OpenCore Vanilla Desktop guide

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Coffee Lake 157 of 436


OpenCore Vanilla Desktop guide

DeviceProperties

DeviceProperties

Add: Sets device properties from a map. PciRoot(0x0)/Pci(0x2,0x0)

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

The two ig-platform-id's we use are as follows:

0x3E9B0007 - this is used when the Desktop iGPU is used to drive a display

07009B3E when hex-swapped

0x3E920003 - this is used when the Desktop iGPU is only used for computing tasks and doesn't drive a display

0300923E when hex-swapped

Coffee Lake 158 of 436


OpenCore Vanilla Desktop guide

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

Key Type Value

AAPL,ig-platform-id Data 07009B3E

framebuffer-patch-enable Data 01000000

framebuffer-stolenmem Data 00003001

(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

PciRoot(0x0)/Pci(0x1b,0x0) -> Layout-id

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

Coffee Lake 159 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Coffee Lake 160 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons

CpuidMask: Leave this blank


CpuidData: Leave this 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

Coffee Lake 161 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

Coffee Lake 162 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

Coffee Lake 163 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Coffee Lake 164 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Coffee Lake 165 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Coffee Lake 166 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Coffee Lake 167 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Coffee Lake 168 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Coffee Lake 169 of 436


OpenCore Vanilla Desktop guide

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Coffee Lake 170 of 436


OpenCore Vanilla Desktop guide

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:

iMac19,1 - For Mojave and newer


iMac18,3 - For High Sierra and older

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

Coffee Lake 171 of 436


OpenCore Vanilla Desktop guide

7 Board Serial: C02839303QXH69FJA


8 SmUUID: DBB364D6-44B2-4A02-B922-AB4396F16DA8

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.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

Coffee Lake 172 of 436


OpenCore Vanilla Desktop guide

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.

Coffee Lake 173 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Coffee Lake 174 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it 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) )

Coffee Lake 175 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

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)

Coffee Lake 176 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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:

Coffee Lake 177 of 436


OpenCore Vanilla Desktop guide

Sanity Checker

Intel BIOS settings

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 178 of 436


OpenCore Vanilla Desktop guide

Intel HEDT Config.plist

Haswell-E

Haswell-E

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist

Haswell-E 179 of 436


OpenCore Vanilla Desktop guide

Open your new config.plist in ProperTree

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

Haswell-E 180 of 436


OpenCore Vanilla Desktop guide

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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Haswell-E 181 of 436


OpenCore Vanilla Desktop guide

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

Haswell-E 182 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

ProtectUefiServices: NO

Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems

ProvideCustomSlide: YES

Haswell-E 183 of 436


OpenCore Vanilla Desktop guide

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. Mainly relevant for Skylake and newer

DeviceProperties

DeviceProperties

Haswell-E 184 of 436


OpenCore Vanilla Desktop guide

Add: Sets device properties from a map.

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.

Haswell-E 185 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Haswell-E 186 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs and enabling power management on Haswell-E and Boardwell-E

Haswell E:

Cpuid1Data: C3060300 00000000 00000000 00000000


Cpuid1Mask: FFFFFFFF 00000000 00000000 00000000

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

Haswell-E 187 of 436


OpenCore Vanilla Desktop guide

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

Haswell-E 188 of 436


OpenCore Vanilla Desktop guide

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

Haswell-E 189 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Haswell-E 190 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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-E 191 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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-E 192 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Haswell-E 193 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

Haswell-E 194 of 436


OpenCore Vanilla Desktop guide

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

General Purpose boot-args:

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.

This disables some PCI debugging related to kIOPCIConfiguratorPFM64 , alternative is


npci= 0x3000 which disables debugging related to gIOPCITunnelledKey in addition.
npci=0x2000
Required for when getting stuck on PCI Start Configuration as there are IRQ conflicts
relating to your PCI lanes. Source

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)

Haswell-E 195 of 436


OpenCore Vanilla Desktop guide

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Haswell-E 196 of 436


OpenCore Vanilla Desktop guide

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.

For this Haswell-E example, we'll choose the iMacPro1,1 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:

Haswell-E 197 of 436


OpenCore Vanilla Desktop guide

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Haswell-E 198 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Haswell-E 199 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Haswell-E 200 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Haswell-E 201 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Haswell-E 202 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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-E 203 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

Intel BIOS settings

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

Haswell-E 204 of 436


OpenCore Vanilla Desktop guide

Broadwell-E

Broadwell-E

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

macOS: ProperTree.command

Broadwell-E 205 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

Broadwell-E 206 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

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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Broadwell-E 207 of 436


OpenCore Vanilla Desktop guide

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

Broadwell-E 208 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Broadwell-E 209 of 436


OpenCore Vanilla Desktop guide

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

Add: Sets device properties from a map.

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.

Broadwell-E 210 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Broadwell-E 211 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs and enabling power management on Haswell-E and Boardwell-E

Broadwell E:

Cpuid1Data: D4060300 00000000 00000000 00000000


Cpuid1Mask: FFFFFFFF 00000000 00000000 00000000

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

Broadwell-E 212 of 436


OpenCore Vanilla Desktop guide

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

Broadwell-E 213 of 436


OpenCore Vanilla Desktop guide

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

Broadwell-E 214 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Broadwell-E 215 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Broadwell-E 216 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Broadwell-E 217 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Broadwell-E 218 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

Broadwell-E 219 of 436


OpenCore Vanilla Desktop guide

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

General Purpose boot-args:

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.

This disables some PCI debugging related to kIOPCIConfiguratorPFM64 , alternative is


npci= 0x3000 which disables debugging related to gIOPCITunnelledKey in addition.
npci=0x2000
Required for when getting stuck on PCI Start Configuration as there are IRQ conflicts
relating to your PCI lanes. Source

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)

Broadwell-E 220 of 436


OpenCore Vanilla Desktop guide

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Broadwell-E 221 of 436


OpenCore Vanilla Desktop guide

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.

For this Broadwell-E example, we'll choose the iMacPro1,1 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:

Broadwell-E 222 of 436


OpenCore Vanilla Desktop guide

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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Broadwell-E 223 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Broadwell-E 224 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Broadwell-E 225 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Broadwell-E 226 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Broadwell-E 227 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Broadwell-E 228 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

Intel BIOS settings

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 229 of 436


OpenCore Vanilla Desktop guide

Skylake-X

Skylake-X

Supported version: 0.5.7

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

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

macOS: ProperTree.command

Skylake-X 230 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

Skylake-X 231 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
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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Skylake-X 232 of 436


OpenCore Vanilla Desktop guide

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:

Skylake-X 233 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

ProtectUefiServices: NO

Protects UEFI services from being overridden by the firmware, mainly relevant for VMs, Icelake and newer
Coffee Lake systems

Skylake-X 234 of 436


OpenCore Vanilla Desktop guide

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

Skylake-X 235 of 436


OpenCore Vanilla Desktop guide

Add: Sets device properties from a map.

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.

Skylake-X 236 of 436


OpenCore Vanilla Desktop guide

Kernel

Kernel

Skylake-X 237 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

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

Skylake-X 238 of 436


OpenCore Vanilla Desktop guide

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

Skylake-X 239 of 436


OpenCore Vanilla Desktop guide

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

Skylake-X 240 of 436


OpenCore Vanilla Desktop guide

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

TakeoffDelay: 0

Skylake-X 241 of 436


OpenCore Vanilla Desktop guide

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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

Vault: Optional

Skylake-X 242 of 436


OpenCore Vanilla Desktop guide

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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Skylake-X 243 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Skylake-X 244 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Recommended to leave enabled for best security practices

prev-lang:kbd: <>

Skylake-X 245 of 436


OpenCore Vanilla Desktop guide

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Skylake-X 246 of 436


OpenCore Vanilla Desktop guide

Platforminfo

PlatformInfo

For setting up the SMBIOS info, we'll use CorpNewt's GenSMBIOS application.

For this Skylake-X example, we'll choose the iMacPro1,1 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 # 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 Type part gets copied to Generic -> SystemProductName.

The Serial part gets copied to Generic -> SystemSerialNumber. The Board Serial part gets copied to Generic -> MLB.

The SmUUID part gets copied toto Generic -> SystemUUID.

Skylake-X 247 of 436


OpenCore Vanilla Desktop guide

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

Skylake-X 248 of 436


OpenCore Vanilla Desktop guide

UEFI

UEFI

ConnectDrivers: YES

Skylake-X 249 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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Skylake-X 250 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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Resolution: Max

Skylake-X 251 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

UnicodeCollation: NO

Skylake-X 252 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: 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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Skylake-X 253 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

Intel BIOS settings

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 254 of 436


OpenCore Vanilla Desktop guide

AMD Config.plist

Bulldozer/Jaguar

Bulldozer(15h) and Jaguar(16h)

Supported version: 0.5.7

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)

Bulldozer/Jaguar(15h/16h) (Supports 10.13, 10.14, and 10.15)

Bulldozer/Jaguar 255 of 436


OpenCore Vanilla Desktop guide

Now with those downloaded, we can get to really get started:

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

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 now you're ready to configure it!

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

Bulldozer/Jaguar 256 of 436


OpenCore Vanilla Desktop guide

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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Bulldozer/Jaguar 257 of 436


OpenCore Vanilla Desktop guide

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

Bulldozer/Jaguar 258 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Bulldozer/Jaguar 259 of 436


OpenCore Vanilla Desktop guide

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

Add: Sets device properties from a map.

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.

Bulldozer/Jaguar 260 of 436


OpenCore Vanilla Desktop guide

Kernel

Bulldozer/Jaguar 261 of 436


OpenCore Vanilla Desktop guide

Bulldozer/Jaguar 262 of 436


OpenCore Vanilla Desktop guide

Bulldozer/Jaguar 263 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons(AMD CPUs don't require this)

CpuidMask: Leave this blank


CpuidData: Leave this blank

Block: Blocks kexts from loading. Not relevant for us

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:

Bulldozer/Jaguar(15h/16h) (10.13, 10.14, and 10.15)

To merge:

Open both files,


Delete the Kernel -> Patch section from config.plist
Copy the Kernel -> Patch section from patches.plist
Paste into where old patches were in config.plist

Bulldozer/Jaguar 264 of 436


OpenCore Vanilla Desktop guide

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

Bulldozer/Jaguar 265 of 436


OpenCore Vanilla Desktop guide

DisableIoMapper: NO

AMD doesn't have DMAR or VT-D support so irrelevant

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

Bulldozer/Jaguar 266 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Bulldozer/Jaguar 267 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Bulldozer/Jaguar 268 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Bulldozer/Jaguar 269 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Bulldozer/Jaguar 270 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Bulldozer/Jaguar 271 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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.

This disables some PCI debugging related to kIOPCIConfiguratorPFM64 , alternative is


npci= 0x3000 which disables debugging related to gIOPCITunnelledKey in addition.
npci=0x2000
Required for when getting stuck on PCI Start Configuration as there are IRQ conflicts
relating to your PCI lanes. Not needed if Above4GDecoding is enabled. Source

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations
E7030000 - SIP completely disabled

Recommended to leave enabled for best security practices

Bulldozer/Jaguar 272 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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Bulldozer/Jaguar 273 of 436


OpenCore Vanilla Desktop guide

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:

iMacPro1,1: AMD RX Polaris and Vega


MacPro7,1: AMD RX Polaris, Vega and Navi(Note that MacPro7,1 is also a Catalina exclusive)
MacPro6,1: AMD R5/R7/R9 and older
iMac14,2: Nvidia Kepler and newer

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:

Bulldozer/Jaguar 274 of 436


OpenCore Vanilla Desktop guide

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.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Bulldozer/Jaguar 275 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Bulldozer/Jaguar 276 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Bulldozer/Jaguar 277 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Bulldozer/Jaguar 278 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Bulldozer/Jaguar 279 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Bulldozer/Jaguar 280 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

AMD BIOS Settings

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

Bulldozer/Jaguar 281 of 436


OpenCore Vanilla Desktop guide

Zen

Ryzen and Threadripper(17h)

Supported version: 0.5.7

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)

Ryzen/Threadripper(17h) (Supports 10.13, 10.14, and 10.15)

Now with those downloaded, we can get to really get started:

Zen 282 of 436


OpenCore Vanilla Desktop guide

Grab the Sample.plist and rename to config.plist


Open your new config.plist in ProperTree

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 now you're ready to configure it!

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

Zen 283 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

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

Quirk: Settings relating to ACPI, leave everything here as default.

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

Zen 284 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, for us we care about enabling SetupVirtualMap

AvoidRuntimeDefrag: YES

Fixes UEFI runtime services like date, time, NVRAM, power control, etc

DevirtualiseMmio: NO

Zen 285 of 436


OpenCore Vanilla Desktop guide

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

Allows for slide values to be used in Safemode

EnableWriteUnprotector: YES

Removes write protection from CR0 register during their execution

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

Fixes secureboot keys on MacPro5,1 and Insyde firmwares

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

Zen 286 of 436


OpenCore Vanilla Desktop guide

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

Add: Sets device properties from a map.

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.

Zen 287 of 436


OpenCore Vanilla Desktop guide

Kernel

Zen 288 of 436


OpenCore Vanilla Desktop guide

Zen 289 of 436


OpenCore Vanilla Desktop guide

Zen 290 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

Name of the kext


ex: Lilu.kext

Enabled

Self-explanatory, either enables or disables the kext

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

Path to the info.plist hidden within the kext


ex: Contents/Info.plist

Emulate: Needed for spoofing unsupported CPUs like Pentiums and Celerons(AMD CPUs don't require this)

CpuidMask: Leave this blank


CpuidData: Leave this blank

Block: Blocks kexts from loading. Not relevant for us

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:

Ryzen/Threadripper(17h) (10.13, 10.14, and 10.15)

To merge:

Open both files,


Delete the Kernel -> Patch section from config.plist
Copy the Kernel -> Patch section from patches.plist
Paste into where old patches were in config.plist

Zen 291 of 436


OpenCore Vanilla Desktop guide

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

Zen 292 of 436


OpenCore Vanilla Desktop guide

DisableIoMapper: NO

AMD doesn't have DMAR or VT-D support so irrelevant

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

Zen 293 of 436


OpenCore Vanilla Desktop guide

Misc

Misc

Boot: Settings for boot screen (Leave everything as default)

HibernateMode: None

Zen 294 of 436


OpenCore Vanilla Desktop guide

Best to avoid hibernation with Hackintoshes all together

PickerMode: Builtin

Sets OpenCore to use the builtin picker

HideAuxiliary: NO

Hides Recovery and other partitions unless spacebar is pressed, more closely matches real Mac behaviour

HideSelf: YES

Hides the EFI partition as a boot option in OC's boot picker

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:

Cmd+V : Enables verbose


Cmd+Opt+P+R : Cleans NVRAM
Cmd+R : Boots Recovery partition
Cmd+S : Boot in Single-user mode
Option/Alt : Shows boot picker when ShowPicker set to NO , an alternative is ESC key

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

Zen 295 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

Shows more debug information, requires debug version of OpenCore

DisplayLevel: 2147483650

Shows even more debug information, requires debug version of OpenCore

These values are based of those calculated in OpenCore debugging Security: Security is pretty self-explanatory, do not skip

We'll be changing AllowNvramReset , AllowSetDefault , Vault and ScanPolicy

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

Shows more debug information, requires debug version of OpenCore

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

Zen 296 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

Name shown in OpenCore

Enabled

Self-explanatory, enables or disables

Path

Path to file after the Tools folder


ex: OpenShell.efi

Entries: Used for specifying irregular boot paths that can't be found naturally with OpenCore

Won't be covered here, see 8.6 of Configuration.pdf for more info

Zen 297 of 436


OpenCore Vanilla Desktop guide

NVRAM

NVRAM

Add: 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 (Booter Path, mainly used for UI Scaling)

UIScale:

01 : Standard resolution(Clover equivalent is 0x28 )


02 : HiDPI (generally required for FileVault to function correctly on smaller displays, Clover equivalent is 0x2A )

DefaultBackgroundColor: Background color used by boot.efi

00000000 : Syrah Black


BFBFBF00 : Light Gray

7C436110-AB2A-4BBB-A880-FE41995C9F82 (System Integrity Protection bitmask)

Zen 298 of 436


OpenCore Vanilla Desktop guide

General Purpose boot-args:

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.

This disables some PCI debugging related to kIOPCIConfiguratorPFM64 , alternative is


npci= 0x3000 which disables debugging related to gIOPCITunnelledKey in addition.
npci=0x2000
Required for when getting stuck on PCI Start Configuration as there are IRQ conflicts
relating to your PCI lanes. Not needed if Above4GDecoding is enabled. Source

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:

00000000 - SIP completely enabled


03000000 - Allow unsigned kexts and writing to protected fs locations

Zen 299 of 436


OpenCore Vanilla Desktop guide

E7030000 - SIP completely disabled

Recommended to leave enabled for best security practices

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

Key Type Value

prev-lang:kbd String en-US:0

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

Enables writing to flash memory for all added variables.

Zen 300 of 436


OpenCore Vanilla Desktop guide

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:

iMacPro1,1: AMD RX Polaris and newer


MacPro7,1: AMD RX Polaris and newer(Note that MacPro7,1 is also a Catalina exclusive)
MacPro6,1: AMD R5/R7/R9 and older
iMac14,2: Nvidia Kepler and newer

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:

Zen 301 of 436


OpenCore Vanilla Desktop guide

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.

The SmUUID part gets copied toto Generic -> SystemUUID.

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"

Apple Check Coverage page Automatic: YES

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

Update Data Hub fields

UpdateNVRAM: YES

Update NVRAM fields

UpdateSMBIOS: YES

Updates SMBIOS fields

Zen 302 of 436


OpenCore Vanilla Desktop guide

UpdateSMBIOSMode: Create

Replace the tables with newly allocated EfiReservedMemoryType, use Custom on Dell laptops requiring
CustomSMBIOSGuid quirk

UEFI

UEFI

Zen 303 of 436


OpenCore Vanilla Desktop guide

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

Default sound level for audio output

PlayChime: NO

Emulates the iconic Mac startup sound


This also requires AXEFIAudio_VoiceOver_Boot.wav under EFI/OC/Resources/Audio

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

Zen 304 of 436


OpenCore Vanilla Desktop guide

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

Keyboard translation for OpenCore

KeySwap: NO

Swaps Option and Cmd key

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

Output: Relating to visual output

TextRenderer: BuiltinGraphics

Used for fixing resolution of OpenCore itself, Resolution must be set to Max to work correctly

ConsoleMode: [Blank]

Specifies Console output size, best to keep it blank

Zen 305 of 436


OpenCore Vanilla Desktop guide

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

Fixes UI regarding FileVault, set to YES for better FileVault compatibility

HashServices: NO

Fixes incorrect cursor size when running FileVault, set to YES for better FileVault compatibility

Zen 306 of 436


OpenCore Vanilla Desktop guide

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

Request fallback of some Boot prefixed variables from OC_VENDOR_VARIABLE_GUID to


EFI_GLOBAL_VARIABLE_GUID . Used for fixing boot options.

RequestBootVarRouting: YES

Redirects AptioMemoryFix from EFI_GLOBAL_VARIABLE_GUID to OC\_VENDOR\_VARIABLE\_GUID .


Needed for when firmware tries to delete boot entries and is recommended to be enabled on all systems for
correct update installation, Startup Disk control panel functioning, etc.

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

Zen 307 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

AMD BIOS Settings

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 308 of 436


OpenCore Vanilla Desktop guide

Post Install

Post-Install

Supported version: 0.5.7

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

This section is beneficial for all, regardless of hardware.

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

Used for Intel's consumer line

Fixing Intel USB


Fixing CFG Lock
Emulating NVRAM

AMD

Used for AMD CPU based hardware

Fixing AMD USB


Fixing AMD Temperature readings

Maxwell and Pascal

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

Post-Install 309 of 436


OpenCore Vanilla Desktop guide

Note: Kepler GPUs do not need web drivers, they're natively supported by macOS even in Catalina

Post-Install 310 of 436


OpenCore Vanilla Desktop guide

Security and FileVault

Supported version: 0.5.7

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.

To start, you'll need the following .efi drivers:

OpenRuntime.efi

OpenUsbKbDxe.efi for DuetPkg users(systems without UEFI support)

Do not use VirtualSMC.efi with OpenCore, its already baked inside. You do however require VirtualSMC.kext still

Setting in your config.plist:

Misc -> Boot

PollAppleHotKeys set to YES(While not needed can be helpful)

Misc -> Security

AuthRestart set to YES(Enables Authenticated restart for FileVault2 so password is not required on reboot.
Can be considered a security risk so optional)

NVRAM -> Add -> 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14

UIScale set to 02 for high resolution small displays

UEFI -> Input

KeySupport set to YES(Only when using OpenCore's builtin input, users of OpenUsbKbDxe should avoid)

UEFI -> Output

ProvideConsoleGop to YES

Security and FileVault 311 of 436


OpenCore Vanilla Desktop guide

UEFI -> Protocols

FirmwareVolume set to YES


HashServices set to YES for Broadwell and older(this includes X99), this is needed for systems with broken
SHA-1 hashing
AppleSmcIo set to YES(this replaces VirtualSMC.efi)

UEFI -> Quirks

RequestBootVarRouting set to YES


ExitBootServicesDelay set to 3000 - 5000 if you receive Still waiting for root device on
Aptio IV firmwares(Broadwell and older)

With all this, you can proceed to enable FileVault like on a normal mac under
System Preferences -> Security & Privacy -> FileVault

For UI issues, see Fixing Resolution and Verbose

Vault

What is vaulting? Well vaulting is based around 2 things, vault.plist and vault.sig:

vault.plist: a "snapshot" of your EFI


vault.sig: validation of vault.plist

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

Settings in your config.plist:

Misc -> Security -> Vault :

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

Booter -> ProtectSecureBoot: YES

Needed with Insyde firmwares for fixing secureboot keys and reporting violations

Security and FileVault 312 of 436


OpenCore Vanilla Desktop guide

Setting up vault: Grab OpenCorePkg and open the CreateVault folder, inside we'll find the following:

create_vault.sh
RsaTool
sign.command

The last one is what we care about: 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:

Now we're ready to run sign.command :

Security and FileVault 313 of 436


OpenCore Vanilla Desktop guide

Disabling Vault after setup: If you're doing heavy troubleshooting or have the need to disable Vault, the main things to change:

Grab a new copy of OpenCore.efi


Misc -> Security -> Vault set to Optional

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)

0x00000001 (bit 0) — OC_SCAN_FILE_SYSTEM_LOCK

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.

Security and FileVault 314 of 436


OpenCore Vanilla Desktop guide

0x00000002 (bit 1) — OC_SCAN_DEVICE_LOCK

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.

0x00000100 (bit 8) — OC_SCAN_ALLOW_FS_APFS

allows scanning of APFS file system.

0x00000200 (bit 9) — OC_SCAN_ALLOW_FS_HFS

allows scanning of HFS file system.

0x00000400 (bit 10) — OC_SCAN_ALLOW_FS_ESP

allows scanning of EFI System Partition file system.

0x00010000 (bit 16) — OC_SCAN_ALLOW_DEVICE_SATA

allow scanning SATA devices.

0x00020000 (bit 17) — OC_SCAN_ALLOW_DEVICE_SASEX

allow scanning SAS and Mac NVMe devices.

0x00040000 (bit 18) — OC_SCAN_ALLOW_DEVICE_SCSI

allow scanning SCSI devices.

0x00080000 (bit 19) — OC_SCAN_ALLOW_DEVICE_NVME

allow scanning NVMe devices.

0x00100000 (bit 20) — OC_SCAN_ALLOW_DEVICE_ATAPI

allow scanning CD/DVD devices.

0x00200000 (bit 21) — OC_SCAN_ALLOW_DEVICE_USB

allow scanning USB devices.

Security and FileVault 315 of 436


OpenCore Vanilla Desktop guide

0x00400000 (bit 22) - OC_SCAN_ALLOW_DEVICE_FIREWIRE

allow scanning FireWire devices.

0x00800000 (bit 23) — OC_SCAN_ALLOW_DEVICE_SDCARD

allow scanning card reader devices.

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:

0x00200000 + 0xF0103 = 0x2F0103 And converting this to decimal gives us 3,080,451

Security and FileVault 316 of 436


OpenCore Vanilla Desktop guide

Fixing Audio

Supported version: 0.5.7

Table of Contents:

Finding your layout ID


Testing your layout
Making Layout ID more permanent
Miscellaneous issues
Troubleshooting

Checking if you have the right kexts


Checking if AppleALC is patching correctly
Checking AppleHDA is vanilla

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):

kextstat | grep -E "AppleHDA|AppleALC|Lilu"

If all 3 show up, you're good to go. And make sure VoodooHDA is not present. This will conflict with AppleALC otherwise.

If you're having issues, see the Troubleshooting section

Finding your layout ID

So for this example, we'll assume your codec is ALC1220. To verify yours, you have a couple options:

Checking motherboard's spec page and manual


Check DeviceManager in Windows
Run cat in terminal on Linux

cat /proc/asound/card0/codec#0 | less

Now with a codec, we'll want to cross reference it with AppleALC's supported codec list:

AppleALC Supported Codecs

With the ALC1220, we get the following:

Fixing Audio 317 of 436


OpenCore Vanilla Desktop guide

0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34

So from this it tells us 2 things:

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

Testing your layout

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

Making Layout ID more permanent

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

2. alc-layout-id in DeviceProperties, recommended for AppleALC

3. layout-id in DeviceProperties, same property Macs use

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

Fixing Audio 318 of 436


OpenCore Vanilla Desktop guide

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 :

Fixing Audio 319 of 436


OpenCore Vanilla Desktop guide

So in this example, alcid=11 would become alc-layout-id | Data | <0B000000>

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

Fixing Audio 320 of 436


OpenCore Vanilla Desktop guide

Same layout ID from Clover doesn't work on OpenCore

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

So for troubleshooting, we'll need to go over a couple things:

Checking if you have the right kexts


Checking if AppleALC is patching correctly
Checking AppleHDA is vanilla

Checking if you have the right kexts


o 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):

kextstat | grep -E "AppleHDA|AppleALC|Lilu"

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)

Hey Lilu and/or AppleALC aren't showing up

Generally the best place to start is by looking through your OpenCore logs and seeing if Lilu and AppleALC injected correctly:

1 14:354 00:020 OC: Prelink injection Lilu.kext () - Success


2 14:367 00:012 OC: Prelink injection AppleALC.kext () - Success

If it says failed to inject:

15:448 00:007 OC: Prelink injection AppleALC.kext () - Invalid Parameter

Main places you can check as to why:

Fixing Audio 321 of 436


OpenCore Vanilla Desktop guide

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: To setup file logging, see OpenCore Debugging .

Checking if AppleALC is patching correctly


So with AppleALC, one of the most easiest things to check if the patching was done right was to see if your audio controller was
renamed correctly. Grab IORegistryExplorer and see if you have an HDEF device:

As you can see from the above image, we have the following:

HDEF Device meaning our rename did the job


AppleHDAController attached meaning Apple's audio kext attached successfully

Fixing Audio 322 of 436


OpenCore Vanilla Desktop guide

alc-layout-id is a property showing our boot-arg/DeviceProperty injection was successful

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 vs Incorrect layout IDs:

Correct alc-layout-id

Fixing Audio 323 of 436


OpenCore Vanilla Desktop guide

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.

Checking AppleHDA is vanilla


This section is mainly relevant for those who were replacing the stock AppleHDA with a custom one, this is going to verify whether
or not yours is genuine:

sudo kextcache -i / && sudo kextcache -u /

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.

Fixing Audio 324 of 436


OpenCore Vanilla Desktop guide

Booting without USB

Supported version: 0.5.7

Grabbing OpenCore off the USB

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.

Booting without USB 325 of 436


OpenCore Vanilla Desktop guide

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)

Booting without USB 326 of 436


OpenCore Vanilla Desktop guide

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

Special notes for legacy users

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

Booting without USB 327 of 436


OpenCore Vanilla Desktop guide

Updating OpenCore, kexts and macOS

Supported version: 0.5.7

Table of Contents:

Updating OpenCore
Updating Kexts
Updating macOS

Updating OpenCore

So the main things to note with updating OpenCore:

Releases happen the first monday of every month


The Differences.pdf will tell you all the things added and removed from this version of OpenCore compared to the
previous release
The OpenCore Vanilla Guide will have a note on the README.md about what release version it supports

So how do I update?

So the process goes as follows:

1. Download the latest releases of OpenCore and co.


2. OpenCorePkg
3. AppleSupportPkg
4. Mount your EFI
So first, lets mount your hard drive's EFI and make a copy somewhere safe with MountEFI . We won't be updating
5. the drive's EFI at first, instead we'll be grabbing a spare USB to be our crash dummy. This allows us to keep a
working copy of Opencore incase our update goes south
For the USB, it must be formatted as GUID. Reason for this is that GUID will automatically create an EFI partition,
6.
though this will be hidden by default so you'll need to mount it with MountEFI.

Updating OpenCore, kexts and macOS 328 of 436


OpenCore Vanilla Desktop guide

Now you can place your OpenCore EFI on the USB

Updating OpenCore, kexts and macOS 329 of 436


OpenCore Vanilla Desktop guide

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

Updating OpenCore, kexts and macOS 330 of 436


OpenCore Vanilla Desktop guide

1. Compare your config.plist to that of the new Sample.plist


2. With this, there's a couple ways to do this:

OCConfigCompare to compare between the sample.plist and your config.plist


diff (file input 1) (file input 2) in terminal
BeyondCompare
Make a new config based off reading the updated Opencore Vanilla Guide

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.

Updating OpenCore, kexts and macOS 331 of 436


OpenCore Vanilla Desktop guide

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:

Lilu and Friends to download and compile the kexts


Kext Extractor to merge them into your EFI

Updating OpenCore, kexts and macOS 332 of 436


OpenCore Vanilla Desktop guide

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

Requires WhateverGreen 1.3.4+


Broke DRM for many GPUs(see DRM Chart )
Requires all previous fixes

10.15.2

Fixes Navi support in the installer


Requires all previous fixes

10.15.3

No change
Requires all previous fixes

10.15.4

AMD CPU users need to update cpuid_set_cpufamily patch


Fixes DRM on many Ellesmere based Polaris GPUs
Requires all previous fixes(excluding shikigva=80 for Polaris DRM for most users)

Updating OpenCore, kexts and macOS 333 of 436


OpenCore Vanilla Desktop guide

Fixing CFG Lock

Supported version: 0.5.7

Table of Contents:

Disabling CFG Lock


Checking if CFG-Lock can be turned off
Turning off CFG-Lock manually

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

Disabling CFG Lock

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:

Inside your EFI/OC/Tools folder and config.plist:

VerifyMsrE2
Modified GRUB Shell

And some apps to help us out:

UEFITool (Make sure it's UEFITool and not UEFIExtrac)


Universal-IFR-Extractor

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!

Checking if CFG-Lock can be turned off

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.

Fixing CFG Lock 334 of 436


OpenCore Vanilla Desktop guide

Turning off CFG-Lock manually

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:

path/to/ifrextract path/to/Setup.bin path/to/Setup.txt

Open the text file and search for CFG Lock, VarStoreInfo (VarOffset/VarName): and note the offset right
3.
after it(ie: 0x5A4 )

Fixing CFG Lock 335 of 436


OpenCore Vanilla Desktop guide

1. Run the Modified GRUB Shell and paste the following where 0x5A4 is replaced with your value:

setup_var 0x5A4 0x00

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.

Fixing CFG Lock 336 of 436


OpenCore Vanilla Desktop guide

Fixing Resolution and Verbose

Supported version: 0.5.7

Wanting a more clean booting experience with macOS without all that verbose text while booting? Well you need a couple things:

Recommended Configuration

NVRAM -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 -> boot-args :

Remove -v from your config.plist

NVRAM -> 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 -> UIScale :

01 : Standard resolution
02 : HiDPI (generally required for FileVault to function correctly on smaller displays)

UEFI -> Output :

TextRenderer set to BuiltinGraphics


Resolution : set to Max for best results

Optionally can specify resolution: WxH@Bpp (e.g. 1920x1080@32) or WxH (e.g. 1920x1080)

ProvideConsoleGop set to True

If still having issues, see Configuration.pdf for all possible options.

Fixing Resolution and Verbose 337 of 436


OpenCore Vanilla Desktop guide

Fixing DRM

Supported version: 0.5.7

Table of Contents:

Testing Hardware Acceleration and Decoding


Testing DRM
Fixing DRM
Fixing iGPU performance

So with DRM, we have a couple things we need to mention:

DRM requires a supported dGPU

See the GPU Buyers Guide for supported cards

DRM is broken for iGPU-only systems

These have never worked with Haswell and newer


For Ivy Bridge, this could be fixed with Shiki (now WhateverGreen) til 10.12.2, but broke with 10.12.3

Working hardware acceleration and decoding

Testing Hardware Acceleration and Decoding

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 :

Fixing DRM 338 of 436


OpenCore Vanilla Desktop guide

If you fail at this point, there's a couple things you can check for:

Make sure your hardware is supported

See GPU Buyers Guide

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

change GFX0 to IGPU


change PEG0 to GFX0
change HECI to IMEI
etc

Make sure Lilu and WhateverGreen are loaded

Fixing DRM 339 of 436


OpenCore Vanilla Desktop guide

Make sure not to have any legacy graphics patches present as they've been absorbed into WhateverGreen:

IntelGraphicsFixup.kext
NvidiaGraphicsFixup.kext
Shiki.kext

To check if Lilu and WhateverGreen loaded correctly:

kextstat | grep -E "Lilu|WhateverGreen"

Hey one or more of these kexts aren't showing up

Generally the best place to start is by looking through your OpenCore logs and seeing if Lilu and WhateverGreen injected correctly:

1 14:354 00:020 OC: Prelink injection Lilu.kext () - Success


2 14:367 00:012 OC: Prelink injection WhateverGreen.kext () - Success

If it says failed to inject:

15:448 00:007 OC: Prelink injection WhateverGreen.kext () - Invalid Parameter

Main places you can check as to why:

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: To setup file logging, see OpenCore Debugging .

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:

defaults write com.apple.AppleGVA enableSyslog -boolean true

And to undo this once done:

defaults delete com.apple.AppleGVA enableSyslog

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

Fixing DRM 340 of 436


OpenCore Vanilla Desktop guide

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.

FairPlay 2.x/3.x: Hardware based DRM, found in Netflix, Amazon Prime

There's a couple ways to test:

Play a show in Netflix or Amazon Prime


Play an Amazon Prime trailer: Spider-Man: Far From Home

Trailer itself does not use DRM but Amazon still checks before playing

Note: Requires newer AMD GPU to work (Polaris+)

FairPlay 4.x: Mixed DRM, found on AppleTV+

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+)

Possible to force FairPlay 1.x when iGPU is absent

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:

WhateverGreen's DRM chart

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 :

Fixing DRM 341 of 436


OpenCore Vanilla Desktop guide

Example of shikigva in Devices Properties

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:

You can use gfxutil to find the path to your iGPU/dGPU.

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.

Fixing DRM 342 of 436


OpenCore Vanilla Desktop guide

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.

Fixing iGPU performance

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:

Skylake and newer CPU with a supported iGPU


And a recent chipset, 300-series or newer: Z390, B360, H370, H310, etc. (not Z370, as it is actually 200-series)
Do note that even with recent chipsets, firmware loading is not guaranteed to work. If you experience a kernel panic
or lots of graphics errors after trying this, it is probably because firmware loading is not supported on your setup.

So how do we apply it? Under DeviceProperties -> Add -> PciRoot(0x0)/Pci(0x2,0x0) , add:

igfxfw | Data | <02 00 00 00>

To enable firmware loading.

Example of igfxfw injected into iGPU

Fixing DRM 343 of 436


OpenCore Vanilla Desktop guide

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 DRM 344 of 436


OpenCore Vanilla Desktop guide

1 kernel: (AppleIntelCFLGraphics) [IGPU] Graphics Firmware Version: 2.14.0.0


2 kernel: (AppleIntelCFLGraphics) [IGPU] Graphics Firmware Version: 2.14.0.0
3 kernel: (AppleIntelCFLGraphics) [IGPU] Graphics accelerator is using scheduler: Apple Firmware
4 kernel: (AppleIntelCFLGraphics) [IGPU] Graphics accelerator is using scheduler: Apple Firmware

Fixing DRM 345 of 436


OpenCore Vanilla Desktop guide

Fixing DRM 346 of 436


OpenCore Vanilla Desktop guide

Fixing iServices

Supported version: 0.5.7

Table of Contents:

Generate a new Serial


Fixing En0
Fixing ROM
Verifying NVRAM
Clean out old attempts
Cleaning up your AppleID
Customer Code error

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.

Generate a new Serial

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

Fixing iServices 347 of 436


OpenCore Vanilla Desktop guide

Fixing iServices 348 of 436


OpenCore Vanilla Desktop guide

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.":

Valid Purchase date:

Fixing iServices 349 of 436


OpenCore Vanilla Desktop guide

Purchase Date not Validated:

Fixing iServices 350 of 436


OpenCore Vanilla Desktop guide

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.

Fixing iServices 351 of 436


OpenCore Vanilla Desktop guide

What if I don't have En0 at all?!?

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

Once done reboot and check again.

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.

Find if set as Built-in

Fixing iServices 352 of 436


OpenCore Vanilla Desktop guide

Now head under the PCI tab of Hackintool and export your PCI DeviceProperties, this will create a pcidevices.plist on your desktop

Export PCI address

Now search through the pcidevices.plist and find the PCIRoot of your ethernet controller. For us, this would be
PciRoot(0x0)/Pci(0x1f,0x6)

Fixing iServices 353 of 436


OpenCore Vanilla Desktop guide

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

Fixing iServices 354 of 436


OpenCore Vanilla Desktop guide

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( : ).

Fixing iServices 355 of 436


OpenCore Vanilla Desktop guide

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.

Clean out old attempts

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.

Next open terminal and run the following:

1 sudo rm -rf ~/Library/Caches/com.apple.iCloudHelper*


2 sudo rm -rf ~/Library/Caches/com.apple.Messages*
3 sudo rm -rf ~/Library/Caches/com.apple.imfoundation.IMRemoteURLConnectionAgent*
4 sudo rm -rf ~/Library/Preferences/com.apple.iChat*
5 sudo rm -rf ~/Library/Preferences/com.apple.icloud*
6 sudo rm -rf ~/Library/Preferences/com.apple.imagent*
7 sudo rm -rf ~/Library/Preferences/com.apple.imessage*

Fixing iServices 356 of 436


OpenCore Vanilla Desktop guide

8 sudo rm -rf ~/Library/Preferences/com.apple.imservice*


9 sudo rm -rf ~/Library/Preferences/com.apple.ids.service*
10 sudo rm -rf ~/Library/Preferences/com.apple.madrid.plist*
11 sudo rm -rf ~/Library/Preferences/com.apple.imessage.bag.plist*
12 sudo rm -rf ~/Library/Preferences/com.apple.identityserviced*
13 sudo rm -rf ~/Library/Preferences/com.apple.ids.service*
14 sudo rm -rf ~/Library/Preferences/com.apple.security*
15 sudo rm -rf ~/Library/Messages

Verifying your work one last time

Grab macserial and run the following:

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.

Cleaning up your AppleID

Remove all devices from your AppleID: Manage your devices


Enable 2 Factor-Auth
Remove all iServices from Keychain, some examples:

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

Customer Code error

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.

Fixing iServices 357 of 436


OpenCore Vanilla Desktop guide

Fixing iServices 358 of 436


OpenCore Vanilla Desktop guide

Emulated NVRAM

Supported version: 0.5.7

Table of Contents:

Cleaning out the Clover gunk


Verifying if you have working NVRAM
Enabling emulated NVRAM (with a nvram.plist)

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

Cleaning out the Clover gunk

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

If folders are empty then delete them as well:

/etc/rc.boot.d
/etc/rc.shutdown.d

Emulated NVRAM 359 of 436


OpenCore Vanilla Desktop guide

Verifying if you have working NVRAM

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

Now reboot and run this:

nvram -p | grep -i myvar

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

Enabling emulated NVRAM (with a nvram.plist)

To enable emulated NVRAM, you'll need 3 things set:

Emulated NVRAM 360 of 436


OpenCore Vanilla Desktop guide

Within your config.plist:

Booter:

DisableVariableWrite : set to YES

Emulated NVRAM 361 of 436


OpenCore Vanilla Desktop guide

Misc -> Security:

ExposeSensitiveData : set to 0x3

NVRAM:

LegacyEnable : set to YES


LegacyOverwrite set to YES
LegacySchema : NVRAM variables set(OpenCore compares these to the variables present in nvram.plist)
WriteFlash : set to NO

And within your EFI:

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):

/Users/(your username)/LogoutHook/LogoutHook.command Open up terminal and run the following:

sudo defaults write com.apple.loginwindow LogoutHook /Users/(your username)/LogoutHook


/LogoutHook.command

And voila! You have emulated NVRAM!

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

Emulated NVRAM 362 of 436


OpenCore Vanilla Desktop guide

Fixing Power Management

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

Fixing Power Management 363 of 436


OpenCore Vanilla Desktop guide

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:

SSDT-PLUG.aml is both present and enabled in your config.plist and EFI/OC/ACPI

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:

plugin-type | Number | 0x1

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:

Kernel -> Emulate :

Cpuid1Data: C3060300 00000000 00000000 00000000


Cpuid1Mask: FFFFFFFF 00000000 00000000 00000000

Broadwell-E:

Kernel -> Emulate :

Cpuid1Data: D4060300 00000000 00000000 00000000


Cpuid1Mask: FFFFFFFF 00000000 00000000 00000000

Using CPU Friend

To start, we're gonna need a couple things:

X86PlatformPlugin loaded
CPUFriend
CPUFriendFriend

Now lets run CPUFriendFriend.command

Fixing Power Management 364 of 436


OpenCore Vanilla Desktop guide

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:

Minimum Multiplier (Generally stable with x10 on Intel's consumer platform)


FSB (Front Side Bus Frequency, this is 100Mhz on most CPUs)

LPM = MinMultiplier x FSB

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.

Fixing Power Management 365 of 436


OpenCore Vanilla Desktop guide

echo "obase=16; 13" | bc

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

0x00-0x3F Max Performance

0x40-0x7F Balance performance

0x80-0xBF Balance power

0xC0-0xFF Max Power Saving

Fixing Power Management 366 of 436


OpenCore Vanilla Desktop guide

Fixing Power Management 367 of 436


OpenCore Vanilla Desktop guide

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

Sandy and Ivy Bridge Power Management

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.

What we'll need:

CpuPm and Cpu0Ist tables dropped


ssdtPRgen

To drop the CpuPm and Cpu0Ist tables, head to ACPI -> Block:

Key Type Value

All Boolean YES

Comment String Drop CpuPm

Enabled Boolean YES

Fixing Power Management 368 of 436


OpenCore Vanilla Desktop guide

OemTableId Data 437075506d000000

TableLength Number 0

TableSignature Data 53534454

Key Type Value

All Boolean YES

Comment String Drop Cpu0Ist

Enabled Boolean YES

OemTableId Data 4370753049737400

TableLength Number 0

TableSignature Data 53534454

Once this is done, we can now grab ssdtPRgen and run it:

Fixing Power Management 369 of 436


OpenCore Vanilla Desktop guide

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

Fixing Power Management 370 of 436


OpenCore Vanilla Desktop guide

Troubleshooting

General Troubleshooting

General Troubleshooting

Supported version: 0.5.7

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:

OpenCore booting issues

This is anytime before or during the loading of the macOS kernel

Stuck on no vault provided!


Stuck on EndRandomSeed
Stuck on [EB|#LOG:EXITBS:START]
Can't see macOS partitions
Black screen after picker
Stuck on OC: OcAppleGenericInput... - Success
Stuck on OCB: OcScanForBootEntries failure - Not Found
Stuck on OCB: failed to match a default boot option
Stuck on OCABC: Memory pool allocation failure - Not Found
Stuck on
OCS: No schema for DSDT, KernelAndKextPatch, RtVariable, SMBIOS,
SystemParameters...
Stuck on OC: Driver XXX.efi at 0 cannot be found
Stuck on Buffer Too Small
Stuck on Plist only kext has CFBundleExecutable key
Receiving Failed to parse real field of type 1
Stuck after selection macOS partition on OpenCore
Can't select anything in the picker
Stuck on This version of Mac OS X is not supported: Reason Mac...
Couldn't allocate runtime area errors?
SSDTs not being added
Booting OpenCore reboots to BIOS
OCABC: Incompatible OpenRuntime r4, require r10

macOS booting issues

Anytime between the kernel loading and installing macOS

General Troubleshooting 371 of 436


OpenCore Vanilla Desktop guide

Stuck on RTC... , PCI ConfigurationBegins , Previous Shutdown... , HPET ,


HID: Legacy...
"Waiting for Root Device" or Prohibited Sign error
macOS installer in Russian
macOS Installer being damaged
Stuck on or near IOConsoleUsers: gIOScreenLock...
Scrambled Screen on laptops
Black screen after IOConsoleUsers: gIOScreenLock... on Navi
300 series Intel stalling on apfs_module_start...
Kernel Panic Cannot perform kext summary
Kernel Panic AppleIntelMCEReporter
Kernel Panic AppleIntelCPUPowerManagement
Frozen in the macOS installer after 30 seconds
15h/16h CPU reboot after Data & Privacy screen
Keyboard works but trackpad does not
Sleep crashing on AMD
Kernel Panic on Invalid frame pointer
kextd stall[0]: AppleACPICPU
MediaKit reports not enough space

macOS post-install issues

Anytime after macOS is installed

Broken iMessage and Siri


No on-board audio
BIOS reset or sent into Safemode after reboot/shutdown?
macOS GPU acceleration missing on AMD X570
DRM Broken
"Memory Modules Misconfigured" on MacPro7,1
Apps crashing on AMD

Other issues

This includes troubleshooting tools used for making your USB, fixing cosmetics in OpenCore, etc

Can't run acpidump.efi


Fixing SSDTTime: Could not locate or download iasl!
Fix Python: Python is not installed or not found on PATH
Windows Startup Disk can't see APFS drives
Incorrect resolution with OpenCore
No temperature/fan sensor output
Can't find Windows/Bootcamp drive in picker
"You can't change the startup disk to the selected disk" error

General Troubleshooting 372 of 436


OpenCore Vanilla Desktop guide

Booting Windows results in Bluescreen or Linux crashes


Booting Windows error: OCB: StartImage failed - Already started
iASL warning, # unresolved
[No Volume/Brightness control on external monitors](/troubleshooting/troubleshooting.md#no-
volumebrightness-control-on-external-monitors

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

Stuck on no vault provided!


Stuck on EndRandomSeed
Stuck on [EB|#LOG:EXITBS:START]
Can't see macOS partitions
Black screen after picker
Stuck on OC: OcAppleGenericInput... - Success
Stuck on OCB: OcScanForBootEntries failure - Not Found
Stuck on OCB: failed to match a default boot option
Stuck on OCABC: Memory pool allocation failure - Not Found
Stuck on
OCS: No schema for DSDT, KernelAndKextPatch, RtVariable, SMBIOS, SystemParameters...
Stuck on OC: Driver XXX.efi at 0 cannot be found
Stuck on Buffer Too Small
Stuck on Plist only kext has CFBundleExecutable key
Receiving Failed to parse real field of type 1
Stuck after selection macOS partition on OpenCore
Can't select anything in the picker
Stuck on This version of Mac OS X is not supported: Reason Mac...
Couldn't allocate runtime area errors?
SSDTs not being added
Booting OpenCore reboots to BIOS
OCABC: Incompatible OpenRuntime r4, require r10

Stuck on no vault provided!

Turn off Vaulting in your config.plist under Misc -> Security -> Vault by setting it to:

Optional

General Troubleshooting 373 of 436


OpenCore Vanilla Desktop guide

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

Stuck on OC: Invalid Vault mode

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:

Fixing CFG Lock


Enable AppleXcpmCfgLock and AppleCpuPmCfgLock , this disables PKG_CST_CNFIG_CONTROL within the
XNU and AppleIntelCPUPowerManagment respectively. Not recommended long term solution as this can cause
instability.

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

General Troubleshooting 374 of 436


OpenCore Vanilla Desktop guide

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:

Fixing CFG Lock


Enable AppleXcpmCfgLock and AppleCpuPmCfgLock , this disables PKG_CST_CNFIG_CONTROL within the
XNU and AppleIntelCPUPowerManagment respectively. Not recommended long term solution as this can cause
instability.

Can't see macOS partitions


Main things to check:

ScanPolicy set to 0 to show all drives


Have the proper firmware drivers such as ApfsDriverLoader and HfsPlus
Set UnblockFsConnect to True in config.plist -> UEFI -> Quirks. Needed for some HP systems

Black screen after picker


This is due to missing ConsoleGOP, enable it under your config:

UEFI -> Output -> ProvideConsoleGop

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.

Stuck on OC: OcAppleGenericInput... - Success

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:

General Troubleshooting 375 of 436


OpenCore Vanilla Desktop guide

Verify you have added the correct kernel patches to your config(remember, OpenCore patches use MinKernel

and MaxKernel while Clover has MatchOS )

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.

Stuck on OCB: OcScanForBootEntries failure - Not Found

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

Misc -> Security -> ScanPolicy -> 0

Stuck on OCB: failed to match a default boot option

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

Misc -> Security -> ScanPolicy -> 0

Stuck on OCABC: Memory pool allocation failure - Not Found

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

General Troubleshooting 376 of 436


OpenCore Vanilla Desktop guide

Stuck on OC: Driver XXX.efi at 0 cannot be found

Verify that your EFI/OC/Drivers matches up with your config.plist -> UEFI -> Drivers Note that the entries are case-sensitive.

Stuck on Buffer Too Small

Enable Above4GDecoding in the BIOS

Stuck on Plist only kext has CFBundleExecutable key

Missing or incorrect Executable path

Receiving "Failed to parse real field of type 1"

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>

To fix, swap real for integer :

<key>HaltLevel</key>

<integer>2147483648</integer>

Stuck after selection macOS partition on OpenCore

CFG-Lock not off(Intel Users only), couple solutions:

Patch your MSR E2 (Recommended solution)


Enable AppleXcpmCfgLock and AppleCpuPmCfgLock , this disables PKG_CST_CNFIG_CONTROL within
the XNU and AppleIntelCPUPowerManagment repectively. Not recommended long term solution as this can
cause instability.

AMD kernel patches aren't working(AMD Users only):

Either outdated or missing kernel patches

Incompatible keyboard driver:

General Troubleshooting 377 of 436


OpenCore Vanilla Desktop guide

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

Can't select anything in the picker

Incompatible keyboard driver:

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

Stuck on This version of Mac OS X is not supported: Reason Mac...

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+

Couldn't allocate runtime area errors

See Fixing KASLR slide values

SSDTs not being added


So with OpenCore, there's some extra security checks added around ACPI files, specifically that table length header must equal to
the file size. This is actually the fault of iASL when you compiled the file. Example of how to find it:

General Troubleshooting 378 of 436


OpenCore Vanilla Desktop guide

1 * Original Table Header:


2 * Signature "SSDT"
3 * Length 0x0000015D (349)
4 * Revision 0x02
5 * Checksum 0xCF
6 * OEM ID "ACDT"
7 * OEM Table ID "SsdtEC"
8 * OEM Revision 0x00001000 (4096)
9 * Compiler ID "INTL"
10 * Compiler Version 0x20190509 (538510601)

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

Booting OpenCore reboots to BIOS

Incorrect EFI folder structure, make sure all of your OC files are within an EFI folder located on your ESP(EFI system
partition)

General Troubleshooting 379 of 436


OpenCore Vanilla Desktop guide

Directory Structure from OpenCore's DOC

General Troubleshooting 380 of 436


OpenCore Vanilla Desktop guide

OCABC: Incompatible OpenRuntime r4, require r10


Outdated OpenRuntime.efi, make sure BOOTx64.efi, OpenCore.efi and OpenRuntime are all from the same exact build. Anything
mismatched will break booting

Note: FwRuntimeServices has been renamed to OpenRuntime with 0.5.7 and newer

macOS booting

Stuck on RTC... , PCI ConfigurationBegins , Previous Shutdown... , HPET , HID: Legacy...


"Waiting for Root Device" or Prohibited Sign error
macOS installer in Russian
macOS Installer being damaged
Stuck on or near IOConsoleUsers: gIOScreenLock...
Scrambled Screen on laptops
Black screen after IOConsoleUsers: gIOScreenLock... on Navi
300 series Intel stalling on apfs_module_start...
Kernel Panic Cannot perform kext summary
Kernel Panic AppleIntelMCEReporter
Kernel Panic AppleIntelCPUPowerManagement
Frozen in the macOS installer after 30 seconds
15h/16h CPU reboot after Data & Privacy screen
Keyboard works but trackpad does not
Sleep crashing on AMD
Kernel Panic on Invalid frame pointer
kextd stall[0]: AppleACPICPU
MediaKit reports not enough space

Stuck on RTC... , PCI Configuration Begins , Previous Shutdown... , HPET ,


HID: Legacy...

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...

The main places to check:

Missing EC patch:

General Troubleshooting 381 of 436


OpenCore Vanilla Desktop guide

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

Do not use SSDT-EC on a laptop

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)

PCI allocation issue:

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 ):

General Troubleshooting 382 of 436


OpenCore Vanilla Desktop guide

"Waiting for Root Device" or Prohibited Sign error


Generally seen as a USB error, couple ways to fix:

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

Enabling XHCI Handoff in the BIOS can fix this as well

For 15h and 16h AMD CPUs, you may need to add the following:

XLNCUSBFix.kext

If XLNCUSBFix still doesn't work, then try the following:

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.

General Troubleshooting 383 of 436


OpenCore Vanilla Desktop guide

macOS installer in Russian

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

macOS Installer being damaged


If you've download macOS before October 2019, you likely have an expired macOS Installer certificate, there's 2 ways to fix this:

Download newest copy of macOS


Change date in terminal to when the certificate was valid

For the latter:

Disconnect all networking devices(Ethernet, disable Wifi)


In the recovery terminal set to September 1st, 2019:

General Troubleshooting 384 of 436


OpenCore Vanilla Desktop guide

date 0901000019

Stuck on or near IOConsoleUsers: gIOScreenLock... / gIOLockState (3...

This is right before the GPU is properly initialized, verify the following:

GPU is UEFI capable(GTX 7XX/2013+)


CSM is off in the BIOS
Forcing PCIe 3.0 link speed
Double check that ig-platform-id and device-id are valid if running an iGPU.
Trying various WhateverGreen Fixes

-igfxmlr boot argument. This can also manifest as a "Divide by Zero" error.

Scrambled Screen on laptops


Enable CSM in your UEFI settings. This may appear as "Boot legacy ROMs" or other legacy setting.

Black screen after IOConsoleUsers: gIOScreenLock... on Navi

Add agdpmod=pikera to boot args


Switch between different display outputs
Try running MacPro7,1 SMBIOS with the boot-arg agdpmod=ignore

300 series Intel stalling on apfs_module_start...

Commonly due to systems running AWAC clocks, pleas see the Getting started with ACPI section

Kernel Panic Cannot perform kext summary

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.

Kernel Panic AppleIntelMCEReporter

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

General Troubleshooting 385 of 436


OpenCore Vanilla Desktop guide

Kernel Panic AppleIntelCPUPowerManagement

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

Frozen in the macOS installer after 30 seconds


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

15h/16h CPU reboot after Data & Privacy screen


Follow directions here after UPDATE 2: Fix Data and Privacy reboot

macOS frozen right before login


This is a common example of screwed up TSC, for most system add VoodooTSCSync

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)

General Troubleshooting 386 of 436


OpenCore Vanilla Desktop guide

Keyboard works but trackpad does not


Make sure that VoodooInput is listed before VoodooPS2 and VoodooI2C kexts in your config.plist.

VoodooI2C Troubleshooting

Check the order that your kexts load - make they match what is shown under Gathering Files :

1. VoodooGPIO, VoodooInput, and VoodooI2CServices in any order (Found under VoodooI2C.kext/Contents/PlugIns)


2. VoodooI2C
3. Satellite/Plugin Kext

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 .

General Troubleshooting 387 of 436


OpenCore Vanilla Desktop guide

Kernel Panic on Invalid frame pointer

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

kextd stall[0]: AppleACPICPU

This is due to either a missing SMC emulator or broken one, make sure of the following:

Lilu and VirtualSMC are both in EFI/OC/kexts and in your config.plist


Lilu is before VirtualSMC in the kext list
Last resort is to try FakeSMC instead, do not have both VirtualSMC and FakeSMC enabled

MediaKit reports not enough space


This error is due to a small EFI, by default Windows will create a 100MB EFI whereas macOS will expect 200MB. To get around this
you have 2 way to go:

Expand the EFI of the drive to 200MB(See Google on how)


Format the entire drive instead of just the partition

Note by default Disk Utility only shows partitions, press Cmd/Win+2 to show all devices(Alternatively you can
press the view button)

Default

General Troubleshooting 388 of 436


OpenCore Vanilla Desktop guide

macOS post-install

Broken iMessage and Siri


No on-board audio
BIOS reset or sent into Safemode after reboot/shutdown?
macOS GPU acceleration missing on AMD X570
DRM Broken
"Memory Modules Misconfigured" on MacPro7,1
Apps crashing on AMD

General Troubleshooting 389 of 436


OpenCore Vanilla Desktop guide

Broken iMessage and Siri

En0 device not setup as Built-in , couple ways to fix:

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

BIOS reset or sent into Safemode after reboot/shutdown


Issue with AppleRTC, quite a simple fix:

Under Kernel -> patch :

General Troubleshooting 390 of 436


OpenCore Vanilla Desktop guide

Key Type Value

Comment String Disable RTC checksum update on poweroff

Enabled Boolean YES

Count Number 1

Base String __ZN8AppleRTC14updateChecksumEv

Identifier String com.apple.driver.AppleRTC

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

macOS GPU acceleration missing on AMD X570


Verify the following:

GPU is UEFI capable(GTX 7XX/2013+)


CSM is off in the BIOS
Forcing PCIe 3.0 link speed

DRM Broken
See Fixing DRM page

"Memory Modules Misconfigured" on MacPro7,1

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.

General Troubleshooting 391 of 436


OpenCore Vanilla Desktop guide

Apps crashing on AMD


Easy fix, buy Intel

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":

Adobe Products don't always work

Some fixes can be found here: Adobe Fixes


Do note these fixes just disables functionality, they're not really fixes

Virtual Machine running off of AppleHV's framework will not work(ie: Parallels 15, Vmware)

VirtualBox works fine as it doesn't use AppleHV


VMware 10 and older can work as well
Parallels 13.1.0 and older are known to work as well

Docker broken

Docker toolbox is the only solution as it's based off of VirtualBox, many features are unavailable with this version

Xcode AppleWatch simulator is broken in Catalina

Mojave works fine

IDA Pro won't install

There's an Intel specific check in the installer, app itself is likely fine

15/16h CPU webpages crashing

Follow directions here after UPDATE 5: Fix webpages

Sleep crashing on AMD


This is generally seen on AMD who use the chipset's USB controller, specifically for the Ryzen series and newer. The main way to
tell if you're having issues with this is checking logs after either sleeping or waking:

In terminal:

log show --last 1d | grep "Wake reason" verify it

Should result in something like this:

General Troubleshooting 392 of 436


OpenCore Vanilla Desktop guide

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

Can't run acpidump.efi


Fixing SSDTTime: Could not locate or download iasl!
Fix Python: Python is not installed or not found on PATH
Windows Startup Disk can't see APFS drives
Incorrect resolution with OpenCore
No temperature/fan sensor output
Can't find Windows/Bootcamp drive in picker
"You can't change the startup disk to the selected disk" error
Booting Windows results in Bluescreen or Linux crashes
Booting Windows error: OCB: StartImage failed - Already started
iASL warning, # unresolved
No Volume/Brightness control on external monitors

Can't run acpidump.efi

Call upon OpenCore shell:

1 shell> fs0: //replace with proper drive


2
3 fs0:\> dir //to verify this is the right directory
4
5 Directory of fs0:\
6
7 01/01/01 3:30p EFI
8
9 fs0:\> cd EFI\OC\Tools //note that its with forward slashes
10
11 fs0:\EFI\OC\Tools> acpidump.efi -b -n DSDT -z

Fixing SSDTTime: Could not locate or download iasl!

This is usually due to an outdated version of Python, try either updating Python or add iasl to the scripts folder for SSDTTime:

iasl macOS version


iasl Windows version

General Troubleshooting 393 of 436


OpenCore Vanilla Desktop guide

iasl Linux version

Fix Python: Python is not installed or not found on PATH

Easy fix, download and install the latest python:

macOS link
Windows link
Linux link

Make sure Add Python to PATH

Windows Startup Disk can't see APFS drives

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

Incorrect resolution with OpenCore

Follow Hiding Verbose for correct setup, set UIScale to 02 for HiDPI

General Troubleshooting 394 of 436


OpenCore Vanilla Desktop guide

Users also have noticed that setting ConsoleMode to Max will sometimes fail, leaving it empty can help

No temperature/fan sensor output


So couple things:

iStat Menus doesn't yet support MacPro7,1 readouts


VirtualSMC's bundled sensors do not support AMD

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

Note for AMD with FakeSMC:

FileVault support requires more work with FakeSMC


Make sure no other SMC kexts are present, specifically those from VirtualSMC

Can't find Windows/Bootcamp drive in picker


So with OpenCore, we have to note that legacy Windows installs are not supported, only UEFI. Most installs now are UEFI based
but those made by BootCamp Assistant are legacy based, so you'll have to find other means to make an installer(Google's your
friend). This also means MasterBootRecord/Hybrid partitions are also broken so you'll need to format the drive you want to install
onto with DiskUtility. See the Multiboot Guide on best practices

Now to get onto troubleshooting:

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:

PlatformInfo -> Generic -> AdviseWindows -> True

General Troubleshooting 395 of 436


OpenCore Vanilla Desktop guide

Booting Windows results in Bluescreen or Linux crashes

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)

Common Windows error code:

0xc000000d

Booting Windows error: OCB: StartImage failed - Already started

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, # unresolved


If you try to decompile your DSDT and get an error similar to this:

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:

General Troubleshooting 396 of 436


OpenCore Vanilla Desktop guide

iasl * [insert all ACPI files here]

No Volume/Brightness control on external monitors


Oddly enough, macOS has locked down digital audio from having control. To bring back some functionality, the app MonitorControl
has done great work on improving support in macOS

General Troubleshooting 397 of 436


OpenCore Vanilla Desktop guide

OpenCore Debugging

Supported version: 0.5.7

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.

Target Used for enabling different levels of debugging

0x01 — Enable Logging


0x02 — Enable Onscreen debug
0x04 — Enable logging to Data Hub.
0x08 — Enable serial port logging.
0x10 — Enable UEFI variable logging.
0x20 — Enable non-volatile UEFI variable logging.
0x40 — Enable logging to file.

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:

0x01 — Enable Logging


0x02 — Enable Onscreen debug

Note this can heavily increase boot times on firmwares with poor GOP implementations

0x10 — Enable UEFI variable logging.


0x40 — Enable logging to file.

0x01 + 0x02 + 0x10 + 0x40 = 0x53 0x53 converted to decimal becomes 83

So we can set Misc -> Debug -> Target -> 83 DisplayLevel Used for setting what is logged

0x00000002 — DEBUG_WARN in DEBUG, NOOPT, RELEASE.


0x00000040 — DEBUG_INFO in DEBUG, NOOPT.
0x00400000 — DEBUG_VERBOSE in custom builds.
0x80000000 — DEBUG_ERROR in DEBUG, NOOPT, RELEASE. A full list can be found in DebugLib.h .

For us we just want the following:

0x00000002 — DEBUG_WARN in DEBUG, NOOPT, RELEASE.

OpenCore Debugging 398 of 436


OpenCore Vanilla Desktop guide

0x00000040 — DEBUG_INFO in DEBUG, NOOPT.


0x80000000 — DEBUG_ERROR in DEBUG, NOOPT, RELEASE.

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

To remove all file logging, set Target to 0

OpenCore Debugging 399 of 436


OpenCore Vanilla Desktop guide

macOS Boot Process

Supported version: 0.5.7

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:

System powers on and searches for boot devices


System locates BOOTx64.efi on your OpenCore USB under EFI/BOOT/
BOOTx64.efi is loaded which then chain-loads OpenCore.efi from EFI/OC/
NVRAM Properties are applied
EFI drivers are loaded from EFI/OC/Drivers
Graphics Output Protocol(GOP) is installed
ACPI Tables are loaded from EFI/OC/ACPI
SMBIOS Data is applied
OpenCore loads and shows you all possible boot options
You now boot your macOS installer

If you're having issues booting at this point, main things to check for:

Stuck on no vault provided!


Can't see macOS partitions
Black screen after picker
Booting OpenCore reboots to BIOS

For the rest of the possible issues, see here:

OpenCore booting issues

macOS Boot Process 400 of 436


OpenCore Vanilla Desktop guide

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

For the rest of the possible issues, see here:

OpenCore booting issues

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 :

macOS Boot Process 401 of 436


OpenCore Vanilla Desktop guide

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

See here for more troubleshooting info:

Kernel Panic Cannot perform kext summary


Kernel Panic on Invalid frame pointer

macOS Boot Process 402 of 436


OpenCore Vanilla Desktop guide

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.

The main things that are tested here:

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...

macOS Boot Process 403 of 436


OpenCore Vanilla Desktop guide

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:

"Waiting for Root Device" or Prohibited Sign error

macOS Boot Process 404 of 436


OpenCore Vanilla Desktop guide

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.

kextd stall[0]: AppleACPICPU

1 Your karma check for today:


2 There once was a user that whined
3 his existing OS was so blind,
4 he'd do better to pirate an OS that ran great
5 but found his hardware declined.
6 Please don't steal Mac OS!
7 Really, that's way uncool.
8 (C) Apple Computer, Inc.

Source: Dont Steal Mac OS X.kext

macOS Boot Process 405 of 436


OpenCore Vanilla Desktop guide

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.

macOS Boot Process 406 of 436


OpenCore Vanilla Desktop guide

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:

Stuck on or near IOConsoleUsers: gIOScreenLock...


Black screen after IOConsoleUsers: gIOScreenLock... on Navi

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:

macOS frozen right before login


Black screen after IOConsoleUsers: gIOScreenLock... on Navi
Frozen in the macOS installer after 30 seconds

macOS Boot Process 407 of 436


OpenCore Vanilla Desktop guide

Extras

Legacy Install

Supported version: 0.5.7

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.

To start, you need the following:

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.

Legacy Install 408 of 436


OpenCore Vanilla Desktop guide

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

Legacy Install 409 of 436


OpenCore Vanilla Desktop guide

sudo Utilities/BootInstall/BootInstall.command

Disk Selection/writing new MBR

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.

Legacy Install 410 of 436


OpenCore Vanilla Desktop guide

Finished Installer

Legacy Install 411 of 436


OpenCore Vanilla Desktop guide

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

For picker support in the Opencore menu

HfsPlusLegacy.efi

Needed for seeing Hfs drives like installers, the legacy variant is required for SandyBridge and older due to
missing RDRAND instruction support

Legacy Install 412 of 436


OpenCore Vanilla Desktop guide

Add GUI and Bootchime

Supported version: 0.5.7

Main thing this guide will go over:

Giving OpenCore a GUI


Setting up a boot-chime

Setting up OpenCore's GUI

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

Once that's done, we'll need a couple things:

Binary Resources
OpenCanopy.efi

Once you have both of these, we'll next want to add it to our EFI partition:

Add the Resources folder to EFI/OC

Note the 0.5.7 copy puts into the wrong spot under just EFI, this will cause an image load error and halt
OpenCore

Add OpenCanopy.efi to EFI/OC/Drivers

Add GUI and Bootchime 413 of 436


OpenCore Vanilla Desktop guide

Now in our config.plist, we have 2 things we need to fix:

Misc -> PickerMode : External


Misc -> PickerAttributes : 1

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

UEFI -> Drivers and add OpenCanopy.efi

Once all this is saved, you can reboot and be greeted with a true Mac-like GUI:

Add GUI and Bootchime 414 of 436


OpenCore Vanilla Desktop guide

Credit to Vit9696

Setting up Boot-chime with AudioDxe

So to start, we'll need a couple things:

Onboard audio output

USB DACs will not work


GPU audio out is a hit or miss

AudioDxe in both EFI/OC/Drivers and UEFI -> Drivers


Binary Resources

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

Debug version of OpenCore with logging enabled

See OpenCore Debugging for more info

Settings up NVRAM:

NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82:

SystemAudioVolume | Data | 0x46


This is the boot-chime and screenreader volume, note it's in hexadecimal so would become 70 in decimal

Setting up UEFI -> Audio:

AudioCodec:

Codec address of Audio controller


To find yours:

Add GUI and Bootchime 415 of 436


OpenCore Vanilla Desktop guide

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:

ioreg -rxn IOHDACodecDevice | grep VendorID // List all possible devices

ioreg -rxn IOHDACodecDevice | grep IOHDACodecAddress // Grab the codec address

Audio Device:

PciRoot of audio controller


Run gfxutil to find the path:

/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:

1 06:065 00:004 OCAU: Matching PciRoot(0x0)/Pci(0x1F,0x3)/VenMsg(A9003FEB-D806-41DB-A491-5405FEEF46C3,


00000000)...
2 06:070 00:005 OCAU: 1/2 PciRoot(0x0)/Pci(0x1F,0x3)/VenMsg(A9003FEB-D806-41DB-A491-5405FEEF46C3,
00000000) (5 outputs) - Success

AudioSupport:

Set this to True

MinimumVolume:

Volume level from 0 to 100


To not blow the speakers, set it to 70
Note boot-chime will not play if MinimumVolume is higher than SystemAudioVolume that we set back in the
NVRAM section

PlayChime:

Set this to True

Add GUI and Bootchime 416 of 436


OpenCore Vanilla Desktop guide

VolumeAmplifier:

The Volume amplification, value will differ depending on your codec


Formula is as follows:

(SystemAudioVolume * VolumeAmplifier)/100 = Raw Volume(but cannot exceed 100)


ex: ( 70 x VolumeAmplifier )/ 100 = 100 -> ( 100 x 100 ) / 70 = VolumeAmplifier = 142.9
(we'll round it to 143 for simplicity)

Once done, you should get something like this:

Add GUI and Bootchime 417 of 436


OpenCore Vanilla Desktop guide

Note for visually impaired:

OpenCore hasn't forgotten about you! With the AudioDxe setup, you can enable both picker audio and FileVault
voiceover with these 2 settings:

Misc -> PickerAudioAssist -> True to enable picker audio

Add GUI and Bootchime 418 of 436


OpenCore Vanilla Desktop guide

UEFI -> Protocols -> AppleAudio -> True to enable FileVault voice over

See Security and FileVault on how to setup the rest for proper FileVault support

Add GUI and Bootchime 419 of 436


OpenCore Vanilla Desktop guide

iGPU Patching

GPU Patching

Supported version: 0.5.7

This little section is for those who need more than what is provided by simple framebuffer patching and WhateverGreen's auto-
patches:

Applying a fakeID for unsupported GPUs


iGPU BusID patching for 300 series motherboards

Converting a clover fakeID to OpenCore

Guide moved here: Renaming GPUs

iGPU BusID Patching

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:

iGPU Patching 420 of 436


OpenCore Vanilla Desktop guide

Now that we're prepped, we can start looking into busID patching. Checking the dumps on Insanelymac shows us this for the

3E9B0007 ID(Desktop UHD 630):

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:

1 [1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x000003C7 - DP


2 [2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x000003C7 - DP
3 [3] busId: 0x06, pipe: 8, type: 0x00000400, flags: 0x000003C7 - DP
4 01050900 00040000 C7030000
5 02040A00 00040000 C7030000
6 03060800 00040000 C7030000

These are your iGPUs ports by default, lets go through port 1 and see what each section is used for: The first port:

01050900 00040000 C7030000

Port: 01

01050900 00040000 C7030000

busId: 0x05

01050900 00040000 C7030000

Pipe Number 9 (little endian):

01050900 00040000 C7030000

Connector type: DisplayPort

01050900 00040000 C7030000

Flags - We leave it as default:

01050900 00040000 C7030000

iGPU Patching 421 of 436


OpenCore Vanilla Desktop guide

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

List of connector types:

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

Mapping video ports

1. Plug display into HDMI port


2. Set Port 1 to the HDMI connector type:

01xx0900 00080000 C7030000

3. Disable ports 2 and 3 with busid=00:

02000A00 00040000 C7030000


03000800 00040000 C7030000

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

01010900 00080000 C7030000


01020900 00080000 C7030000
01030900 00080000 C7030000
etc

If you still get no output, set port 1's busid to 00 and start going through busids for port 2 and so on

01000900 00040000 C7030000


02xx0A00 00080000 C7030000
03000800 00040000 C7030000

Adding to your config.plist


So adding these patches are simple though a bunch of entires are required:

framebuffer-con0-enable = 01000000

iGPU Patching 422 of 436


OpenCore Vanilla Desktop guide

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.

A finished config should look something like this:

Source for iGPU BusID patching: CorpNewt's Brain

iGPU Patching 423 of 436


OpenCore Vanilla Desktop guide

Fixing KASLR slide values

Supported version: 0.5.7

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.

And who is this info for

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:

1 Error allocating 0x1197b pages at 0x0000000017a80000 alloc type 2


2 Couldn't allocate runtime area

With some variation:

Only 244/256 slide values are usable!

Or even crashes while running macOS:

panic(cpu 6 caller 0xffffff801fc057ba): a freed zone element has been modified in zone kalloc.4096:
expected 0x3f00116dbe8a46f6 but found 0x3f00116d00000000

Fixing KASLR slide values 424 of 436


OpenCore Vanilla Desktop guide

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%!!!

So how do I fix this

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)

This will be found under EFI/CLOVER/tools


If you're missing this, you can grab it from the CLOVER.zip

OcQuirks (Don't mix Aptio fixes together or use OsxAptioFixDrvX, AptioMemoryFix, only OcQuirks is supported in
this guide)

Make sure this is inside EFI/CLOVER/drivers/UEFI

OpenRuntime.efi(Bundled with OcQuirks)

Make sure this is inside EFI/CLOVER/drivers/UEFI

OcQuirks.plist(Bundled with OcQuirks)

Make sure this is inside EFI/CLOVER/drivers/UEFI

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

Fixing KASLR slide values 425 of 436


OpenCore Vanilla Desktop guide

Allows for slide values to be used in Safemode

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

Prepping the BIOS

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.

Fixing KASLR slide values 426 of 436


OpenCore Vanilla Desktop guide

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

Finding the 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.

Example of what you'll see:

Type Start End # Pages Attributes

RT_Data 0000000000000000 0000000000000FFF 0000000000000001 800000000000000F

Available 0000000000001000 0000000000057FFF 0000000000000057 000000000000000F

Reserved 0000000000058000 0000000000058FFF 0000000000000001 000000000000000F

Available 0000000000059000 000000000008FFFF 0000000000000037 000000000000000F

RT_Code 0000000000090000 0000000000090FFF 0000000000000001 800000000000000F

Available 0000000000091000 000000000009DFFF 000000000000000D 000000000000000F

Reserved 000000000009E000 000000000009FFFF 0000000000000002 000000000000000F

Available 0000000000100000 000000005B635FFF 000000000005B536 000000000000000F

BS_Data 000000005B636000 000000005B675FFF 0000000000000040 000000000000000F

Available 000000005B676000 000000006AF77FFF 000000000000F902 000000000000000F

LoaderCode 000000006AF78000 000000006B155FFF 00000000000001DE 000000000000000F

BS_Data 000000006B156000 000000006B523FFF 00000000000003CE 000000000000000F

ACPI_NVS 000000006B524000 000000006B524FFF 0000000000000001 000000000000000F

BS_Data 000000006B526000 000000006B625FFF 0000000000000100 000000000000000F

Available 000000006B626000 000000006B634FFF 000000000000000F 000000000000000F

Fixing KASLR slide values 427 of 436


OpenCore Vanilla Desktop guide

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:

0x100000 + ( 0x35A * 0x200000 ) = 0x6B500000

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 .

But wait for just a second, this is higher than 256!

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

But this is soooooo hard

Well fret not, for there is a simple solution. After running memmap in the shell, run:

Fixing KASLR slide values 428 of 436


OpenCore Vanilla Desktop guide

1 shell> fs0: //replace with your USB


2
3 fs0:\> dir //to verify this is the right directory, if not try fs1 and so on
4
5 Directory of fs0:\
6 01/01/01 3:30p EFI
7
8 fs0:\> memmap > memmap.txt

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:

1 21:495 00:009 OCABC: MMIO devirt start


2 21:499 00:003 OCABC: MMIO devirt 0x60000000 (0x10000 pages, 0x8000000000000001) skip 0
3 21:503 00:003 OCABC: MMIO devirt 0xFE000000 (0x11 pages, 0x8000000000000001) skip 0
4 21:506 00:003 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
5 21:510 00:003 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
6 21:513 00:003 OCABC: MMIO devirt 0xFEE00000 (0x1 pages, 0x800000000000100D) skip 0
7 21:516 00:003 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x800000000000100D) skip 0
8 21:520 00:003 OCABC: MMIO devirt end, saved 278608 KB

Note: See OpenCore Debugging on how to enable logging to file

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

Should look something like this when done:

Fixing KASLR slide values 429 of 436


OpenCore Vanilla Desktop guide

Fixing KASLR slide values 430 of 436


OpenCore Vanilla Desktop guide

Disabling unsupported GPUs

Supported version: 0.5.7

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

Disables all GPUs except the iGPU

DeviceProperties

Disables GPU on a per-slot basis

SSDT

Disables GPU on a per-slot basis

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

And the output will result in something similar:

Disabling unsupported GPUs 431 of 436


OpenCore Vanilla Desktop guide

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:

Key Type Value

name data 23646973706C6179

IOName string #display

class-code data FFFFFFFF

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.

Example of device path: \_SB.PCI0.PEG0.PEGP

1 DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0x00000000)


2 {
3 External (_SB_.PCI0.PEG0.PEGP, DeviceObj) // (from opcode)
4
5 Method (_SB.PCI0.PEG0.PEGP._DSM, 4, NotSerialized) // _DSM: Device-Specific Method
6 {
7 If (LOr (LNot (Arg2), LEqual (_OSI ("Darwin"), Zero)))
8 {
9 Return (Buffer (One)
10 {
11 0x03

Disabling unsupported GPUs 432 of 436


OpenCore Vanilla Desktop guide

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:

Disabling unsupported GPUs 433 of 436


OpenCore Vanilla Desktop guide

Credit to CorpNewt for image

Disabling unsupported GPUs 434 of 436


OpenCore Vanilla Desktop guide

Credit

Supported version: 0.5.7

No good guide is made by one man, here's credit to those who've helped out:

vit9696

One of many developers of OpenCore


Corrections to the original guide
Corrections to this guide...(seriously this man deserves a medal)

CorpNewt

Heavily inspiring this guide(if not a rip off) and helping overal with questions and advice
Spoof SSDT source

Midi

Corrections and recommendations for the guide

AlGrey#9303

AMD Kernel patches

NoOne/IOIIIO

For the original AMD Vanilla Guide


Corrections to AMD portion of the guide

DhinakG

Random guide related stuff

and the rest of the dortania team for helping out

And to the rest who've helped out as well, thank you! Developers of OpenCore:

al3xtjames
Andrey1970AppleLife
Download-Fritz
Goldfish64
PMHeart
savvamitrofanov
vit9696

Guides linked or those that inspired this guide:

Credit 435 of 436


OpenCore Vanilla Desktop guide

r/Hackintosh Vanilla Desktop Guide


All-in-one Vanilla AMD Hackintosh Guide
USB Map Guide
Intel Framebuffer Patching
AppleALC Supported Codecs
gfxutil

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:

Clover Emulated NVRAM Uninstaller

ACPI Dumping:

acpica

iServices Guide:

Apple - iMessage, FaceTime, iCloud

iGPU and DRM configuration:

WhateverGreen's manual
WhateverGreen's DRM chart
DRM Testing

rEFInd Guide:

rEFInd Manual

USB Mapping Guide:

XHCI Wake issues


CorpNewt's USB Map Guide
AppleLife USB Map Guide

Credit 436 of 436

You might also like