Clover Injection Level 4: Fixing GPU Issues on Legacy Hackintosh Systems
Learn how to use Clover’s injection level 4 (InjectATI/InjectNVIDIA=4) to fix GPU black screens on legacy Hackintosh systems with AMD Radeon HD 7xxx and NVIDIA Fermi/Kepler cards.
When building a Hackintosh around legacy hardware, few steps cause as much confusion as configuring graphics card injection. The term "injection" here refers to the mechanism by which the bootloader passes device properties—such as connector types, framebuffer data, and VRAM size—to the macOS kernel so that a discrete GPU is properly initialised without requiring a native Mac ROM. On Clover-based systems, this is handled by the Graphics section of config.plist, specifically the Inject keys for ATI, Intel, and NVIDIA. For users targeting older macOS versions like 10.13 High Sierra or 10.14 Mojave, understanding injection level 4 (often abbreviated as injection 4 or inject 4) can mean the difference between a bootable system with full acceleration and a black screen at the login window.
Setting InjectATI or InjectNVIDIA to 4 forces Clover to use the first framebuffer from the macOS kext, bypassing its own connector guessing. For older AMD cards like the HD 7xxx series, that can fix black screens at login. For some Fermi and Kepler NVIDIA cards, it can stop random kernel panics during sleep. But it also disables custom connector overrides, so if your card has an unusual port layout, you might lose a display output.
What Does Injection Level 4 Mean?
In Clover’s config.plist, the InjectATI and InjectNVIDIA keys accept integer values. The most common values are 0 (no injection), 1 (basic injection using the first matching framebuffer), and 2 (injection with custom connector information from ATIConnectors or NVCAP). The value 4 is less frequently documented but exists in Clover’s source code as a flag that forces injection of a pre-defined framebuffer from the macOS system kexts, ignoring any custom connector overrides. In practice, setting InjectATI to 4 tells Clover to use the first framebuffer found in the AMDRadeonX4000 or AMD7000Controller kext for the detected GPU, without attempting to guess connector layout from the device ID or subsystem ID.
This mode is particularly useful for older AMD cards such as the Radeon HD 7xxx series (Tahiti, Pitcairn, Cape Verde) where the default injection level 1 might pick a framebuffer that causes a black screen or distorted output. By forcing injection level 4, you bypass Clover’s heuristic and rely on the kext’s built-in defaults. The trade-off is that you lose the ability to fine-tune connector types—if your card has a non-standard port layout (e.g., three DVI ports on a card that macOS expects to have two DVI and one HDMI), injection level 4 may produce incorrect display detection or no signal on some ports.
When to Use Injection 4 for NVIDIA GPUs
NVIDIA cards in legacy Hackintosh builds typically rely on InjectNVIDIA with value 1 or 2, plus an NVCAP string to map ports. However, certain Fermi and Kepler cards (e.g., GeForce GTX 560 Ti, GTX 650) exhibit instability under injection level 1 on older macOS versions, causing random kernel panics during boot or sleep/wake cycles. Setting InjectNVIDIA to 4 forces Clover to use the default framebuffer from the GeForce kext, which can stabilise these cards. The downside is that if your card has a custom BIOS with altered port mapping, injection level 4 may disable one or more display outputs.
Before applying injection level 4 to any NVIDIA card, verify your GPU’s device ID and subsystem ID using a tool like System Information or ioreg under macOS, or lspci from a Linux live USB. Compare those IDs against the supported list in the GeForce kext (located at /System/Library/Extensions/GeForce.kext/Contents/Info.plist). If your card is not listed, injection level 4 will likely have no effect, and you will need to fall back to injection level 2 with a custom NVCAP.

