Intel HD Graphics Guide: Using inteldump1 for Legacy Hackintosh

Practical guide to using inteldump1 for VBT capture on legacy Intel HD Graphics Hackintosh. Step-by-step dump, hex analysis, and injection for Ivy Bridge through Broadwell.

When configuring Intel HD Graphics on a legacy Hackintosh — particularly on Ivy Bridge (HD 2500/4000), Haswell (HD 4400/4600/5000), and Broadwell (HD 5300/5500/6000) — one of the most persistent troubleshooting obstacles is obtaining a clean, platform-specific framebuffer dump from the actual hardware. The tool inteldump1, a command-line utility originally developed for Linux but portable to macOS recovery environments, provides exactly that: a byte-level capture of the integrated graphics device's VBT (Video BIOS Table) and MMIO (Memory-Mapped I/O) registers. This article explains what inteldump1 does, when to use it, how to interpret its output, and how to apply that data to patch your config.plist or ACPI tables for a stable boot.

What inteldump1 Captures — and Why It Matters

Intel's integrated graphics on Sandy Bridge through Broadwell rely on a set of binary structures embedded in the system firmware: the VBT, the GTT (Graphics Translation Table), and the PCH (Platform Controller Hub) display registers. These structures define panel timings, LVDS/eDP lane configurations, backlight PWM frequency, and connector-to-port mappings. A mismatched VBT is the root cause of black screens on boot, garbled output, or sleep/wake failures in many legacy Hackintosh builds.

inteldump1 reads these structures directly from the GPU's PCI configuration space and MMIO range, writing them to disk as raw binary files. Unlike generic Linux tools such as intel_reg or intel_gpu_top, inteldump1 focuses exclusively on the pre-initialization state — the data the firmware passes to the driver before any operating system takes over. This makes it invaluable for diagnosing why a particular laptop or mini-PC panel refuses to light up under macOS, even when the correct platform-id is injected.

Prerequisites and Safety Considerations

Before running inteldump1, understand the risks. The tool performs direct memory-mapped I/O access to the GPU's BAR0 region. On a running macOS system, this can cause a kernel panic if the IOKit driver (AppleIntelFramebuffer) is already loaded. Therefore, inteldump1 must be executed from one of the following environments:

  • macOS Recovery Mode (Cmd+R at boot) — the kernel loads without the full graphics stack, allowing safe MMIO reads.
  • A minimal Linux live USB (e.g., Ubuntu 18.04 or older with i915 driver blacklisted) — boot with modprobe.blacklist=i915 to prevent the kernel from touching the GPU.
  • Clover or OpenCore's UEFI shell — if a UEFI version of inteldump1 exists for your architecture; this is the safest option but least commonly available.

Always back up your current EFI partition and any existing VBT dumps before proceeding. A corrupted VBT writeback (though inteldump1 is read-only) is not the concern — rather, a panic mid-dump can corrupt the filesystem if you are writing to the same drive. Use a separate USB stick for the output.

Running inteldump1: Step-by-Step

  1. Download the compiled binary for your architecture (32-bit for legacy BIOS systems, 64-bit for UEFI). Verify the checksum against a known-good source.
  2. Boot into your chosen safe environment (recovery mode or Linux live USB).
  3. Open a terminal. On Linux, ensure the i915 driver is not loaded: run lsmod | grep i915 — it should return nothing. If it does, reboot with the blacklist parameter.
  4. Run sudo ./inteldump1 -o /path/to/usb/dump.bin. The -o flag specifies the output file. On macOS recovery, you may need to mount the USB manually with diskutil mount /dev/disk2s1 (adjust the identifier).
  5. The tool will print a brief summary: PCI vendor/device ID, revision, and the size of the captured VBT (typically 2–6 KB). If it reports an error like MMIO range not accessible, your environment does not have sufficient permissions or the GPU is already claimed by a driver.
  6. Copy the resulting dump.bin to a FAT32-formatted USB for later analysis.

Interpreting the Dump: Key Sections

Open the dump in a hex editor (e.g., xxd on the command line, or HxD on Windows). The structure follows Intel's VBT specification, which is not fully documented publicly but has been reverse-engineered by the community. Look for these critical offsets:

