Step by step instructions to remove integrated Intel HD graphics GPU kernel extension kexts with FileVault and SIP enabled

I’ve been working on a 2011 15″ MacBook Pro for a friend, and encountered a unique situation: the Intel integrated graphics are faulty, while the discrete AMD GPU still works fine. (in all my searching, everybody else has encountered the opposite problem, a failure of the discrete GPU, while the integrated Intel HD GPU still works fine)

Safe boot and the macOS install/recovery work fine, since the accelerated Intel drivers aren’t loaded. However, an attempt to perform a normal boot hangs, with a kernel debug message in the system log about a “possible hang in main graphics engine”.

As a workaround, I moved all of the AppleIntelHDxxxxxx.kext drivers out of /System/Library/Extensions and rebuilt the kernel cache, and I’m using GFXCardStatus to force the machine onto the discrete GPU upon login. The MBP is now running flawlessly, but I’m concerned about a future system update reinstalling the kexts that I removed.

Ideally, I’d like to prevent any system updates from installing the drivers that I removed, or alternatively, a way to automate or script the recovery process.

Meanwhile I’ll document the steps to repeat the process, in case a future update reinserts the drivers. The process was complicated by FileVault and SIP, making it necessary to boot from a USB installation disk or the recovery partition, mount the FileVault volume with Disk Utility, and then move the kexts out of /S/L/E.

  • note: “↵” symbol means press enter/return key, and all commands go on one line until the ↵ symbol is encountered, despite any line wrapping shown in this blog.
  • While powering on, press and hold Command-R.
  • At the language selection screen, click the arrow to continue.
  • From the menu bar, from the “Utilities” drop-down, select “Terminal”
  • diskutil coreStorage list ↵ (press enter/return)
  • From the output of the command, find the alphanumeric code representing the logical Volume UUID.
    Highlight, right-click, and copy it, then paste it in the following command (instead of the 111-222-333-44-555555)
  • diskutil coreStorage unlockVolume 11111111-2222-3333-4444-555555555555 -stdinpassphrase
  • Enter your password at the prompt, then press ↵.
    The output of this command should show “Logical Volume successfully mounted as…” followed by the mount point, which contains the name of the volume, such as “Macintosh HD”. Note the name of the volume, and if different from “Macintosh HD”, then substitute in the following command.
  • (On this step, remember to use the BASH tab completion feature to be sure you don’t make a type!)
    cd /Volumes/Macintosh\ HD/System/Library/Extensions
    ls -al AppleIntelHD*
    (should see list of many files)
  • mkdir backup-06Oct16 ↵
    mv AppleIntelHD* ./backup-06Oct16/ ↵
    (use backup-XXXXX from previous command)
    cd .. ↵
    ls -al AppleIntel* ↵

    The last command should output “no such file or directory”, confirming that the files have been moved into the backup-xxxxxx folder created earlier.
  • Apple menu, restart, while holding Command-S
  • enter password at prompt
  • Once text stops scrolling:
    fsck -fy ↵ and wait about 2 minutes for “xxx appears to be OK”.
    mount -uw / ↵
  • Press Control-D (not command-D). It should now boot successfully!

Raspberry Pi 3 Overclocking and Stability Testing

I recently ordered and took delivery of the new Raspberry Pi 3, with the intention of letting my son use it as a desktop computer replacement.

Web browsing with Chromium works pretty well, but was still a little bit laggy on Javascript-heavy sites, and I had hoped to eek a bit more performance out of it.

Inspired by this guy, I tried upping the clock speed, but needed a way to stress test it, and at the same time, check for stability. On x86 equipment, I would use Prime95 to fill that role: it has the CPU perform calculations, and compares the results with a known reference. If they don’t match, then the CPU has made an error (due to heat, voltage, a flipped bit somewhere in RAM or cache, etc).

Existing stress test software that I’ve encountered for the Raspberry Pi doesn’t seem to care about the integrity of the calculations performed. And since Prime95 doesn’t run on ARM processors, I came up with my own solution: a quick and dirty BASH script that will run four simultaneous iterations of a command that calculates a million digits of pi. It then makes sure the results match, outputs the time it took to execute the commands, and the temperature of the CPU core, and loops until it’s aborted with CTL-C, or it encounters an error.

Here’s that script:

My results were pretty disappointing, by the way. The stock clocking of the CPU, 1.2GHz, appears to be the highest speed this chip is able to handle stably.

Raspberry Pi with USB DAC running XBMC on OpenELEC

This is just a note to self, to make things easier when updating to a new build in the future. What I needed to do to get my Pi running correctly with Milhouse build 503:

First mount flash partition read/write:
mount -o rw,remount /flash

In /flash/config.txt:

In /flash/cmdline.txt, add noram.

In Settings, System, enable advanced, then select ALSA USB DAC audio, enable passthrough, and DTS capable receiver.

In ~/.xbmc/userdata/advancedsettings.xml:



In case I ever have issues again with ZFS DKMS:

Honda parts shipped to an APO address

I didn’t expect it to be so difficult to find an online Honda dealer that was willing to ship to an APO address. After wasting time on site after site after site, I finally found one that ships to APO, but wanted to charge over 4x their normal shipping rate! After further searching, I finally found a place that will ship Honda parts to military members overseas at APO address without price gouging them! Visit if you need to order Honda parts for an APO address without getting ripped off. (or perhaps ?)
(this is mainly a note to myself)