Step-by-Step Configuration
The following steps assume you are using Clover (revision 5120 or earlier, as later revisions deprecated some injection flags). Always boot from a USB installer or a backup EFI partition before modifying your primary config.plist.
- Backup your current EFI — Copy the entire EFI partition or at least the
config.plistfile to an external drive. Verify the backup is readable. - Mount your EFI partition — Use
sudo diskutil mount EFIin Terminal or a tool like EFI Mounter. - Open config.plist — Use Clover Configurator or a plain text editor (e.g., Xcode or PlistEdit Pro). Navigate to
Graphicssection. - Set the injection key — For AMD: change
InjectATIfrom1or2to4. For NVIDIA: changeInjectNVIDIAto4. EnsureInjectIntelis set tofalseif you are using a discrete GPU and have disabled the iGPU in BIOS. - Remove conflicting keys — If you previously set
ATIConnectorsorNVCAP, delete those keys. Injection level 4 ignores them, and leaving them present may cause undefined behaviour. - Save and reboot — Boot with
-v(verbose mode) to observe any injection-related messages. Look for lines likeATI: injecting with level 4orNV: injecting with level 4.
Diagnosing Injection Failures
If the system boots to a black screen or a frozen grey Apple logo after applying injection level 4, do the following:
- Boot with
GraphicsEnabler=No— This Clover boot argument disables all GPU injection. If the system boots to the desktop (albeit with no acceleration and a low resolution), the problem is specifically with the injection parameters, not the GPU hardware or kexts. - Check framebuffer naming in verbose boot — At the end of the verbose log, macOS prints which framebuffer was loaded. For AMD cards, you might see
AMDFramebuffer: Aji,Baladi,Dashimaki, etc. Note the name and cross-reference it with your card’s known good framebuffer from community databases (e.g., Radeon HD 7870 typically usesDashimakiorHamachi). If injection level 4 picks a wrong framebuffer, you may need to switch back to injection level 2 and manually specify the correct framebuffer name viaATIdevice properties. - Test with a different macOS version — Some GPUs behave differently under 10.12 Sierra versus 10.14 Mojave. If injection level 4 fails on one version, try it on an older or newer install to see if the kext’s default framebuffer changed.
Interaction with Sleep/Wake and AGPM
Graphics injection level 4 can affect sleep/wake stability because the injected framebuffer influences how macOS manages GPU power states. If your system wakes from sleep but the display remains black or shows artifacts, the issue may be linked to the AGPM (Apple Graphics Power Management) kext. For AMD cards on legacy systems, editing the AGPM kext to match your GPU’s VBIOS version is a common fix. A detailed walkthrough for editing AGPM on older Radeon cards is available in the article Fixing macOS Sleep/Wake on Legacy Hackintosh by Editing AGPM Kext. Combining injection level 4 with a properly patched AGPM often yields the most stable result for cards like the Radeon HD 7870.
Limitations and Risks
Injection level 4 is not a magic bullet. It was designed for a narrow set of GPUs where Clover’s automatic detection produced incorrect connector mapping. Using it on a modern card (e.g., Polaris or Vega) can result in a non-booting system because those cards rely on more complex framebuffer structures that injection level 4 does not handle. Additionally, some Clover revisions (5123 and later) changed the handling of injection flags; if you are using a recent build of Clover (e.g., r5140 or newer), the value 4 may be ignored entirely, and you will need to rely on WhateverGreen.kext with its own injection mechanism via device properties.
Always test injection level 4 on a non-critical volume first. The biggest risk is data corruption from an improper shutdown caused by a kernel panic during GPU initialisation. Keep a backup bootable USB with a known-working config.plist handy.
Verifying Successful Injection
Once the system boots with injection level 4, confirm that acceleration is working:
- Open System Information → Graphics/Displays. The GPU model should appear correctly, and VRAM size should match your card. If it shows “Display 7 MB” or “Display 3 MB”, acceleration is not active.
- Run a Metal or OpenGL benchmark (e.g.,
Unigine ValleyorGeekbench). A properly injected card will score within 10% of a real Mac with the same GPU. - Check
ioreg -l | grep -i "display"in Terminal. Look forIOFramebufferentries with correct connector types (LVDS,HDMI,DP).
If acceleration is missing despite injection level 4, the problem is likely not with injection but with missing or incompatible kexts (e.g., Lilu.kext + WhateverGreen.kext for newer GPUs, or FakeSMC.kext with correct GPU sensor plugins).
Final Practical Note
Before you try injection level 4, make sure you have a backup bootable USB with a known-working config.plist. Write down the exact Clover revision, macOS version, and GPU BIOS revision. If it works, you'll have a stable Hackintosh that boots with full acceleration. If it doesn't, you'll know it's time to look into WhateverGreen.kext or manual framebuffer patching. For owners of dual-GPU setups or cards with unusual port layouts, consider combining injection level 4 with a framebuffer patch injected via DSDT or device-properties in Clover. One reliable method for forcing correct Ethernet properties on dual-port boards is described in the guide Hackintosh built-in Ethernet: The right way to set the property on dual-port boards, and the same principle of explicit property injection applies to graphics—when in doubt, specify every property manually rather than relying on bootloader heuristics.
