Clover Bootloader Guide for Legacy Hackintosh: Configuration and Stability
Practical guide to Clover bootloader for legacy Hackintosh: config.plist tweaks, ACPI patching, kext order, driver selection, and diagnostic tools for stable Sierra through Catalina.
Clover r5123, released in late 2020, remains one of the most widely used bootloaders for legacy Hackintosh builds running macOS High Sierra through Catalina. Despite the broader ecosystem shifting toward OpenCore, Clover’s flexibility with ACPI patching, kext injection, and its forgiving approach to firmware quirks makes it indispensable for hardware that predates UEFI 2.4 compliance — especially X79, X99, and Z77 platforms. This guide assumes you already have a working Clover installation and focuses on refining the configuration for long-term stability, avoiding common pitfalls that lead to boot loops, sleep failures, or network drops.
Understanding the Clover Boot Process
Clover operates by injecting a firmware-like environment that macOS expects. It reads config.plist from the EFI partition, loads drivers from drivers64UEFI (or drivers64 for legacy BIOS), and applies ACPI patches on the fly. The boot order is critical: Clover first initializes its own drivers (e.g., ApfsDriverLoader.efi, DataHubDxe.efi), then processes ACPI fixes, and finally loads kexts from kexts/Other. A misstep in any of these stages can prevent macOS from reaching the desktop.
Config.plist Anatomy for Legacy Hardware
A well-structured config.plist is the backbone of a stable Hackintosh. For Ivy Bridge and Haswell builds, the following sections demand particular attention:
ACPI Section
Clover’s DSDT Fixes are still relevant for boards that lack proper ACPI tables. Enable only what your hardware requires. Over-patching — such as enabling FixShutdown_0004 on a board that already handles S5 correctly — can cause kernel panics on wake. Instead, use the DropTables array to remove duplicate SSDTs and the SSDT generator for CPU power management. For X79 and X99 dual-CPU setups, you must drop the DMAR table to prevent the VT-d related panic. The Dual-CPU X99 Hackintosh Update: High Sierra, Clover r5123, and What to Watch For describes how to verify these drops in practice.
Boot Section
Set Arguments to -v keepsyms=1 debug=0x100 during initial testing. The keepsyms=1 flag preserves kernel symbol names in panic logs, which is invaluable when diagnosing AppleIntelCPUPowerManagement or IOPCIFamily errors. Once stable, remove -v but keep debug=0x100 to retain panic messages without verbose boot. Also set DefaultVolume to the name of your macOS partition and Timeout to 5 seconds for a clean boot sequence.
Kernel and Kext Patches
Clover’s kernel patching is essential for older macOS versions. For Sierra and High Sierra on Ivy Bridge, enable AppleRTC patch to prevent CMOS reset. For Broadwell-E, apply the ExternalIcons patch to show internal drives as internal. Use the KextsToPatch array sparingly; many legacy fixes are now handled by dedicated kexts (e.g., Lilu.kext + WhateverGreen.kext for graphics).
Driver Selection: What Belongs in drivers64UEFI
Clover’s driver folder is often cluttered with unnecessary EFI files. For a legacy UEFI board (Z77, Z87, X79, X99), the minimum set is:
- ApfsDriverLoader.efi — required for APFS container detection on High Sierra and later.
- DataHubDxe.efi — provides board-identification data that macOS expects.
- FSInject.efi — needed for kext injection (almost always required).
- SMCHelper.efi — emulates the SMC chip; mandatory for any Hackintosh.
- VBoxHfs.efi or HfsPlus.efi — HFS+ driver; the latter is Apple’s own and more reliable.
Remove NvmExpressDxe.efi if your NVMe drive is natively supported by the firmware. Adding it can cause boot stalls on older UEFI revisions. Similarly, UsbMouseDxe.efi and UsbKbDxe.efi are rarely needed; Clover’s built-in USB support suffices.
ACPI Patching Without Breaking Sleep
Sleep/wake failures are the most common complaint after a Clover update. The culprit is often an overzealous FixHeaders or FixRTC patch. For X79 and X99, the _PTS and _WAK methods must be patched to avoid USB port reset on wake. Use Clover’s AutoMerge feature with a custom SSDT-SLEEP.aml that redefines these methods. Test wake by running pmset -g log after sleep; look for DarkWake entries without Hibernate to confirm clean transitions. The Legacy Hackintosh Guide: Ivy Bridge, Haswell, Broadwell-E, and Thunderbolt 2 Fixes provides a step-by-step ACPI patch for Thunderbolt 2 that also stabilizes sleep on those chipsets.
Kext Injection: Order Matters
Clover loads kexts from kexts/Other in alphabetical order by filename. This can cause dependencies to fail if, for example, Lilu.kext is loaded after WhateverGreen.kext. Rename kexts with a numeric prefix to enforce load order:
0-Lilu.kext1-VirtualSMC.kext2-WhateverGreen.kext3-AppleALC.kext
Do not inject kexts that are already present in /System/Library/Extensions unless you are overriding them with a newer version. Redundant injections bloat the boot process and can cause cache corruption. For Intel I219-V Ethernet on Z170, use IntelMausi.kext instead of patching AppleIntelE1000.kext; the 10Gb Ethernet on a Legacy Hackintosh: A Practical Guide for X79, X99, and Z170 covers this substitution in detail.
Diagnosing Boot Failures with Clover’s Built-in Tools
When a Clover-configured system fails to boot, the first step is to enable verbose mode and capture the last lines before the panic. Clover’s boot menu offers a F4 key to dump the original DSDT to the EFI partition — this is useful for comparing patched and unpatched tables. Another diagnostic technique is to press F10 to save a screenshot of the boot log (as a BMP file) for later analysis. For persistent kernel panics related to com.apple.driver.AppleIntelCPUPowerManagement, disable GenerateCStates and GeneratePStates in the ACPI section and use a static SSDT generated by ssdtPRGen.sh instead.
Backup Strategy Before Any Clover Update
Clover updates — even minor version bumps — can alter the behavior of config.plist parsing. Always keep a backup of your entire EFI folder on a separate FAT32 USB drive. Before updating Clover, copy the current EFI folder to the root of your macOS data partition as a safety net. If the update breaks boot, you can boot from the USB stick and restore the old EFI. This is especially critical for dual-CPU builds where Clover’s BootGraphics flags may change. The How to Recover a Hackintosh After Extended Power-Off outlines a recovery workflow that also applies to failed Clover updates.
Version-Specific Considerations for High Sierra and Mojave
Clover r5123 works well with macOS 10.13.6 and 10.14.6, but certain patches behave differently. On High Sierra, the AppleALC.kext layout for ALC892 may require alcid=1 instead of the more common alcid=7 — test both. For Mojave, enable AddDTGP in ACPI if your DSDT lacks the DTGP method; otherwise, graphics injection via WhateverGreen may fail silently. If you are using a pre-built DMG image for X99, verify that its Clover folder matches your hardware revision; the How to Safely Use the x99 dmg 3 Hackintosh Image explains how to cross-reference the included config.plist with your own board’s ACPI tables.
Final Validation Step
Before deploying any Clover update, validate your config.plist with Clover’s built-in syntax check: at the boot menu, press F4 to generate a preboot.log on the EFI partition. Inspect this log for lines like ConfigPlist: error in key 'Boot' — these indicate malformed XML that will cause a boot failure. Correct the config.plist using a proper plist editor (not a text editor) and re-test. A clean preboot.log with no warnings is your best assurance that the configuration is syntactically sound and ready for daily use.
