Hackintosh
So why Mac OS? Because its foundation is Unix, and it has a GUI that is at least as good as Windows, maybe better. For full disclosure, there are currently 6 real Macs in the house. 2 Minis, 2 Macbook Pros, an iMac and a Mac Pro. The first Mac, a 2008 iMac, is still running like it did when it was new, and in daily operation, but is soon to be scrapped. It has a Core 2 Duo CPU and can't run Mojave or later. A good 12 year run. The longest I've ever had a computer.
My first Hackintosh build was flawed. I started with the idea that I would use a Mini-ITX motherboard, which divided the number of candidate boards by at least 20. Then I used a CPU that would fit the motherboard (i7-4790K) and a video card that would fit in the case, etc. No part of it was tailored for Mac OS. The result worked, but was unstable. This time I picked the parts just to work with MacOS. This is the second attempt to get this one perfect, by adding the NVMe drive and the WiFi/Bluetooth card.
The obligatory "About This Mac":
CPU detection apparently has a little problem. The machine has an i7, not an i9.
Contents
Parts
- Motherboard - Gigabyte Z390 UD (~$130)
- CPU - i7-9700K (~$420)
- Memory - G.Skill F4-3200C14D-32GVR Ripjaws V (~$245)
- M.2 PCIe NVMe SSD - Samsung 970 EVO 500GB [boot drive] (~$100)
- SSD - Samsung 1TB 860 EVO [weekly backup] (~$150)
- HDD - WD 1TB 2.5" [daily backup] (~$150)
- Video - Sapphire RX-580 Nitro 4GB (~$190)
- WiFi/Bluetooth - Fenvi FV-T919 (~$60)
- PS - Corsair RM650x ($100)
- CPU Cooling - Cooler Master ML240L ($75)
- Case - Cooler Master HAF XB EVO ($100)
The Gigabyte Z390 UD motherboard has a socket 1151 for the 8th and 9th gen Core i3/i5/i7/i9 CPUs. It doesn't have a bunch of extra stuff on board that would complicate a clean install of Mac OS. I've seen people buy it and then give it bad marks because it doesn't have this or that. I think it is a perfect motherboard for my needs, and those who want more should probably buy something else. It has one m.2 PCIE slot, one x16 PCIe slot, two x4 slots, three x1 slots and a Realtek ALC887 sound chip. It supports the Gigabyte Alpine Ridge or Titan Ridge Thunderbolt card, the former of which I was using with a Thunderbolt monitor and drives, but I have since taken that out. Note: The BIOS disables the Titan Ridge's TB1 and TB2 compatibility. The motherboard also has an HDMI port in support of the internal graphics controller in the CPU.
Case
The case is a Cooler Master HAF XB EVO. I like them because they can breathe and I can work on the innards without tearing it all apart. The case is cubic and a bit gothic, but it isn't ugly. I see Amazon has them for $95.30. Other places up to $200.00.
Memory
I originally chose 2 x 16GB Corsair LPX DDR4-2666 because they are fast enough and still cheap. Then 6 months in I replaced the memory with the G.Skill Ripjaws V DDR4-3200. The memory has a 20% faster clock, and also has lower latency.
Some say memory speed has little or nothing to do with performance. For CPU benchmarks that is true, but I don't normally sit around running CPU benchmarks. I run things like development environments that take lots of memory, so the speed of the memory matters.
Novabench measures each metric separately, so CPU really is the CPU performance, and RAM really is the RAM performance. At 2666MHz the RAM speed is less than 30GB/second, while at 3300MHz it is 34GB/second. >4GB/second additional throughput.
Video
I started with a Sapphire RX 580 Pulse 8GB, but although I run three monitors, I don't do games, so I switched to the Nitro with 4GB. It is beyond adequate. There are two monitors at 1920 x 1080 and one at 2560 x 1440. There is a KVM switch that switches the two lower resolution monitors, and keyboard/mouse between 4 computers.
WiFi/Bluetooth
This was the easiest part. Plug it in, hook up the internal USB2 port using the supplied cable, and everything works. The only part that required work was finding which USB2 port number it was, and that just required rebooting, changing the exclude string, and identifying the port that had a Bluetooth adapter on it.
Boot drive
The boot drive has been, at various times, a 3.5" WD Black, 2.5" WD Black, WD Velociraptor, Samsung 860 EVO SATA, and now a 970 EVO M.2 NVMe. Each time but the last the boot time decreased by a magnitude. Now I use the 970 for the OS, and the 860 for data. The 970 is not astronomically faster on boot than the 860, because the disk isn't the problem. However, it is much, much faster with loading and running applications, especially those that hit the disk.
To bring it up on the NVMe drive, I formatted the NVMe with APFS, restored the Carbon Copy Cloner image of the 860 SATA drive onto the NVMe, then copied the EFI folder from the EFI volume on the 860 to the EFI volume on the 970 and booted. The 860 is now my weekly backup and the WD Black 2.5" is the daily backup. All three drives are bootable. I verify them once every couple of weeks.
If you are going to use Catalina, or any Mac OS with APFS partitions, you are going to want an SSD. Performance on a mechanical drive is horrible. It takes 30 seconds to boot from the NVMe or SATA SSDs, but a couple of minutes to boot from the WD Black. Another minute to populate the Launch Pad with apps. It has to chase the metadata all over the disk with APFS. And with Catalina it isn't optional.
BIOS Settings for Z390 UD motherboard
The bios settings are best shown in pictures, so:
Build
I put it all together, and then booted with a Linux optical disk to verify that everything worked. It did ok, but when I booted Mac OS it failed on USB, with a circle with a line through it on the screen. You have to "inject" the USB ports. The proper way to do it is with USBInjectAll.kext and a config file, but I used USBInjectAll.kext and an exclude list in the boot string. My exclude list seems to allow all on-board USB ports and the front panel ports to function properly. Two of the back panel ports are USB2 only with this setup. This is due to an apparent 15 port limit on MacOS. I use one of them as the keyboard/mouse input from the KVM switch.
Boot Parameters
The boot parameters on mine look like this:
dart=0 nv_disable=1 kext-dev-mode=1 slide=0 uia_exclude=HS09,HS10,HS11,HS13,HS14,SS03,SS04,SS09,SS10,SS11,SS12,SS13,SS14,USR1,USR2
I can't say what some of the options mean, but they are recommended based on the problems I encountered. YMMV.
kext-dev-mode
tells the kernel it is Ok to load unsigned kernel extensions. Slide
is the
offset from the beginning of memory in which to load the OS. I believe "0" means figure it out. The most interesting
part is the uia_exclude
, which tells USBInjectAll.kext to exclude those USB ports from the ports it
enables. That keeps the number of active USB ports below 16.
USB
USB on a Hackintosh has always been a mystery to me, but I think I finally have it figured out.
The ports on the Z390 UD map as follows:
USB2+3 USB2 ----- USB2+3 ----- -- Not Used -- USB2 ---- Not Used ----
01 02 03 04 05 06 07 08 09 10 11 12 13 14 USR1 USR2
HS01, HS02, HS03, HS04, HS05, HS06, HS07, HS08, N/A , N/A , XXX , HS12, N/A , N/A , N/A , N/A
SS01, SS02, XXX , XXX , SS05, SS06, SS07, SS08, N/A , N/A , N/A , N/A , N/A , N/A , N/A , N/A
The "HS" is high speed (USB2) while the "SS" is super speed (USB3). "XXX" means they exist but are disabled in the boot string, and "N/A" means they don't appear on the motherboard at all, but still have to be disabled.
Port HS12 is a port on the USB2 header on the motherboard. It hooks to the WiFi/Bluetooth card for Bluetooth. If you have need of the other USB2 port on the internal USB2 connector, you will need to remove "HS11" from the exclude list, and modify the Bluetooth cable connector to bring out the pins for the other port. The connector uses standard 0.1" header female pins.
The picture shows the ports as they appear on the motherboard and front panel. Of course the front panel is on the HAF XB EVO, but the two ports will be numbered 07 and 08 as long as the USB3 front panel connector on the motherboard is hooked to your front panel. Don't look for USB3 only ports (the blue box) - there aren't any. 05 and 06 were, but when I saw the picture I found I could make them USB2 + USB3.
EFI
The drivers I had to add to /EFI/CLOVER/drivers64UEFI
were:
- ApfsDriverLoader-64.efi (APFS driver so Clover knows how to access an APFS drive)
- AptioMemoryFix-64.efi (For memory mapping in AMI Aptio UEFI BIOS)
- OsxAptioFix2Drv.efi (Not supposed to be required, but stops random reboots)
- PartitionDxe-64.efi (Supports Apple partition map)
The kexts I added to /EFI/CLOVER/kexts/Other
are:
- FakeSMC.kext (All Hacks need this to boot)
- IO80211Family.kext (Realtek ethernet).
- Lilu.kext (Patcher)
- VoodooHDA.kext (Audio)
- USBInjectAll.kext (Opens all of the USB ports)
- WhateverGreen.kext (Lilu plugin for video)
You make the bootable USB stick by formatting Journaled, GUID Partition Map, name it MacBootUSB, then run the install media creator:
sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/MacBootUSB /Applications/Install\ macOS\ Catalina.app --nointeraction
The installer will change the name of the USB stick.
Install Clover on the EFI partition of the USB stick. Using Clover Configurator, open the EFI volume on the USB stick and copy a working EFI folder into the volume. My EFI folder works for the hardware listed above. The thing that matters is the motherboard. The drivers and kexts are the ones that I found to work with the Gigabyte Z390 UD. Be sure to change the serial numbers using Clover Configurator in the SMBIOS section if you use the EFI above.
UPDATE: I switched to Clover r5101, and of course it has different directories and filenames. Instead of /EFI/CLOVER/drivers64UEFI
,
it puts the drivers in /EFI/CLOVER/drivers/UEFI
. They're named the same, but have no -64 suffix. The new minimum driver list is:
- ApfsDriverLoader.efi
- EmuVariableUefi.efi
- NvmExpressDxe.efi
- OsxAptioFix3Drv.efi
- PartitionDxe.efi
Conclusions
What works
Sound, WiFi, Bluetooth, Airdrop, Apple Trackpad II, USB2 & USB3 (2 ports on front, 6 ports on back), ethernet, and video all work.
What doesn't work
Once in a great while, after a power off/on, the audio comes up with 6 x "HDMI" as the available audio ports. Another reset and it works with both the front panel jack and the rear panel jack. It has been weeks since the last time. It shows an S/PDIF, but I don't have a cable to connect a DAC to see if it works.
I haven't figured out how to do a minor update (from 10.14.2 to 10.14.3 for instance). It goes through the install process, and comes up with the same old version. I've had to download the latest full installer and do a fresh install.
What finally works
Carbon Copy Cloner didn't like the NVMe drive much. After a backup, but before finishing the task, the computer would reboot, rendering the backup useless. I solved it by telling CCC to unmount the target drive after backup. That's fine because CCC mounts the target drive if it isn't mounted when the backup starts. A good side effect is that I can't do anything stupid to the backup drive without really trying because it is never mounted during normal operation. A reboot will mount the drive, but the backup will unmount it when done.
FULL DISCLOSURE: With the advent of Apple SOC chips and the dropping of support for a lot of older machines, I've given up on Mac OS, except on my Macs. I've switched to Linux on the workstation, and haven't lost any functionality as far as I can tell. It has only been a week, so I haven't run into all of the snags, but any I have stumbled across were easily solved. The control key vs. the command key is the biggest hurdle, especially since my work machine is still a Mac.