-Donations with PayPal https://tinyurl.com/r2bvzm7
-Donations with Bitcoin
-Donations with PicPay
-Donation with Mercado Livre https://tinyurl.com/y9evkj5u
- Video Tutorial OpenCore Vanilla Guide -
- OpenCore Premade EFI Folders - (*Just paste EFI folder into EFI partition and start a fine tune*)
1- Download Oc Vanilla and check video bellow
Root configuration entries consist of the following:
• DeviceProperties • Kernel
Oc Manual generated in Docs folder
2- Now we need a good plist editor, my suggestion is Clover.app, this app have a good one.
a- Download Clover.app https://tinyurl.com/ydbyczzn
b- Download PlistEdit Pro https://www.fatcatsoftware.com/plisteditpro/
c- Download OpenCore Configurator by mackie100 (use last version ever to avoid some bugs) https://tinyurl.com/ybdqc4cz
3- Open your config.plist with Clover.app
a- Delete WARNING entries and save
4- Now let's check a good config for our hardware
a- Go to OpenCore Sanity Checker https://opencore.slowgeek.com/
b- Select your CPU
c- Select OpenCore Version
d- Select "Then click here to choose your config.plist or drag it here"
e- Load your config.plist inside EFI folder and start check what you need
f- Open your config.plist with OpenCore Configurator(is a easy way. Your can edit with Clover app or any other editor)
5- Applying correct config for your hardware(I'm using one 9900k in this example)
a- Remove and change all wrong entries
b- Check one by one and apply as needed
*** IN KERNEL TAB SELECT AppleCpuPmCfgLock, AppleXcpmCfgLock AND XhciPortLimit for all Intel hardwares ***
*** After applied all corrections and saving open config.plist again for a final revision ***
6- Boot Arguments
a- Go to NVRAM tab
*** Some Variables ***
– acpi_level=0xFFFF5F (implies ACPI_ALL_COMPONENTS)
– batman=VALUE (AppleSmartBatteryManager debug mask)
– batman-nosmc=1 (disable AppleSmartBatteryManager SMC interface)
– cpus=VALUE (maximum number of CPUs used)
– debug=VALUE (debug mask)
– io=VALUE (IOKit debug mask)
– keepsyms=1 (show panic log debug symbols)
– kextlog=VALUE (kernel extension loading debug mask)
– nv_disable=1 (disables NVIDIA GPU acceleration)
– nvda_drv=1 (legacy way to enable NVIDIA web driver, removed in 10.12)
– npci=0x2000 (legacy, disables kIOPCIConfiguratorPFM64)
– slide=VALUE (manually set KASLR slide)
– smcdebug=VALUE (AppleSMC debug mask)
– -amd_no_dgpu_accel (alternative to WhateverGreen’s -radvesa for new GPUs) – -nehalem_error_disable
– -no_compat_check (disable model checking)
– -s (single mode)
– -v (verbose mode)
– -x (safe mode)
a- Copy .aml to OC/ACPI folder
b- Add entry in config.plist ACPI tab
*** Easy way to boot ***
Copy SSDT-OLA.aml to OC/ACPI folder
Add and enable RTC _STA patch fix in config.plist
8- Generating SMBIOS
a- Go to PlatformInfo tab and generate
9- Kernel Extensions(Kexts)
OCBuilder.app compiled essentials kexts, but we need remove some unused and add others mandatory like VoodooPS2Controller.kext, VoodooI2C.kext for Mobiles devices.
a- Knowing your hardware
-Download Hackintool https://tinyurl.com/yamzbgd6
Go to PCIe tab and Update PCIIDs. Everything you need to know about your hardware!
*** Example / Removing unused kexts ***
My Lan card is Intel
I can remove some unused kexts about Lan in OC/Kexts Folder, my Lan card use IntelMausi.kext
Other unused kexts is removed
AMDRyzenCPUPowerManagement.kext / for AMD Processors
SMCAMDProcessor.kext / monitoring of AMD processors
SMCBatteryManager.kext / Battery Plugin for Mobiles
Now looks good for my hardware
b- Add kexts entries in config.plist
Go to Kernel/Add tab and Browse
Select Kexts and Open
a- Go to OC/Drivers and use only necessary drivers
b- Add entries drivers config.plist UEFI/Drivers tab and Browse
c- Select Drivers in your OpenCore EFI folder and Open
11- Audio Solution
a- Check your audio codec and layout-ids in tutorial above and add in NVRAM tab
12- Mobile Video Solution
a- Apply video patch in your config.plist, use one good .txt app, use TextMate
b- Open config.plist with TextMate and add video patch, DevicesProperties/Add
Now we have a EFI OpenCore with good, clean and correct config. Let's go to fine tune!
13- Fine Tune DSDT - SSDT
-DSDT (FULL SOLUTION)
DSDT (Differentiated System Description Table) is a part of the ACPI specification. It supplies information about supported power events in a given system. ACPI tables are provided in firmware from the manufacturer. A common MacOS problem is missing ACPI functionality, such as: fans not running, screens not turning off when the lid is closed, shutdown, boot fast without any ACPI error or warnings, sata, usb, firewire conflicts, etc.
-SSDT (NOT FULL SOLUTION)
SSDT (Secondary System Descriptor Table) It acts as a supplement to the DSDT.
To start this section we need check some things in real Mac tables and tables from one non-apple in same chipset and processor, in this case let's check Chipset Serie 300 with Coffelake Processor i9 9900k
Real Mac iMac19,1 tables, Chipset Serie 300 (8816 lines)
DSDT.Real iMac CoffeLake serie 300.zip
Mobo Chipset Serie 300 non-apple (59775 lines)
DSDT.Mobo serie 300.zip
The conclusion is: Apple use a very custom DSDT, no unused devices, no trash is found there. On our motherboard things are different, we have more than 50 thousand lines of a lot of garbage and devices for windows and not for MacOS.
Let's check one perfect hack with my Dell with Intel(R) Core(TM) i7-10510U and OpenCore Bootloader and FULL DSDT Patched
Work like one Real Mac!
-Olarila common patches for one perfect Hackintosh-
a- If you need a full solution with one full DSDT patched, extract one SendMe with OpenCore running with this app and post here or in DSDT Patch Requests topic, check video first for extract with ioreg
b- Paste DSDT.aml in OC/ACPI folder
c- Add entry in config.plist, reboot and done
d- If you like a SSDT way use SSDT Olarila with Basic patches for one good hack (Skylake+ only)
14- AMD Processors with Vanilla patches
Download Patches from Github
*** 15h and 16h / Bulldozer / FX Series / Jaguar / A Series (including AM4 A-Series) ***
*** 17h / Ryzen, Threadripper, Athlon 2xxGE
a- Open 17h folder
b- Open patches.plist with TextMate.app and copy all patches
c- Open your config.plistand paste all patches in Kernel/Patche tab and save
15- FakeCPUID with OpenCore
a- Open your config.plist
b- Go to Kernel tab and add properties
Haswell-E (0x0306F2) to Haswell (0x0306C3)
Cpuid1Data: C3 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00
Cpuid1Mask: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
16- Theme OpenCore
a- Download OcBinaryData https://tinyurl.com/y899xbde
b- Copy Resources folder to your OpenCore Folder
c- Open your config.plist, Go to Misc tab and set Picker Mode to External
17- Copying EFI folder to EFI Partition
a- Download ESP Mounter Pro and install this app
b- Mount EFI partition
c- Paste your EFI folder there
d- Reboot and Enjoy!
*** Some explanations about OpenCore ***
HDA audio support driver in UEFI firmwares for most Intel and some other analog audio controllers. Staging driver, refer to acidanthera/bugtracker#740 for known issues in AudioDxe.
Screenshot making driver saving images to the root of OpenCore partition (ESP) or any avail- able writeable filesystem upon pressing F10. This is a modified version of CrScreenshotDxe driver by Nikolaj Schlej.
Proprietary ExFAT file system driver for Bootcamp support commonly found in Apple firmwares. For Sandy Bridge and earlier CPUs ExFatDxeLegacy driver should be used due to the lack of RDRAND instruction support.
Proprietary HFS file system driver with bless support commonly found in Apple firmwares. For Sandy Bridge and earlier CPUs HfsPlusLegacy driver should be used due to the lack of RDRAND instruction support.
HII services support driver from MdeModulePkg. This driver is included in most firmwares starting with Ivy Bridge generation. Some applications with the GUI like UEFI Shell may need this driver to work properly.
FAT filesystem driver from FatPkg. This driver is embedded in all UEFI firmwares, and cannot be used from OpenCore. It is known that multiple firmwares have a bug in their FAT support implementation, which leads to corrupted filesystems on write attempt. Embedding this driver within the firmware may be required in case writing to EFI partition is needed during the boot process.
NVMe support driver from MdeModulePkg. This driver is included in most firmwares starting with Broadwell generation. For Haswell and earlier embedding it within the firmware may be more favourable in case a NVMe SSD drive is installed.
OpenCore plugin implementing graphical interface.
OpenCore plugin implementing OC_FIRMWARE_RUNTIME protocol.
USB keyboard driver adding the support of AppleKeyMapAggregator protocols on top of a custom USB keyboard driver implementation. This is an alternative to builtin KeySupport, which may work better or worse depending on the firmware.
Proprietary partition management driver with Apple Partitioning Scheme support commonly found in Apple firmwares. This driver can be used to support loading older DMG recoveries such as macOS 10.9 using Apple Partitioning Scheme. For Sandy Bridge and earlier CPUs PartitionDxeLegacy driver should be used due to the lack of RDRAND instruction support.
PS/2 keyboard driver from MdeModulePkg. OpenDuetPkg and some firmwares may not include this driver, but it is necessary for PS/2 keyboard to work. Note, unlike OpenUsbKbDxe this driver has no AppleKeyMapAggregator support and thus requires KeySupport to be enabled.
PS/2 mouse driver from MdeModulePkg. Some very old laptop firmwares may not include this driver, but it is necessary for touchpad to work in UEFI graphical interfaces, such as OpenCanopy.
USB mouse driver from MdeModulePkg. Some virtual machine firmwares like OVMF may not include this driver, but it is necessary for mouse to work in UEFI graphical interfaces, such as OpenCanopy.
HFS file system driver with bless support. This driver is an alternative to a closed source HfsPlus driver commonly found in Apple firmwares. While it is feature complete, it is approximately 3 times slower and is yet to undergo a security audit.
XHCI USB controller support driver from MdeModulePkg. This driver is included in most firmwares starting with Sandy Bridge generation. For earlier firmwares or legacy systems it may be used to support external USB 3.0 PCI cards.
b- Booter Quirks Properties
Description: Protect from boot.efi runtime memory defragmentation.
This option fixes UEFI runtime services (date, time, NVRAM, power control, etc.) support on many firmwares using SMM backing for select services like variable storage. SMM may try to access physical addresses, but they get moved by boot.efi.
Note: Most but Apple and VMware firmwares need this quirk.
Description: Remove runtime attribute from select MMIO regions.
This option reduces stolen memory footprint from the memory map by removing runtime bit for known memory regions. This quirk may result in the increase of KASLR slides available, but is not necessarily compatible with the target board without additional measures. In general this frees from 64 to 256 megabytes of memory (present in the debug log), and on some platforms it is the only way to boot macOS, which otherwise fails with allocation error at bootloader stage.
This option is generally useful on all firmwares except some very old ones, like Sandy Bridge. On select firmwares it may require a list of exceptional addresses that still need to get their virtual addresses for proper NVRAM and hibernation functioning. Use MmioWhitelist section to do this.
Description: Disable single user mode.
This is a security option allowing one to restrict single user mode usage by ignoring CMD+S hotkey and -s boot argument. The behaviour with this quirk enabled is supposed to match T2-based model behaviour. Read this article to understand how to use single user mode with this quirk enabled.
Description: Protect from macOS NVRAM write access.
This is a security option allowing one to restrict NVRAM access in macOS. This quirk requires OC_FIRMWARE_RUNTIME protocol implemented in OpenRuntime.efi.
Note: This quirk can also be used as an ugly workaround to buggy UEFI runtime services implementations that fail to write variables to NVRAM and break the rest of the operating system.
Description: Reuse original hibernate memory map.
This option forces XNU kernel to ignore newly supplied memory map and assume that it did not change after waking from hibernation. This behaviour is required to work by Windows, which mandates to preserve runtime memory size and location after S4 wake.
Note: This may be used to workaround buggy memory maps on older hardware, and is now considered rare legacy. Examples of such hardware are Ivy Bridge laptops with Insyde firmware, like Acer V3-571G. Do not use this unless you fully understand the consequences.
Description: Patch bootloader to have KASLR enabled in safe mode.
This option is relevant to the users that have issues booting to safe mode (e.g. by holding shift or using -x boot argument). By default safe mode forces 0 slide as if the system was launched with slide=0 boot argument. This quirk tries to patch boot.efi to lift that limitation and let some other value (from 1 to 255) be used. This quirk requires ProvideCustomSlide to be enabled.
Note: The necessity of this quirk is determined by safe mode availability. If booting to safe mode fails, this option can be tried to be enabled.
Description: Permit write access to UEFI runtime services code.
This option bypasses RX permissions in code pages of UEFI runtime services by removing write protection (WP)
bit from CR0 register during their execution. This quirk requires OC_FIRMWARE_RUNTIME protocol implemented in OpenRuntime.efi.
Note: This quirk may potentially weaken firmware security, please use RebuildAppleMemoryMap if your firmware supports memory attributes table (MAT).
Description: Retry ExitBootServices with new memory map on failure.
Try to ensure that ExitBootServices call succeeds even with outdated MemoryMap key argument by obtaining current memory map and retrying ExitBootServices call.
Note: The necessity of this quirk is determined by early boot crashes of the firmware. Do not use this unless you fully understand the consequences.
Description: Protect memory regions from incorrect access.
Some firmwares incorrectly map select memory regions:
• CSM region can be marked as boot services code or data, which leaves it as free memory for XNU kernel. • MMIO regions can be marked as reserved memory and stay unmapped, but may be required to be accessible
at runtime for NVRAM support.
This quirk attempts to fix types of these regions, e.g. ACPI NVS for CSM or MMIO for MMIO.
Note: The necessity of this quirk is determined by artifacts, sleep wake issues, and boot failures. In general only very old firmwares need this quirk.
Description: Protect UEFI Secure Boot variables from being written.
Reports security violation during attempts to write to db, dbx, PK, and KEK variables from the operating system. Note: This quirk mainly attempts to avoid issues with NVRAM implementations with problematic defragmentation,
such as select Insyde or MacPro5,1.
Description: Protect UEFI services from being overridden by the firmware.
Some modern firmwares including both hardware and virtual machines, like VMware, may update pointers to UEFI services during driver loading and related actions. Consequentially this directly breaks other quirks that affect memory management, like DevirtualiseMmio, ProtectMemoryRegions, or RebuildAppleMemoryMap, and may also break other quirks depending on the effects of these.
Note: On VMware the need for this quirk may be diagnosed by “Your Mac OS guest might run unreliably with more than one virtual core.” message.
Description: Provide custom KASLR slide on low memory.
This option performs memory map analysis of your firmware and checks whether all slides (from 1 to 255) can be used. As boot.efi generates this value randomly with rdrand or pseudo randomly rdtsc, there is a chance of boot failure when it chooses a conflicting slide. In case potential conflicts exist, this option forces macOS to use a pseudo random value among the available ones. This also ensures that slide= argument is never passed to the operating system for security reasons.
Note: The necessity of this quirk is determined by OCABC: Only N/256 slide values are usable! message in the debug log. If the message is present, this option is to be enabled.
Description: Generate Memory Map compatible with macOS.
Apple kernel has several limitations in parsing UEFI memory map:
• Memory map size must not exceed 4096 bytes as Apple kernel maps it as a single 4K page. Since some firmwares have very large memory maps (approximately over 100 entries) Apple kernel will crash at boot.
• Memory attributes table is ignored. EfiRuntimeServicesCode memory statically gets RX permissions, and all other memory types get RW permissions. Since some firmware drivers may write to global variables at runtime, Apple kernel will crash at calling UEFI runtime services, unless driver .data section has EfiRuntimeServicesData type.
To workaround these limitations this quirk applies memory attributes table permissions to memory map passed to Apple kernel and optionally attempts to unify contiguous slots of similar types if the resulting memory map exceeds 4 KB.
Note 1: Since many firmwares come with incorrect memory protection table this quirk often comes in pair with SyncRuntimePermissions.
Note 2 : The necessity of this quirk is determined by early boot failures. This quirk replaces EnableWriteUnprotector on firmwares supporting memory attributes table (MAT).
Description: Setup virtual memory at SetVirtualAddresses.
Select firmwares access memory by virtual addresses after SetVirtualAddresses call, which results in early boot crashes. This quirk workarounds the problem by performing early boot identity mapping of assigned virtual addresses to physical memory.
Note: The necessity of this quirk is determined by early boot failures. Currently new firmwares with memory protection support (like OVMF) do not support this quirk due to acidanthera/bugtracker#719.
Description: Report macOS being loaded through OS Info for any OS.
This quirk is useful on Mac firmwares, which behave differently in different OS. For example, it is supposed to enable Intel GPU in Windows and Linux in some dual-GPU MacBook models.
Description: Update memory permissions for runtime environment.
Some firmwares either fail to properly handle runtime permissions:
• They incorrectly mark OpenRuntime as not executable in the memory map.
• They incorrectly mark OpenRuntime as not executable in the memory attributes table. • They lose entries from the memory attributes table after OpenRuntime is loaded.
• They mark items in the memory attributes table as read-write-execute.
This quirk tries to update memory map and memory attributes table to correct this.
Note: The necessity of this quirk is determined by early boot failures either in macOS or in Linux/Windows. In general only firmwares released in 2018 or later are affected.
c- Kernel Quirks Properties
Description: Disables PKG_CST_CONFIG_CONTROL (0xE2) MSR modification in AppleIntelCPUPowerManage- ment.kext, commonly causing early kernel panic, when it is locked from writing.
Certain firmwares lock PKG_CST_CONFIG_CONTROL MSR register. To check its state one can use bundled VerifyMsrE2 tool. Select firmwares have this register locked on some cores only.
As modern firmwares provide CFG Lock setting, which allows configuring PKG_CST_CONFIG_CONTROL MSR register lock, this option should be avoided whenever possible. For several APTIO firmwares not displaying CFG Lock setting in the GUI it is possible to access the option directly:
(a) Download UEFITool and IFR-Extractor.
(b) Open your firmware image in UEFITool and find CFG Lock unicode string. If it is not present, your firmware
may not have this option and you should stop.
(c) Extract the Setup.bin PE32 Image Section (the one UEFITool found) through Extract Body menu option.
(d) Run IFR-Extractor on the extracted file (e.g. ./ifrextract Setup.bin Setup.txt).
(e) Find CFG Lock, VarStoreInfo (VarOffset/VarName): in Setup.txt and remember the offset right after
it (e.g. 0x123).
(f) Download and run Modified GRUB Shell compiled by brainsucker or use a newer version by datasone.
(g) Enter setup_var 0x123 0x00 command, where 0x123 should be replaced by your actual offset, and reboot.
WARNING: Variable offsets are unique not only to each motherboard but even to its firmware version. Never
ever try to use an offset without checking.
Description: Disables PKG_CST_CONFIG_CONTROL (0xE2) MSR modification in XNU kernel, commonly causing early kernel panic, when it is locked from writing (XCPM power management).
Note: This option should be avoided whenever possible. See AppleCpuPmCfgLock description for more details.
Description: Disables multiple MSR access critical for select CPUs, which have no native XCPM support.
This is normally used in conjunction with Emulate section on Haswell-E, Broadwell-E, Skylake-SP, and similar CPUs. More details on the XCPM patches are outlined in acidanthera/bugtracker#365.
Note: Additional not provided patches will be required for Ivy Bridge or Pentium CPUs. It is recommended to use AppleIntelCpuPowerManagement.kext for the former.
Description: Forces maximum performance in XCPM mode.
This patch writes 0xFF00 to MSR_IA32_PERF_CONTROL (0x199), effectively setting maximum multiplier for all the time.
Note: While this may increase the performance, this patch is strongly discouraged on all systems but those explicitly dedicated to scientific or media calculations. In general only certain Xeon models benefit from the patch.
Description: Performs GUID patching for UpdateSMBIOSMode Custom mode. Usually relevant for Dell laptops.
Description: Disables IOMapper support in XNU (VT-d), which may conflict with the firmware implementation.
Note: This option is a preferred alternative to deleting DMAR ACPI table and disabling VT-d in firmware preferences, which does not break VT-d support in other systems in case they need it.
Type: plist boolean
Description: Disables primary checksum (0x58-0x59) writing in AppleRTC.
Note 1: This option will not protect other areas from being overwritten, see RTCMemoryFixup kernel extension if this is desired.
Note 2: This option will not protect areas from being overwritten at firmware stage (e.g. macOS bootloader), see AppleRtc protocol description if this is desired.
Description: Disables AppleIntelCpuPowerManagement.
Note: This option is a preferred alternative to NullCpuPowerManagement.kext for CPUs without native power management driver in macOS.
Description: Apply icon type patches to AppleAHCIPort.kext to force internal disk icons for all AHCI disks.
Note: This option should be avoided whenever possible. Modern firmwares usually have compatible AHCI controllers.
Description: Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GBs.
Note: This option should be avoided whenever possible. In general the necessity of this option means misconfigured or broken firmware.
Description: Disables kernel panic on LAPIC interrupts.
Description: Prevent kernel from printing kext dump in the panic log preventing from observing panic details. Affects 10.13 and above.
Description: Disables kernel panic on setPowerState timeout.
An additional security measure was added to macOS Catalina (10.15) causing kernel panic on power change timeout for Apple drivers. Sometimes it may cause issues on misconfigured hardware, notably digital audio, which
sometimes fails to wake up. For debug kernels setpowerstate_panic=0 boot argument should be used, which is otherwise equivalent to this quirk.
Description: Apply vendor patches to IOAHCIBlockStorage.kext to enable native features for third-party drives, such as TRIM on SSDs or hibernation support on 10.15 and newer.
Note: This option may be avoided on user preference. NVMe SSDs are compatible without the change. For AHCI SSDs on modern macOS version there is a dedicated built-in utility called trimforce. Starting from 10.15 this utility creates EnableTRIM variable in APPLE_BOOT_VARIABLE_GUID namespace with 01 00 00 00 value.
Description: Patch various kexts (AppleUSBXHCI.kext, AppleUSBXHCIPCI.kext, IOUSBHostFamily.kext) to remove USB port count limit of 15 ports.
Note: This option should be avoided whenever possible. USB port limit is imposed by the amount of used bits in locationID format and there is no possible way to workaround this without heavy OS modification. The only valid solution is to limit the amount of used ports to 15 (discarding some).
The HermitCrabs Lab
All projects providing third-party code (refer to file headers)
AppleLife team and user-contributed resources
Chameleon and Clover teams for hints and legacy
Slice, Kabyl, usr-sse2, jadran, Blackosx, dmazar, STLVNUB, pcj, apianti, JrCs, pene, FrodoKenny, skoczy, ycr.ru, Oscar09, xsmile, SoThOr, RehabMan, Download-Fritz, Zenit432, cecekpawon, Intel, Apple, Oracle, Chameleon Team, crazybirdy, Mieze, Mirone, Oldnapalm, netkas, Elconiglio, artut-pt, ErmaC, Pavo, Toleda, Master Chief and family, bcc9, The King, PMheart, Sherlocks, Micky1979, vit9696, vandroiy2013, Voodoo Team, Pike R. Alpha, lvs1974, Austere.J, CVad, headkaze, onemanosx, erroruser, Jenny David, Sampath007, Facebook Hackintosh community, Facebook Olarila community and many, many, many others!
We're all here to have fun and learn from each other!