Offset (hex) Field Typical value Relevance
0x00–0x03 VBT signature '$VBT' or 'VBT' Confirms you have a valid VBT, not garbage.
0x04–0x07 VBT version 0x0155 (v1.55) Older macOS versions (10.9–10.11) expect v1.3–1.5; newer may accept up to v2.x.
0x08–0x0B Header size 0x0020 (32 bytes) If larger than 64, the dump may be from a different Intel GPU generation.
0x40–0x43 Panel PnP ID e.g., 0x4c0a Matches your display EDID; a mismatch indicates the wrong VBT is being used.
0x80–0x83 Backlight PWM frequency 0x0000c350 (50 kHz) Incorrect values cause flickering or non-functional brightness keys.

If the signature is missing or the header size is zero, the dump is corrupt — re-run inteldump1 from a different environment. A common cause is running the tool while the i915 driver is active; the MMIO region gets remapped and the read returns all zeros.

Applying the Dump to Your Hackintosh Configuration

The raw VBT can be injected into macOS via two methods:

  • Clover: Place the dump.bin in /EFI/CLOVER/ACPI/patched/ and add an AddProperties entry under DeviceProperties → Add → PciRoot(0x0)/Pci(0x2,0x0) with key framebuffer-patch-enable (data of type 01000000) and key AAPL,ig-platform-id set to your platform-id. Then add a third property hda-gfx with value onboard-1 to enable audio over HDMI.
  • OpenCore: Use the DeviceProperties → Add section with the same Pci path, and add framebuffer-patch-enable as a DATA type. Additionally, you can inject the entire VBT via UEFI → ProtocolOverrides → AppleVTD, but this is only necessary if the firmware does not expose a VBT at all (rare on desktop boards).

For most Ivy Bridge and Haswell laptops, simply injecting the correct AAPL,ig-platform-id (e.g., 0x01660003 for HD 4000) and device-id (e.g., 0x01660000) resolves the black screen — the VBT from inteldump1 is only needed when those standard injections fail. A typical scenario: a Dell Latitude E6430 with HD 4000 boots to a black screen even with 0x01660003. Dumping the VBT reveals that the panel's LVDS channel is mapped to port B instead of port A. By patching the VBT's child device structure (offset 0x100–0x1FF) and re-injecting it, the display initializes correctly.

Limitations and Version-Specific Caveats

inteldump1 works reliably only on Intel Gen 5 (Ironlake) through Gen 8 (Broadwell). For Skylake and newer, the VBT structure changed significantly, and the tool may produce truncated or misaligned output. Additionally, macOS 10.13 High Sierra and later dropped support for HD 2500 entirely — no amount of VBT patching will enable graphics acceleration on that iGPU. For HD 4000, macOS 10.15 Catalina is the last supported version; Big Sur and newer lack the necessary kexts. Always verify your target macOS version's compatibility before investing time in VBT analysis.

Another important caveat: inteldump1 does not capture the GMBUS (I²C) timing registers that control DDC/CI communication with the monitor. If your issue is that the external monitor is detected but shows no image, the problem likely lies in the connector-type injection (LVDS vs. eDP vs. HDMI) rather than the VBT itself. For such cases, refer to our guide on Clover Injection Level 4: Fixing GPU Issues on Legacy Hackintosh Systems, which covers connector-type patching in detail.

Practical Example: Fixing a Haswell Laptop with inteldump1

Consider an HP ProBook 450 G1 with HD 4400 (device ID 0x0A16). The system boots to a black screen under macOS 10.12 Sierra with any standard platform-id. After dumping the VBT from a Linux live USB, we notice the following:

  • VBT version: 1.55 (compatible)
  • Panel resolution: 1366×768 (correct)
  • Backlight PWM: 200 Hz (too low — macOS expects > 1 kHz)

The low PWM frequency causes the backlight to remain off after the initial framebuffer load. By editing bytes at offset 0x80–0x83 from 0x000000C8 to 0x00001388 (5 kHz) and re-injecting the patched VBT via Clover's AddProperties, the backlight turns on immediately after the AppleIntelFramebuffer kext loads. The fix is permanent and survives OS updates as long as the VBT file remains in the EFI partition.

Final Verification and Next Steps

After injecting the patched VBT, boot macOS with -v verbose mode and watch for the line IOFB: matching IOFB for display. If the display initializes but brightness keys do not work, you may need an additional ACPI patch for the EC (Embedded Controller) region. For iGPU-related sleep/wake issues, check that your _PTS and _WAK methods in DSDT do not reset the VBT pointer. A clean inteldump1 capture, combined with careful hex editing, remains the most reliable path to getting Intel HD Graphics working on legacy hardware that otherwise refuses to cooperate with standard injection methods.