Repository: corpnewt/Hackintosh-Guide Branch: master Commit: 47a00e482432 Files: 17 Total size: 166.5 KB Directory structure: gitextract_s37zdl8q/ ├── Configs/ │ ├── CoffeeLake/ │ │ └── config.plist │ ├── Haswell/ │ │ └── config.plist │ ├── Ivy Bridge/ │ │ └── config.plist │ ├── KabyLake/ │ │ └── config.plist │ └── Skylake/ │ └── config.plist ├── README.md ├── SUMMARY.md ├── book.json ├── building-the-usb-installer.md ├── clover-setup.md ├── config.plist-basics.md ├── config.plist-per-hardware/ │ ├── coffee-lake.md │ ├── haswell.md │ ├── ivy-bridge.md │ ├── kaby-lake.md │ └── skylake.md └── gathering-kexts.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: Configs/CoffeeLake/config.plist ================================================ ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== Comment Fix 300-series RTC Bug Disabled Find oAqTU1RBUwE= Replace oAqRCv8L//8= DropTables Signature DMAR Signature MATS FixHeaders HaltEnabler SSDT Generate PluginType Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 XMPDetection Yes Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id BwCbPg== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership Graphics Inject GUI Scan Entries Tool KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02726902CDH69F1M ROM UseMacAddr0 SMBIOS BoardSerialNumber C02726902CDH69F1M ProductName iMac18,1 SerialNumber C02TX0VDH7JY SmUUID 91492A73-595C-4D97-A6FC-2B5D3ED1B54D SystemParameters InjectKexts Yes InjectSystemID ================================================ FILE: Configs/Haswell/config.plist ================================================ ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change EHC1 to EH01 Disabled Find RUhDMQ== Replace RUgwMQ== Comment change EHC2 to EH02 Disabled Find RUhDMg== Replace RUgwMg== Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders HaltEnabler SSDT Generate PluginType Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 XMPDetection Yes Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AwAiDQ== USB FixOwnership Graphics Inject GUI Scan Entries Tool KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02532300QXG2Y7AD ROM UseMacAddr0 SMBIOS BoardSerialNumber C02532300QXG2Y7AD ProductName iMac15,1 SerialNumber C02Q6FYUFY10 SmUUID C495EE18-C8EA-4100-8CAD-3099AC27772F SystemParameters InjectKexts Yes InjectSystemID ================================================ FILE: Configs/Ivy Bridge/config.plist ================================================ ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change EHC1 to EH01 Disabled Find RUhDMQ== Replace RUgwMQ== Comment change EHC2 to EH02 Disabled Find RUhDMg== Replace RUgwMg== Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature SSDT TableId CpuPm Signature SSDT TableId Cpu0Ist Signature DMAR Signature MATS FixHeaders SSDT Generate Boot Arguments keepsyms=1 debug=0x100 -xcpm -v DefaultVolume LastBootedVolume Timeout 5 XMPDetection Yes Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id CgBmAQ== USB FixOwnership Graphics Inject GUI Scan Entries Tool KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02253902J9F2FRCB ROM UseMacAddr0 SMBIOS BoardSerialNumber C02253902J9F2FRCB ProductName iMac13,2 SerialNumber C02JX0KSDNCW SmUUID FDDCE665-D5C0-4738-8F80-77380686E42B SystemParameters InjectKexts Yes InjectSystemID ================================================ FILE: Configs/KabyLake/config.plist ================================================ ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders HaltEnabler SSDT Generate PluginType Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 XMPDetection Yes Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AAASWQ== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership Graphics Inject GUI Scan Entries Tool KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02726902CDH69F1M ROM UseMacAddr0 SMBIOS BoardSerialNumber C02726902CDH69F1M ProductName iMac18,1 SerialNumber C02TX0VDH7JY SmUUID 91492A73-595C-4D97-A6FC-2B5D3ED1B54D SystemParameters InjectKexts Yes InjectSystemID ================================================ FILE: Configs/Skylake/config.plist ================================================ ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders HaltEnabler SSDT Generate PluginType Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 XMPDetection Yes Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AAASGQ== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership Graphics Inject GUI Scan Entries Tool KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C026511044NGPF78C ROM UseMacAddr0 SMBIOS BoardSerialNumber C026511044NGPF78C ProductName iMac17,1 SerialNumber C02SVTZ7GG7L SmUUID B5191FBD-72A2-4668-B53D-1A151A414089 SystemParameters InjectKexts Yes InjectSystemID ================================================ FILE: README.md ================================================ # Getting Started ## So You Want A Vanilla Install? #### What does that even mean? A vanilla setup implies that the OS itself remains relatively untouched - and that the bulk of the Hackintosh-related kexts, patches, etc are contained on the EFI partition. For all intents and purposes, a vanilla install's main partition is _identical_ to that of an official Apple computer. **Quick Terms Glossary** There's a number of terms you'll be seeing throughout this guide - I'll outline a few of them and their definitions here: * _Clover_ - this is the bootloader we'll be using. Real macs have a custom firmware that allows them to boot macOS. PC hardware needs a little help to get this working; Clover helps us achieve that. It also handles kext injection, ACPI renames, kext patches, and a ton of other functions. * _Kexts_ - the word "kext" is actually the combination of **K**ernel **Ext**ension; and you can think of kexts simply as drivers for macOS. * _Config.plist_ - this is the file that tells Clover what to do. It's an XML formatted property list \(looks very similar to HTML\) and is one of the most important parts of setting up your Hackintosh. * _OOB_ - an acronym for _Out Of the Box_ that implies working support without tweaking. * More will be added as I work on this guide \(probably\) ## PreRequisites This guide focuses on Desktops _ONLY_. There are other guides out there for laptops \(see [RehabMan's guide](https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/) at TMac\) - but they're often _much more specific_ than this guide will be. We'll need a few things to get us started: 1. An 8+GB USB flash drive 2. The Install OS X/macOS.app \(preferably downloaded direct from the app store\) 3. \_\_[_Clover's Install Package_](https://github.com/Dids/clover-builder/releases) __\(courtesy of Dids\) 4. [_Clover Configurator_](http://mackie100projects.altervista.org/download-clover-configurator/) \(the brave can edit with any text editor - but CC is typically quicker\) * Make sure you get the _Global_ edition 5. \_\_[_VirtualSMC.kext_](https://github.com/acidanthera/VirtualSMC/releases) - this supercedes _FakeSMC.kext_ as our SMC emulator and either _VirtualSMC_ or _FakeSMC_ is vital to booting our Hackintosh. Without one of them, we'd never boot. 6. Any other kexts for our mobo/etc * We'll go over this in the next section! 7. Some patience, persistence, and google-fu ================================================ FILE: SUMMARY.md ================================================ # Table of contents * [Getting Started](README.md) * [Gathering Kexts](gathering-kexts.md) * [Building the USB Installer](building-the-usb-installer.md) * [Clover Setup](clover-setup.md) * [Config.plist Basics](config.plist-basics.md) ## Config.Plist Per Hardware * [Ivy Bridge](config.plist-per-hardware/ivy-bridge.md) * [Haswell](config.plist-per-hardware/haswell.md) * [Skylake](config.plist-per-hardware/skylake.md) * [Kaby Lake](config.plist-per-hardware/kaby-lake.md) * [Coffee Lake](config.plist-per-hardware/coffee-lake.md) ================================================ FILE: book.json ================================================ { "plugins": ["theme-api"], "pluginsConfig": { "theme-api": { "theme": "dark" } } } ================================================ FILE: building-the-usb-installer.md ================================================ # Building the USB Installer Once you have your 8+GB USB installer, we need to make sure it's set up properly. If you don't plan on patching the installer \(and I don't\) - you want the USB setup the following way: * GUID Partition Map * 1 Partition * OS X Extended \(Journaled\) To do this, fire up the Terminal \(located in `/Applications/Utilities`\) and type `diskutil list`. This will give you a list of all the connected disks and their partitions. Take note of the disk identifier for your USB drive. **DO NOT GUESS THIS AS WE ARE ABOUT TO ERASE IT!** Then run the following replacing `disk#` with your actual identifier: ```text diskutil partitionDisk /dev/disk# GPT JHFS+ "USB" 100% ``` This will partition the disk as listed above and rename it to "USB". You can now run the corresponding command from [Apple's own instructions](https://support.apple.com/en-us/HT201372) - for this example, we'll be using the Mojave command: ```text sudo "/Applications/Install macOS Mojave.app/Contents/Resources/createinstallmedia" --volume /Volumes/USB ``` _This will take some time, and it doesn't output much for status updates._ It can take upwards of 30-40 minutes, so just be patient. Grab a cup of coffee, read the news, catch up with friends and family - you'll be here for a bit When this completes, you will have a USB installer that can boot on a _real Mac_. We just need to get the Hackintosh-related stuff set up, and we'll be in business! For those that are timid around the command line - I _did_ put together [a script](https://github.com/corpnewt/USB-Installer-Creator) awhile back that can perform these actions for you. ================================================ FILE: clover-setup.md ================================================ # Clover Setup ## Installing Clover Fire up your Clover install package. On the 3rd page of the installer **make sure to select your USB as the destination**. We also want to **Customize** the installation - as the defaults are pretty lackluster. ![3rd Page of the Clover Installer - Note the "Customize" button in the bottom left](<.gitbook/assets/screen-shot-2019-08-28-at-7.20.46-pm (1) (1).png>) The _usual_ options you want to check in the Customize menu are shown in the following screenshots with an explanation of each after (**Note**: any non-Z370 300-series board will need _EmuVariableUefi-64_ as well - it is located under _UEFI Drivers -> Additional drivers_ in current Clover packages): ![Recommended Customization Settings](.gitbook/assets/screen-shot-2019-08-28-at-7.21.14-pm.png) * _Install Clover for UEFI booting only_ * _Install Clover to the ESP_ * Under _UEFI Drivers:_ * _AptioMemoryFix_ (the new hotness that includes NVRAM fixes, as well as better memory management) * **Note:** You can use _OsxAptioFix3Drv_ located in _UEFI Drivers -> Memory fix drivers_ if using the official Clover installer from SourceForge. Optionally, you can download the final release of _AptioMemoryFix_ from [here](https://github.com/acidanthera/AptioFixPkg/releases) * _HFSPlus_ (or _VBoxHfs_) - one of these is required for Clover to see and boot HFS+ volumes. If you see the option to enable it in the installer, make sure it's selected - if you don't see it in the installer, verify that one of them exists in your Clover installs efi drivers folder * _ApfsDriverLoader_ - (Available in Dids' Clover builds - or [here](https://github.com/acidanthera/ApfsSupportPkg/releases)) this allows Clover to see and boot from APFS volumes by loading _apfs.efi_ from the ApfsContainer located on block device (if using _AptioMemoryFix_ as well, ensure you have R21 or newer) _**That's it.**_ If you don't need FileVault, and are setting up a standard UEFI installation, these are the only entries you should need. You may find more than the above selected in the _UEFI Drivers_ section and subsections - feel free to deselect any not listed. There are some that can even cause conflicts with other settings/kexts (Like [_SMCHelper-64.efi_](https://github.com/acidanthera/VirtualSMC/blob/master/Docs/FAQ.md)), so it's a good idea to run as lean as possible here. _Where do they install?_ If you need to manually make changes to the efi drivers on your Clover installation (or just verify that you have what you need), their location may differ depending on your Clover version. * Clover version up to r4982: `EFI -> CLOVER -> drivers64UEFI` * Clover versions r4983 to r4985: `EFI -> CLOVER -> UEFIDrivers` * Will still use `EFI -> CLOVER -> drivers64UEFI` if the above is not found * Clover versions r4986 to present: `EFI -> CLOVER -> drivers -> UEFI` * Will still use `EFI -> CLOVER -> drivers64UEFI` if the above is not found ## Copying Kexts Once Clover has been installed, you'll see the EFI partition of your USB on the desktop - we want to navigate to `EFI -> CLOVER -> kexts -> Other` and copy the kexts we downloaded earlier there. Make sure you unzip the kexts before copying them over. Any _dSYM_ files can be ignored, we only want the _.kext_ files. _But what about the 10.xx folders?_ When Clover is looking to inject kexts, the kexts in the _10.xx_ folders are only injected if Clover determines that the folder name matches the booted OS version. There are very few kexts that are OS version-dependent though, and updating the OS while forgetting to migrate the kexts can leave you in an unbootable state. The kexts located in the _Other_ folder will inject regardless of the detected OS version. ================================================ FILE: config.plist-basics.md ================================================ # Config.plist Basics The _config.plist_ resides at _/Volumes/EFI/EFI/CLOVER/config.plist_ and is one of the tougher files to work with for those new to the Hackintosh world. We'll go into some of the basics of the structure here, then break out into different sections for different hardware config setup. ## What Is It? The _config.plist_ is an XML property list. XML is a markup language that shares a lot of similarities with HTML. This means you've got a few different data types available to you, and most of the structure revolves around keeping track of opening and closing tags. ### The Structure When Clover explores a _config.plist_ it expects to have certain parts in certain spots. The order and scope of your config are very important as putting information in the wrong spot can effectively hide it from Clover. You can view the general layout that Clover expects on the [Clover Wiki](https://sourceforge.net/p/cloverefiboot/wiki/Configuration/#configplist-structure). ### Data Types There are a few major data types we'll run into when working with the config. I'll outline the most common here. **Note -** I'm only using the opening tags here, when actually working with the following types we'll need to make sure we clean up after ourselves and close our tags. #### Strings `This is a string` Strings are just text. Not terribly crazy - you will see them used a lot for comments and other such things. #### Integers `1` These are just whole numbers. Again, nothing too wild here. #### Data `RXh0ZXJuYWw=` While this looks similar to the _strings_ above, it's actually the _base64_ representation of some data. _Wtf does that mean?_ You can read up on it [here](https://en.wikipedia.org/wiki/Base64), but in summation - it's a slick way to save binary data in a text format without it getting lost when copied, moved, etc. What's even more crazy is that you can take the above base64 data and convert it to ASCII via the following in Terminal.app: `echo RXh0ZXJuYWw= | python -m base64 -d && echo` This will output `External` on the next line. We use the `&& echo` to output a newline after our text is spit out - this makes it easier to read. You can also convert from ASCII to base64 (handy for working with ACPI renames - more about that later) with the following in Terminal.app: `echo -n External | base64` This will spit out `RXh0ZXJuYWw=` which is exactly what we'd expect. **Note -** Many plist editors (Clover Configurator, Xcode, etc) will display data as _hexadecimal_ instead of _base64_, so make sure you pay attention to which you're using. #### Booleans `` or `` These are _boolean_ values. You can think of them as _on/off_ values. Unlike the other types listed here, these are both an opening and closing tag at once so they don't require a matching tag. #### Arrays ```markup Bob Jim Chris ``` This is an ordered list of items. If we wanted to gather up a collection of names, we could store them as `` values in our `` like the above example. They are accessed by index (which is just the number they're at in the list). #### Dictionaries ```markup Name Bob Age 20 Knows XML ``` This denotes a _dictionary_. These, like _arrays_ are great for storing extra collections of data, but instead of being index based, they utilize _key/value_ organization. As you can see from the above example, we are able to store specific data about _Bob_ through the use of these _key/value_ pairs. All the keys are just text (like our strings). ### Examples Let's go over some _before/after_ examples with some pretend _config.plist_ data to hopefully remove some of the mystery that happens in this wizard's closet. #### Change True/False In this first example, we're just going to change a boolean value from true to false, or vise versa. I'll use the _Disabled_ value inside a _KextsToPatch_ entry to make this actually a real-world example. First, I'll give us the _KextsToPatch_ entry we'll be working with: ```markup Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` Whew, that might look like a lot up front, but we'll break things down. Firstly, I'll go over what the different keys mean: * `Comment` - this is just a comment to describe what the patch is doing. * `Disabled` - this is a bit counter-intuitive, but it's a boolean value that determines whether or not this patch is disabled. If set to ``, the patch will be disabled, and Clover will ignore it. If set to `` the patch is _not_ disabled, and it will be applied. * `InfoPlistPatch` - this is a boolean value that tells Clover if we're patching the Info.plist of the kext instead of the binary. * `Name` - this is the actual kext we intend to patch. * `Find` - this is the base64 data we want to look for in the binary to patch. * `Replace` - this is what we will be replacing the `Find` data with (if we find it). Alright, now I'll explain what this patch is actually for. Via the information in this patch, Clover will look for the _AppleAHCIPort_ kext and search for `RXh0ZXJuYWw=` (which becomes `External` when we decode the data) and replace it with `SW50ZXJuYWw=` (which becomes `Internal` when we decode it). The end result is that drives that are hot-pluggable (and normally considered external drives) will be displayed as internal drives and not have the orange icon on the desktop. This patching happens on the fly, and is non-destructive - meaning that the _AppleAHCIPort_ kext remains untouched on the system. So - I guess at this point, I should explain how we would change a boolean value to disable this patch. I mentioned before how the `Disabled` key works - wo we'll change the `` on the next line to `` which sets this patch to _disabled_ like so: ```markup Comment External icons patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` Not too scary, right? #### Adding a New Dict to an Array This is one that I see quite often that can be a bit overwhelming for new folks. If you are told to add a new patch to _config.plist -> ACPI -> DSDT -> Patches_, we'd first pop open our _config.plist_ and see what we're working with. We'll assume for this example that the config looks like so: ```markup ACPI DSDT Fixes FixHPET FixIPIC FixRTC FixTMR Patches Comment change OSID to XSID (to avoid match against _OSI XOSI patch) Disabled Find T1NJRA== Replace WFNJRA== Comment change _OSI to XOSI Disabled Find X09TSQ== Replace WE9TSQ== ``` As we look down the config, starting at the top, we can follow that path I outlined before. We see _ACPI_, and under that _DSDT_. Then underneath _DSDT_ is _Fixes_ and in-line with that is _Patches_. We're not concerned with the _Fixes_ section currently, so we'll just ignore that and focus on the _Patches_. Firstly, I'll point out that under the `Patches` is an opening array tag (``) - and then we have 2 dictionaries - each with similar keys to what we worked with in the prior example (_Comment_, _Disabled_, _Find_, _Replace_). After the dictionaries, we see the closing array tag (``). Our goal is to add a new dictionary in between the `` and `` tags while also avoiding slicing up the other existing dictionaries. The data that we'll be adding looks like so: ```markup Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== ``` Like I mentioned prior, arrays are ordered - but for this example, it doesn't matter whether we put our new dictionary before the existing 2, after them, or in between them. I'm going to add it to the end though - just above that last `` tag like so: ```markup ACPI DSDT Fixes FixHPET FixIPIC FixRTC FixTMR Patches Comment change OSID to XSID (to avoid match against _OSI XOSI patch) Disabled Find T1NJRA== Replace WFNJRA== Comment change _OSI to XOSI Disabled Find X09TSQ== Replace WE9TSQ== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== ``` #### More Examples I'll try to keep my ears open for more plist editing examples that people have issues with, and add them as needed. ================================================ FILE: config.plist-per-hardware/coffee-lake.md ================================================ --- description: >- We'll go through the config.plist sections, one at a time for a Coffee Lake desktop setup. --- # Coffee Lake ## Starting Points I like to start with either the stock _config.plist_ that Clover gives you, or with just a blank canvas. In the next examples, I'll show you how I set things up from scratch; if you start from somewhere else, you may have more things checked/set than I do - but you'll want to follow along with what I do. I'll also include the raw xml examples too in order to show those that work with a text editor (as I prefer to). ## ACPI The default Clover settings are pretty overdone and can cause some issues. We'll keep this section fairly minimal, and I'll go through a bit of _why we do that_ for each part as well. ### Raw XML ```markup ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders SSDT Generate PluginType ``` ### Clover Configurator Screenshots ![Coffee Lake Acpi CC Section 1](<../.gitbook/assets/image (7).png>) ![Coffee Lake Acpi CC Section 2](<../.gitbook/assets/image (64).png>) ![Coffee Lake Read-Only RTC Fix](<../.gitbook/assets/image (17).png>) ### Explanation #### Patches: The first thing we'll go over is the _Patches_ section. This section allows us to dynamically rename parts of the DSDT via Clover. Since we're not running a real mac, and macOS is pretty particular with how things are named, we can make non-destructive changes to keep things mac-friendly. We have three entries here: * _change XHCI to XHC -_ helps avoid a conflict with built-in USB injectors * _change XHC1 to XHC_ - helps avoid a conflict with built-in USB injectors * _change SAT0 to SATA_ - for potential SATA compatibility You **may** also need the following Read-Only RTC fix (read about it [here](https://www.hackintosh-forum.de/forum/thread/39846-asrock-z390-taichi-ultimate/?pageNo=2)) if you have a _true_ 300-series board (non Z370) and you suffer a boot hang around this point: ![Read-Only RTC Boot Stall](<../.gitbook/assets/image (40).png>) The raw XML for that specific patch looks like so: ```markup Comment Fix 300-series RTC Bug Disabled Find oAqTU1RBUwE= Replace oAqRCv8L//8= ``` #### Fixes: If we look then at the _Fixes_ section, we'll see that we have a few things checked (there are 2 pages, so I included 2 screenshots): * _FixShutdown_ - this can help with some boards that prefer to restart instead of shutdown. Sometimes it can cause shutdown issues on other boards (ironic, right?), so if you have issues shutting down with this enabled, look at disabling it. * The remaining fixes help avoid IRQ conflicts and etc, and are not known to cause issues. They may not be necessary for all hardware, but do not negatively impact anything if applied. #### Drop Tables: We touched in gently on DSDT with our _Patches_ section - and this is a a bit of an extension of that. SSDT is like a sub-section of DSDT. The _Drop Tables_ section allows us to omit certain SSDT tables from loading (as I mentioned before, mac and PC DSDT is different, and macOS can be rather picky). The two that I've added are as follows: * _DMAR_ - this prevents some issues with Vt-d; which is PCI passthrough for VMs, and not very functional (if at all?) on Hackintoshes. * _MATS_ - with High Sierra on up this table is parsed, and can sometimes contain unprintable characters that can lead to a kernel panic. #### FixHeaders and PluginType: The only other things we've done on this page are enable these two checkboxes. * _FixHeaders_ - this is just a double-up of our _MATS_ table dropping. This checkbox tells Clover to sanitize headers to avoid kernel panics related to unprintable characters. * _PluginType_ - this injects some DSDT data to get _X86PlatformPlugin_ to load - giving us a leg-up on native CPU power management. This setting only works on Haswell and newer CPUs though. ## Boot We don't need to do _too much_ here, but we'll tweak a few things. ### Raw XML ```markup Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 ``` ### Clover Configurator Screenshots ![Coffee Lake Boot CC Section](<../.gitbook/assets/image (15) (2).png>) ### Explanation #### Arguments: We have a few boot args set here: * `-v` - this enables verbose mode, which shows all the _behind-the-scenes_ text that scrolls by as you're booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you an inside look at the boot process, and can help you identify issues, problem kexts, etc. * `dart=0` - this is just an extra layer of protection against Vt-d issues. * `debug=0x100` - this prevents a reboot on a kernel panic. That way you can (hopefully) glean some useful info and follow the breadcrumbs to get past the issues. * `keepsyms=1` - this is a companion setting to `debug=0x100` that tells the OS to also print the symbols on a kernel panic. That can give some more helpful insight as to what's causing the panic itself. #### DefaultBootVolume and Timeout: These are the only other settings I've updated in this section. * _DefaultBootVolume_ - this uses NVRAM to remember which volume was last booted by Clover, and auto-select that at the next boot. * _Timeout_ - this is the number of seconds before the _DefaultBootVolume_ auto-boots. You can set this to `-1` to avoid all timeout, or to `0` to skip the GUI entirely. If set to `0`, you can press any keys at boot to get the GUI to show back up in case of issues. ## Boot Graphics Nothing here - just the stock settings. You could adjust this if Clover's scaling needs changes, but I don't mess with it. ## Cpu Again, nothing here gets changed in most setups I've worked with. ## Devices We'll handle some slick property injection for _WhateverGreen_ here, and do some basic audio setup. ### Raw XML ```markup Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id BwCbPg== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership ``` ### Clover Configurator Screenshots ![Coffee Lake Devices CC Section - iGPU](<../.gitbook/assets/image (74).png>) ![Coffee Lake Devices CC Section - iGPU Connectorless](<../.gitbook/assets/image (48).png>) ![Device-Id fake for i3-8100 UHD 630](<../.gitbook/assets/image (9).png>) ### Explanation #### Fake ID: This section remains empty for our example setup. In the past, almost-supported iGPUs (like the HD 4400) would get faked to a supported iGPU here, but we'll be using the cleaner Properties section for this. #### USB: Under this section, we ensure that _Inject_ and _FixOwnership_ are selected to avoid issues with hanging at a half-printed line somewhere around the `Enabling Legacy Matching` verbose line. You can also get past that by enabling _XHCI Hand Off_ in BIOS. #### Audio: Here we set our audio to inject _Layout 1_ - this may or may not be compatible with your codec, but you can check on [_AppleALC's Supported Codec Page_](https://github.com/acidanthera/AppleALC/wiki/Supported-codecs). We also enabled _ResetHDA_ which puts the codec back in a neutral state between OS reboots. This prevents some issues with no audio after booting to another OS and then back. #### Properties: This section is setup via Headkaze's [_Intel Framebuffer Patching Guide_](https://www.insanelymac.com/forum/topic/334899-intel-framebuffer-patching-using-whatevergreen/?tab=comments#comment-2626271) and applies only one actual property to begin, which is the _ig-platform-id_. The way we get the proper value for this is to look at the ig-platform-id we intend to use, then swap the pairs of hex bytes. If we think of our ig-plat as `0xAABBCCDD`, our swapped version would look like `0xDDCCBBAA`. The two ig-platform-id's we use are as follows: * `0x3E9B0007` - this is used when the iGPU is used to drive a display * `07009B3E` when hex-swapped * `BwCbPg==` when the hex-swapped version is converted to base64 * `0x3E920003` - this is used when the iGPU is only used for compute tasks, and doesn't drive a display * `0300923E` when hex-swapped * `AwCSPg==` when the hex-swapped version is converted to base64 Worth noting that for 10.12 -> 10.13.5, you would need to fake the iGPU to the same values in the Kaby Lake guide, as this was before native Coffee Lake iGPU showed up. We also add 2 more properties, _framebuffer-patch-enable_ and _framebuffer-stolenmem_. The first enables patching via _WhateverGreen.kext,_ and the second sets the min stolen memory to 19MB. I added another screenshot as well that shows a `device-id` fake for the i3-8100's UHD 630. This has a different device id than the UHD 630 found on the 8700k, for instance (`3e918086` vs `3e928086` ). For this - we follow a similar procedure as our above ig-platform-id hex swapping - but this time, we only work with the first two pairs of hex bytes. If we think of our device id as `0xAABB0000`, our swapped version would look like `0xBBAA0000`. We don't do anything with the last 2 pairs of hex bytes. The device-id fake is setup like so: * `0x3e920000` - this is the device id for the UHD 630 found on an 8700k * `923e0000` when hex swapped * `kj4AAA==` when the hex-swapped version is converted to base64 If using the raw xml, your Properties would look like this (make sure to still use the appropriate ig-platform-id for your setup): ```markup Properties PciRoot(0x0)/Pci(0x2,0x0) device-id kj4AAA== AAPL,ig-platform-id BwCbPg== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== ``` ### Pink/Purple Tint? I've seen a couple users report a pink tint when using HDMI with the UHD 630 iGPU. I did some experimenting on my own system and was able to work around it a couple different ways. #### Force RGB I saw the issue in [a reddit post](https://www.reddit.com/r/hackintosh/comments/9pufo8/8700k\_igpu\_has\_a\_purple\_tint\_on\_mojave/), and the solution was to apply a custom override for your display to force it to use RGB instead of YCbCr outlined [here](https://www.mathewinkson.com/2013/03/force-rgb-mode-in-mac-os-x-to-fix-the-picture-quality-of-an-external-monitor). I wrote [a script](https://github.com/corpnewt/ForceRGB) that wraps around this method and auto-applies the override when it's completed. This worked fine for me, but didn't feel like a _real fix_. Which lead me to dive a bit deeper... #### Connector Types In IOReg I opened up IORegistryExplorer and in the search bar typed `IGPU` (this is sometimes named `GFX0` in ACPI, but Lilu + WhateverGreen should rename it properly) and got the following screen: ![Search for IGPU in IOReg](<../.gitbook/assets/image (78).png>) Once we've located `IGPU` in IOReg, we can clear our search - this reveals all the info around the `IGPU` section while keeping our place: ![IGPU Selected With Search Cleared](<../.gitbook/assets/image (38).png>) As you can see in the above screenshot, I had a few different AppleIntelFramebuffer connections listed. I'm looking for the one that's specifically driving my display - which has the AppleDisplay property. In my case, this was AppleIntelFramebuffer@1. With that selected on the left pane, you can find the `connector-type` property, which was originally set to `<00 04 00 00>` in my case. The connector type can have a few different values: * `<00 04 00 00>` - this is DisplayPort * `<00 08 00 00>` - this is HDMI * `<04 00 00 00>` - this is Digital DVI * `<02 00 00 00>` - this is LVDS (for laptops) * `<01 00 00 00>` - this is just a Dummy port What I noticed in my case was that my HDMI port was listed as a DisplayPort - so I was able to use WhateverGreen's patching abilities to change the connector-type. Since my incorrect port was located at AppleIntelFramebuffer@1, this is port `1`. I needed to enable the port patch in Properties, and then set the connector type to HDMI. I used the following Properties entries for that: * `framebuffer-conX-enable = 01000000` * `framebuffer-conX-type = 00080000` I replaced the `conX` in both patches with `con1` to reflect the port that I am changing, then set the values as listed above. ![](<../.gitbook/assets/image (42).png>) ```markup Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id BwCbPg== device-id kj4AAA== framebuffer-con1-enable AQAAAA== framebuffer-con1-type AAgAAA== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== ``` ![IOReg -\> IGPU -\> AppleIntelFramebuffer@1 After Patching](<../.gitbook/assets/image (10).png>) This also enabled HDMI audio for me as well. ![](<../.gitbook/assets/image (37).png>) ## Disable Drivers We have nothing to do here. ## Gui ### Raw XML ```markup GUI Scan Entries Tool ``` ### Clover Configurator Screenshots ![Coffee Lake Gui CC Section](<../.gitbook/assets/image (67).png>) ### Explanation #### Scan: The only settings I've tweaked on this page are the _Scan_ settings. I've selected _Custom_, then checked everything except _Legacy_ and _Kernel_. This just omits some of the unbootable entries in Clover to clean up the menu. #### Hide Volumes: I haven't added anything here, but you _can_ hide unwanted volumes here. You can do so by either adding the volume's name, or UUID. To hide extra APFS entries, add the following to this list: * `Preboot` * `VM` To hide all Recovery partitions, add `Recovery` to the list. To get the UUID of a drive to hide, you can use the following terminal command: ``` diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev ``` Make sure to replace `diskXsY` with the actual disk number of the volume you'd like to hide. #### Theme: If you want to test out a new theme (and I suggest you look at [_clover-next-black_](https://github.com/al3xtjames/clover-theme-next-black)), you can add the unzipped theme folder to the _/Volumes/EFI/EFI/CLOVER/themes_ directory, then type the name of the folder in the _Theme_ text field to apply it. ## Graphics In the past, we'd setup the iGPU here, but since we already did that via Properties in the _Devices_ section, we have nothing to really configure here. **NOTE**: When Clover detects an Intel iGPU, it _automatically_ enables Intel Injection if the Graphics section doesn't exist in the config.plist. To bypass this, you can explicitly disable injection using the raw XML below, or by clicking the "Inject Intel" button once to check it, and once to uncheck it in CC. ### Raw XML ```markup Graphics Inject ``` ## Kernel And Kext Patches ### Raw XML ```markup KernelAndKextPatches KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (PMHeart) Disabled Find g/sPD4MDBQAA InfoPlistPatch MatchOS 10.14.0 Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External Icons Patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` ### Clover Configurator Screenshots ![Coffee Lake KernelAndKextPatches CC Section](<../.gitbook/assets/image (73).png>) ### Explanation In this section, we've enabled a few settings and added some kext patches. #### Checkboxes: We have a couple checkboxes selected here: * _Apple RTC_ - this ensures that we don't have a BIOS reset on reboot. * _KernelPM_ - this setting prevents writing to MSR 0xe2 which can prevent a kernel panic at boot. #### KextsToPatch: We added 4 different kexts to patch here. Three of them are for USB port limit increases, and the last acts as an _orange icons fix_ - when internal drives are hotpluggable, and treated as external drives. You'll notice that there are MatchOS values set for each of the USB port limit patches. You can remove any of the entries for OS versions you don't intend to run. They won't do any harm being there, but if you want a clean, minimal plist, there's no sense in having them. ## RtVariables And SMBIOS ### Raw XML ```markup RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02726902CDH69F1M ROM UseMacAddr0 SMBIOS BoardSerialNumber C02726902CDH69F1M ProductName iMac18,1 SerialNumber C02TX0VDH7JY SmUUID 91492A73-595C-4D97-A6FC-2B5D3ED1B54D ``` ### Clover Configurator Screenshots ![Coffee Lake RtVariables CC Section](<../.gitbook/assets/image (71).png>) ![Coffee Lake SMBIOS CC Section](<../.gitbook/assets/image (16).png>) ### Explanation For setting up the SMBIOS info, I use acidanthera's [_macserial_](https://github.com/acidanthera/macserial) application. I wrote a [_python script_](https://github.com/corpnewt/GenSMBIOS) that can leverage it as well (and auto-saves to the config.plist when selected). There's plenty of info that's left blank to allow Clover to fill in the blanks; this means that updating Clover will update the info passed, and not require you to also update your config.plist. For this Coffee Lake example, I chose the _iMac18,1_ SMBIOS - this is done intentionally for compatibility's sake. There are two main SMBIOS used for Coffee Lake: * _iMac18,1_ - this is used for computers utilizing the iGPU for displaying. * _iMac18,3_ - this is used for computers using a dGPU for displaying, and an iGPU for compute tasks only. To get the SMBIOS info generated with _macserial_, you can run it with the `-a` argument (which generates serials and board serials for all supported platforms). You can also parse it with `grep` to limit your search to one SMBIOS type. With our _iMac18,1_ example, we would run _macserial_ like so via the terminal: ``` macserial -a | grep -i iMac18,1 ``` Which would give us output similar to the following: ``` iMac18,1 | C02T8SZNH7JY | C02707101J9H69F1F iMac18,1 | C02VXBYDH7JY | C02753100GUH69FCB iMac18,1 | C02T7RY6H7JY | C02706310GUH69FA8 iMac18,1 | C02VD07ZH7JY | C02737301J9H69FCB iMac18,1 | C02TQPYPH7JY | C02720802CDH69FAD iMac18,1 | C02VXYYVH7JY | C02753207CDH69FJC iMac18,1 | C02VDBZ0H7JY | C02737700QXH69FA8 iMac18,1 | C02VP0H6H7JY | C02746300CDH69FJA iMac18,1 | C02VL0W9H7JY | C02743303CDH69F8C iMac18,1 | C02V2NYMH7JY | C02728600J9H69FAD ``` The order is `Product | Serial | Board Serial (MLB)` The `iMac18,1` part gets copied to _SMBIOS -> Product Name_. The `Serial` part gets copied to _SMBIOS -> Serial Number._ The `Board Serial` part gets copied to _SMBIOS -> Board Serial Number_ as well as _Rt Variables -> MLB._ We can create an SmUUID by running `uuidgen` in the terminal (or it's auto-generated via my _GenSMBIOS_ script) - and that gets copied to _SMBIOS -> SmUUID_. We set _Rt Variables -> ROM_ to `UseMacAddr0` which just utilizes our onboard Mac address - this should be unique enough to not conflict with any others. _BooterConfig_ gets set to `0x28`, and _CsrActiveConfig_ is set to `0x3e7` which effectively disables SIP. You can choose a number of other options to enable/disable sections of SIP. Some common ones are as follows: * `0x0` - SIP completely enabled * `0x3` - Allow unsigned kexts and writing to protected fs locations * `0x3e7` - SIP completely disabled ## System Parameters ### Raw XML ```markup SystemParameters InjectKexts Yes InjectSystemID ``` ### Clover Configurator Screenshots ![System Parameters CC Section](<../.gitbook/assets/image (34) (2).png>) ### Explanation #### Inject Kexts: This setting has 3 modes: * `Yes` - this tells Clover to inject kexts from the EFI regardless. * `No` - this tells Clover not to inject kexts from the EFI. * `Detect` - this has Clover inject kexts only if _FakeSMC.kext_ is not in the kext cache. We set it to `Yes` to make sure that all the kexts we added before get injected properly. #### InjectSystemID This setting tells clover to set the SmUUID as the `system-id` at boot - which is important for iMessage and such. ## Saving At this point, you can do _File -> Save_ to save the config.plist. If you have issues saving directly to the EFI, you can save it on the Desktop, then just copy it over. I'll leave the [sample config.plist here](../Configs/CoffeeLake/config.plist) too. ================================================ FILE: config.plist-per-hardware/haswell.md ================================================ --- description: >- We'll go through the config.plist sections, one at a time for a Haswell desktop setup. --- # Haswell ## Starting Points I like to start with either the stock _config.plist_ that Clover gives you, or with just a blank canvas. In the next examples, I'll show you how I set things up from scratch; if you start from somewhere else, you may have more things checked/set than I do - but you'll want to follow along with what I do. I'll also include the raw xml examples too in order to show those that work with a text editor \(as I prefer to\). ## ACPI The default Clover settings are pretty overdone and can cause some issues. We'll keep this section fairly minimal, and I'll go through a bit of _why we do that_ for each part as well. ### Raw XML ```markup ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change EHC1 to EH01 Disabled Find RUhDMQ== Replace RUgwMQ== Comment change EHC2 to EH02 Disabled Find RUhDMg== Replace RUgwMg== Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders SSDT Generate PluginType ``` ### Clover Configurator Screenshots ![Haswell Acpi CC Section 1](../.gitbook/assets/image%20%2861%29.png) ![Haswell Acpi CC Section 2](../.gitbook/assets/image%20%286%29.png) ### Explanation #### Patches: The first thing we'll go over is the _Patches_ section. This section allows us to dynamically rename parts of the DSDT via Clover. Since we're not running a real mac, and macOS is pretty particular with how things are named, we can make non-destructive changes to keep things mac-friendly. We have three entries here: * _change EHC1 to EH01 -_ helps avoid a conflict with built-in USB injectors * _change EHC2 to EH02_ - helps avoid a conflict with built-in USB injectors * _change XHC1 to XHC -_ helps avoid a conflict with built-in USB injectors * _change XHCI to XHC_ - helps avoid a conflict with built-in USB injectors * _change SAT0 to SATA_ - for potential SATA compatibility #### Fixes: If we look then at the _Fixes_ section, we'll see that we have a few things checked \(there are 2 pages, so I included 2 screenshots\): * _FixShutdown_ - this can help with some boards that prefer to restart instead of shutdown. Sometimes it can cause shutdown issues on other boards \(ironic, right?\), so if you have issues shutting down with this enabled, look at disabling it. * The remaining fixes help avoid IRQ conflicts and etc, and are not known to cause issues. They may not be necessary for all hardware, but do not negatively impact anything if applied. #### Drop Tables: We touched in gently on DSDT with our _Patches_ section - and this is a a bit of an extension of that. SSDT is like a sub-section of DSDT. The _Drop Tables_ section allows us to omit certain SSDT tables from loading \(as I mentioned before, mac and PC DSDT is different, and macOS can be rather picky\). The two that I've added are as follows: * _DMAR_ - this prevents some issues with Vt-d; which is PCI passthrough for VMs, and not very functional \(if at all?\) on Hackintoshes. * _MATS_ - with High Sierra on up this table is parsed, and can sometimes contain unprintable characters that can lead to a kernel panic. #### FixHeaders and PluginType: The only other things we've done on this page are enable these two checkboxes. * _FixHeaders_ - this is just a double-up of our _MATS_ table dropping. This checkbox tells Clover to sanitize headers to avoid kernel panics related to unprintable characters. * _PluginType_ - this injects some DSDT data to get _X86PlatformPlugin_ to load - giving us a leg-up on native CPU power management. This setting only works on Haswell and newer CPUs though. ## Boot We don't need to do _too much_ here, but we'll tweak a few things. ### Raw XML ```markup Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 ``` ### Clover Configurator Screenshots ![Haswell Boot CC Section](../.gitbook/assets/image%20%2862%29.png) ### Explanation #### Arguments: We have a few boot args set here: * `-v` - this enables verbose mode, which shows all the _behind-the-scenes_ text that scrolls by as you're booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you an inside look at the boot process, and can help you identify issues, problem kexts, etc. * `dart=0` - this is just an extra layer of protection against Vt-d issues. * `debug=0x100` - this prevents a reboot on a kernel panic. That way you can \(hopefully\) glean some useful info and follow the breadcrumbs to get past the issues. * `keepsyms=1` - this is a companion setting to `debug=0x100` that tells the OS to also print the symbols on a kernel panic. That can give some more helpful insight as to what's causing the panic itself. #### DefaultBootVolume and Timeout: These are the only other settings I've updated in this section. * _DefaultBootVolume_ - this uses NVRAM to remember which volume was last booted by Clover, and auto-select that at the next boot. * _Timeout_ - this is the number of seconds before the _DefaultBootVolume_ auto-boots. You can set this to `-1` to avoid all timeout, or to `0` to skip the GUI entirely. If set to `0`, you can press any keys at boot to get the GUI to show back up in case of issues. ## Boot Graphics Nothing here - just the stock settings. You could adjust this if Clover's scaling needs changes, but I don't mess with it. ## Cpu Again, nothing here gets changed in most setups I've worked with. ## Devices We'll handle some slick property injection for _WhateverGreen_ here, and do some basic audio setup. ### Raw XML ```markup Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AwAiDQ== USB FixOwnership ``` ### Clover Configurator Screenshots ![Haswell Devices CC Section - iGPU](../.gitbook/assets/image%20%2846%29.png) ![Haswell Devices CC Section - iGPU \(Connectorless\) + dGPU](../.gitbook/assets/image%20%2827%29.png) ![Device-Id fake for HD 4400 --&gt; HD 4600](../.gitbook/assets/image%20%288%29.png) ### Explanation #### Fake ID: This section remains empty for our example setup. In the past, almost-supported iGPUs \(like the HD 4400\) would get faked to a supported iGPU here, but we'll be using the cleaner Properties section for this. #### USB: Under this section, we ensure that _Inject_ and _FixOwnership_ are selected to avoid issues with hanging at a half-printed line somewhere around the `Enabling Legacy Matching` verbose line. You can also get past that by enabling _XHCI Hand Off_ in BIOS. #### Audio: Here we set our audio to inject _Layout 1_ - this may or may not be compatible with your codec, but you can check on [_AppleALC's Supported Codec Page_](https://github.com/acidanthera/AppleALC/wiki/Supported-codecs). We also enabled _ResetHDA_ which puts the codec back in a neutral state between OS reboots. This prevents some issues with no audio after booting to another OS and then back. #### Properties: This section is setup via Headkaze's [_Intel Framebuffer Patching Guide_](https://www.insanelymac.com/forum/topic/334899-intel-framebuffer-patching-using-whatevergreen/?tab=comments#comment-2626271) and applies only one actual property to begin, which is the _ig-platform-id_. The way we get the proper value for this is to look at the ig-platform-id we intend to use, then swap the pairs of hex bytes. If we think of our ig-plat as `0xAABBCCDD`, our swapped version would look like `0xDDCCBBAA`. The two ig-platform-id's we use are as follows: * `0x0D220003` - this is used when the iGPU is used to drive a display * `0300220D` when hex-swapped * `AwAiDQ==` when the hex-swapped version is converted to base64 * `0x04120004` - this is used when the iGPU is only used for compute tasks, and doesn't drive a display * `04001204` when hex-swapped * `BAASBA==` when the hex-swapped version is converted to base64 I added another screenshot as well that shows a `device-id` fake in case you have an HD 4400 which is unsupported in macOS. For this - we follow a similar procedure as our above ig-platform-id hex swapping - but this time, we only work with the first two pairs of hex bytes. If we think of our device id as `0xAABB0000`, our swapped version would look like `0xBBAA0000`. We don't do anything with the last 2 pairs of hex bytes. The device-id fake is setup like so: * `0x04120000` - this is the device id for HD 4600 which _does_ have support in macOS * `12040000` when hex swapped * `EgQAAA==` when the hex-swapped version is converted to base64 If using the raw xml, your Properties would look like this \(make sure to still use the appropriate ig-platform-id for your setup\): ```markup Properties PciRoot(0x0)/Pci(0x2,0x0) device-id EgQAAA== AAPL,ig-platform-id AwAiDQ== ``` ## Disable Drivers We have nothing to do here. ## Gui ### Raw XML ```markup GUI Scan Entries Tool ``` ### Clover Configurator Screenshots ![Haswell Gui CC Section](../.gitbook/assets/image%20%2867%29.png) ### Explanation #### Scan: The only settings I've tweaked on this page are the _Scan_ settings. I've selected _Custom_, then checked everything except _Legacy_ and _Kernel_. This just omits some of the unbootable entries in Clover to clean up the menu. #### Hide Volumes: I haven't added anything here, but you _can_ hide unwanted volumes here. You can do so by either adding the volume's name, or UUID. To hide extra APFS entries, add the following to this list: * `Preboot` * `VM` To hide all Recovery partitions, add `Recovery` to the list. To get the UUID of a drive to hide, you can use the following terminal command: ```text diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev ``` Make sure to replace `diskXsY` with the actual disk number of the volume you'd like to hide. #### Theme: If you want to test out a new theme \(and I suggest you look at [_clover-next-black_](https://github.com/al3xtjames/clover-theme-next-black)\), you can add the unzipped theme folder to the _/Volumes/EFI/EFI/CLOVER/themes_ directory, then type the name of the folder in the _Theme_ text field to apply it. ## Graphics In the past, we'd setup the iGPU here, but since we already did that via Properties in the _Devices_ section, we have nothing to really configure here. **NOTE**: When Clover detects an Intel iGPU, it _automatically_ enables Intel Injection if the Graphics section doesn't exist in the config.plist. To bypass this, you can explicitly disable injection using the raw XML below, or by clicking the "Inject Intel" button once to check it, and once to uncheck it in CC. ### Raw XML ```markup Graphics Inject ``` ## Kernel And Kext Patches ### Raw XML ```markup KernelAndKextPatches KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (PMHeart) Disabled Find g/sPD4MDBQAA InfoPlistPatch MatchOS 10.14.0 Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External Icons Patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` ### Clover Configurator Screenshots ![Haswell KernelAndKextPatches CC Section](../.gitbook/assets/image%20%2849%29.png) ### Explanation In this section, we've enabled a few settings and added some kext patches. #### Checkboxes: We have a couple checkboxes selected here: * _Apple RTC_ - this ensures that we don't have a BIOS reset on reboot. * _KernelPM_ - this setting prevents writing to MSR 0xe2 which can prevent a kernel panic at boot. #### KextsToPatch: We added 4 different kexts to patch here. Three of them are for USB port limit increases, and the last acts as an _orange icons fix_ - when internal drives are hotpluggable, and treated as external drives. You'll notice that there are MatchOS values set for each of the USB port limit patches. You can remove any of the entries for OS versions you don't intend to run. They won't do any harm being there, but if you want a clean, minimal plist, there's no sense in having them. ## RtVariables And SMBIOS ### Raw XML ```markup RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02532300QXG2Y7AD ROM UseMacAddr0 SMBIOS BoardSerialNumber C02532300QXG2Y7AD ProductName iMac15,1 SerialNumber C02Q6FYUFY10 SmUUID C495EE18-C8EA-4100-8CAD-3099AC27772F ``` ### Clover Configurator Screenshots ![Haswell Rt Variables CC Section](../.gitbook/assets/image%20%2826%29.png) ![Haswell SMBIOS CC Section](../.gitbook/assets/image%20%2839%29.png) ### Explanation For setting up the SMBIOS info, I use acidanthera's [_macserial_](https://github.com/acidanthera/macserial) application. I wrote a [_python script_](https://github.com/corpnewt/GenSMBIOS) that can leverage it as well \(and auto-saves to the config.plist when selected\). There's plenty of info that's left blank to allow Clover to fill in the blanks; this means that updating Clover will update the info passed, and not require you to also update your config.plist. For this Haswell example, I chose the _iMac15,1_ SMBIOS. The typical breakdown is as follows: * Haswell with only iGPU - _iMac14,1_ * Haswell with dGPU - _iMac14,2_ * Haswell Refresh - _iMac15,1_ To get the SMBIOS info generated with _macserial_, you can run it with the `-a` argument \(which generates serials and board serials for all supported platforms\). You can also parse it with `grep` to limit your search to one SMBIOS type. With our _iMac15,1_ example, we would run _macserial_ like so via the terminal: ```text macserial -a | grep -i iMac15,1 ``` Which would give us output similar to the following: ```text iMac15,1 | C02NFZZYFY10 | C02438207QXG2Y7FB iMac15,1 | C02P32YJFY10 | C02502303GUG2Y78C iMac15,1 | C02P2VZ7FY10 | C02501306QXG2Y7AD iMac15,1 | C02NM0EDFY10 | C02444701CDG2Y71H iMac15,1 | C02NVHZCFY10 | C02451303CDG2Y7JA iMac15,1 | C02QLRZ4FY10 | C02543300GUG2Y7JC iMac15,1 | C02QJ0UPFY10 | C02541902GUG2Y7JA iMac15,1 | C02QG0NGFY10 | C02539700J9G2Y71M iMac15,1 | C02N3XYEFY10 | C02429104J9G2Y7UE iMac15,1 | C02QW0M3FY10 | C02552700GUG2Y7JA ``` The order is `Product | Serial | Board Serial (MLB)` The `iMac15,1` part gets copied to _SMBIOS -> Product Name_. The `Serial` part gets copied to _SMBIOS -> Serial Number._ The `Board Serial` part gets copied to _SMBIOS -> Board Serial Number_ as well as _Rt Variables -> MLB._ We can create an SmUUID by running `uuidgen` in the terminal \(or it's auto-generated via my _GenSMBIOS_ script\) - and that gets copied to _SMBIOS -> SmUUID_. We set _Rt Variables -> ROM_ to `UseMacAddr0` which just utilizes our onboard Mac address - this should be unique enough to not conflict with any others. _BooterConfig_ gets set to `0x28`, and _CsrActiveConfig_ is set to `0x3e7` which effectively disables SIP. You can choose a number of other options to enable/disable sections of SIP. Some common ones are as follows: * `0x0` - SIP completely enabled * `0x3` - Allow unsigned kexts and writing to protected fs locations * `0x3e7` - SIP completely disabled ## System Parameters ### Raw XML ```markup SystemParameters InjectKexts Yes InjectSystemID ``` ### Clover Configurator Screenshots ![System Parameters CC Section](../.gitbook/assets/image%20%2843%29.png) ### Explanation #### Inject Kexts: This setting has 3 modes: * `Yes` - this tells Clover to inject kexts from the EFI regardless. * `No` - this tells Clover not to inject kexts from the EFI. * `Detect` - this has Clover inject kexts only if _FakeSMC.kext_ is not in the kext cache. We set it to `Yes` to make sure that all the kexts we added before get injected properly. #### InjectSystemID This setting tells clover to set the SmUUID as the `system-id` at boot - which is important for iMessage and such. ## Saving At this point, you can do _File -> Save_ to save the config.plist. If you have issues saving directly to the EFI, you can save it on the Desktop, then just copy it over. I'll leave the [sample config.plist here](https://github.com/corpnewt/Hackintosh-Guide/blob/master/Configs/Haswell/config.plist) too. ================================================ FILE: config.plist-per-hardware/ivy-bridge.md ================================================ --- description: >- We'll go through the config.plist sections, one at a time for a Ivy Bridge desktop setup. --- # Ivy Bridge ## Starting Points I like to start with either the stock _config.plist_ that Clover gives you, or with just a blank canvas. In the next examples, I'll show you how I set things up from scratch; if you start from somewhere else, you may have more things checked/set than I do - but you'll want to follow along with what I do. I'll also include the raw xml examples too in order to show those that work with a text editor \(as I prefer to\). ## ACPI The default Clover settings are pretty overdone and can cause some issues. We'll keep this section fairly minimal, and I'll go through a bit of _why we do that_ for each part as well. ### Raw XML ```markup ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change EHC1 to EH01 Disabled Find RUhDMQ== Replace RUgwMQ== Comment change EHC2 to EH02 Disabled Find RUhDMg== Replace RUgwMg== Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature SSDT TableId CpuPm Signature SSDT TableId Cpu0Ist Signature DMAR Signature MATS FixHeaders SSDT Generate ``` ### Clover Configurator Screenshots ### Explanation #### Patches: ![Ivy Acpi CC Section 1](../.gitbook/assets/image%20%2877%29.png) ![Ivy Acpi CC Section 2](../.gitbook/assets/image%20%2879%29.png) The first thing we'll go over is the _Patches_ section. This section allows us to dynamically rename parts of the DSDT via Clover. Since we're not running a real mac, and macOS is pretty particular with how things are named, we can make non-destructive changes to keep things mac-friendly. We have three entries here: * _change EHC1 to EH01 -_ helps avoid a conflict with built-in USB injectors * _change EHC2 to EH02_ - helps avoid a conflict with built-in USB injectors * _change XHC1 to XHC -_ helps avoid a conflict with built-in USB injectors * _change XHCI to XHC_ - helps avoid a conflict with built-in USB injectors * _change SAT0 to SATA_ - for potential SATA compatibility #### Fixes: If we look then at the _Fixes_ section, we'll see that we have a few things checked \(there are 2 pages, so I included 2 screenshots\): * _FixShutdown_ - this can help with some boards that prefer to restart instead of shutdown. Sometimes it can cause shutdown issues on other boards \(ironic, right?\), so if you have issues shutting down with this enabled, look at disabling it. * The remaining fixes help avoid IRQ conflicts and etc, and are not known to cause issues. They may not be necessary for all hardware, but do not negatively impact anything if applied. **Note:** If you use an Ivy Bridge CPU with a 6-series motherboard, you will also need to enable _AddDTGP_ and _AddIMEI_, and you will have to fake the IMEI to `0x1e3a8086` \(I will go over this in the _Devices_ section\). #### Drop Tables: We touched in gently on DSDT with our _Patches_ section - and this is a a bit of an extension of that. SSDT is like a sub-section of DSDT. The _Drop Tables_ section allows us to omit certain SSDT tables from loading \(as I mentioned before, mac and PC DSDT is different, and macOS can be rather picky\). The two that I've added are as follows: * _CpuPm_ and _Cpu0Ist_ - these drop tables related to CPU power management which allow us to supplement the data by generating an SSDT.aml via Pike's [ssdtPRGen.sh](https://github.com/Piker-Alpha/ssdtPRGen.sh) script. * _DMAR_ - this prevents some issues with Vt-d; which is PCI passthrough for VMs, and not very functional \(if at all?\) on Hackintoshes. * _MATS_ - with High Sierra on up this table is parsed, and can sometimes contain unprintable characters that can lead to a kernel panic. #### FixHeaders and Generate: The only other things we've done on this page are enable these two checkboxes. * _FixHeaders_ - this is just a double-up of our _MATS_ table dropping. This checkbox tells Clover to sanitize headers to avoid kernel panics related to unprintable characters. * _Generate_ - this is set to an empty dictionary \(you can acheive the same by ticking any of the _Generate_ options, then unticking them in CC\) which prevents Clover from generating any C or P states, and also prevents it from adding _PluginType_ \(as that's for Haswell and newer CPUs\). ## Boot We don't need to do _too much_ here, but we'll tweak a few things. ### Raw XML ```markup Boot Arguments keepsyms=1 dart=0 debug=0x100 -xcpm -v DefaultVolume LastBootedVolume Timeout 5 ``` ### Clover Configurator Screenshots ### Explanation #### Arguments: We have a few boot args set here: ![Ivy Boot CC Section](../.gitbook/assets/image%20%2854%29.png) * `-v` - this enables verbose mode, which shows all the _behind-the-scenes_ text that scrolls by as you're booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you an inside look at the boot process, and can help you identify issues, problem kexts, etc. * `dart=0` - this is just an extra layer of protection against Vt-d issues. * `debug=0x100` - this prevents a reboot on a kernel panic. That way you can \(hopefully\) glean some useful info and follow the breadcrumbs to get past the issues. * `keepsyms=1` - this is a companion setting to `debug=0x100` that tells the OS to also print the symbols on a kernel panic. That can give some more helpful insight as to what's causing the panic itself. * `-xcpm` - attempts to force Ivy CPUs to use XnuCPUPowerManagement #### DefaultBootVolume and Timeout: These are the only other settings I've updated in this section. * _DefaultBootVolume_ - this uses NVRAM to remember which volume was last booted by Clover, and auto-select that at the next boot. * _Timeout_ - this is the number of seconds before the _DefaultBootVolume_ auto-boots. You can set this to `-1` to avoid all timeout, or to `0` to skip the GUI entirely. If set to `0`, you can press any keys at boot to get the GUI to show back up in case of issues. ## Boot Graphics Nothing here - just the stock settings. You could adjust this if Clover's scaling needs changes, but I don't mess with it. ## Cpu Again, nothing here gets changed in most setups I've worked with. ## Devices We'll handle some slick property injection for _WhateverGreen_ here, and do some basic audio setup. ### Raw XML ```markup Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id CgBmAQ== USB FixOwnership ``` ### Clover Configurator Screenshots ### Explanation #### Fake ID: This section remains empty for our example setup, however, if you run an Ivy CPU with a 6-series board, you will need to have your IMEI faked as follows: ```markup FakeID IMEI 0x1e3a8086 ``` ![Ivy Devices CC Section](../.gitbook/assets/image%20%281%29.png) #### USB: Under this section, we ensure that _Inject_ and _FixOwnership_ are selected to avoid issues with hanging at a half-printed line somewhere around the `Enabling Legacy Matching` verbose line. You can also get past that by enabling _XHCI Hand Off_ in BIOS. #### Audio: Here we set our audio to inject _Layout 1_ - this may or may not be compatible with your codec, but you can check on [_AppleALC's Supported Codec Page_](https://github.com/acidanthera/AppleALC/wiki/Supported-codecs). We also enabled _ResetHDA_ which puts the codec back in a neutral state between OS reboots. This prevents some issues with no audio after booting to another OS and then back. #### Properties: This section is setup via Headkaze's [_Intel Framebuffer Patching Guide_](https://www.insanelymac.com/forum/topic/334899-intel-framebuffer-patching-using-whatevergreen/?tab=comments#comment-2626271) and applies only one actual property to begin, which is the _ig-platform-id_. The way we get the proper value for this is to look at the ig-platform-id we intend to use, then swap the pairs of hex bytes. For this, we assume the user has an HD 4000 - HD 2000 and 2500 are _not_ supported in macOS, and if you have them, you can ignore the following iGPU-related info. If we think of our ig-plat as `0xAABBCCDD`, our swapped version would look like `0xDDCCBBAA`. The ig-platform-id we use is as follows: * `0x0166000A` - this is the standard hex for the ig-plat * `0A006601` when hex-swapped * `CgBmAQ==` when the hex-swapped version is converted to base64 ## Disable Drivers We have nothing to do here. ## Gui ### Raw XML ```markup GUI Scan Entries Tool ``` ### Clover Configurator Screenshots ![Ivy Gui CC Section](../.gitbook/assets/image%20%2867%29.png) ### Explanation #### Scan: The only settings I've tweaked on this page are the _Scan_ settings. I've selected _Custom_, then checked everything except _Legacy_ and _Kernel_. This just omits some of the unbootable entries in Clover to clean up the menu. #### Hide Volumes: I haven't added anything here, but you _can_ hide unwanted volumes here. You can do so by either adding the volume's name, or UUID. To hide extra APFS entries, add the following to this list: * `Preboot` * `VM` To hide all Recovery partitions, add `Recovery` to the list. To get the UUID of a drive to hide, you can use the following terminal command: ```text diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev ``` Make sure to replace `diskXsY` with the actual disk number of the volume you'd like to hide. #### Theme: If you want to test out a new theme \(and I suggest you look at [_clover-next-black_](https://github.com/al3xtjames/clover-theme-next-black)\), you can add the unzipped theme folder to the _/Volumes/EFI/EFI/CLOVER/themes_ directory, then type the name of the folder in the _Theme_ text field to apply it. ## Graphics In the past, we'd setup the iGPU here, but since we already did that via Properties in the _Devices_ section, we have nothing to really configure here. **NOTE**: When Clover detects an Intel iGPU, it _automatically_ enables Intel Injection if the Graphics section doesn't exist in the config.plist. To bypass this, you can explicitly disable injection using the raw XML below, or by clicking the "Inject Intel" button once to check it, and once to uncheck it in CC. ### Raw XML ```markup Graphics Inject ``` ## Kernel And Kext Patches ### Raw XML ```markup KernelAndKextPatches AppleIntelCPUPM KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External Icons Patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` ### Clover Configurator Screenshots ### Explanation In this section, we've enabled a few settings and added some kext patches. #### Checkboxes: We have a couple checkboxes selected here: * _Apple RTC_ - this ensures that we don't have a BIOS reset on reboot. * _KernelPM_ - this setting prevents writing to MSR 0xe2 which can prevent a kernel panic at boot when using XCPM. * _AppleIntelCPUPM_ - this does the same as _KernelPM_, but when using AppleIntelCPUPowerManagement instead. ![Ivy KernelAndKextPatches CC Section](../.gitbook/assets/ivykakp.png) #### KextsToPatch: We added 5 different kexts to patch here. Four of them are for USB port limit increases, and the last acts as an _orange icons fix_ - when internal drives are hotpluggable, and treated as external drives. You'll notice that there are MatchOS values set for each of the USB port limit patches. You can remove any of the entries for OS versions you don't intend to run. They won't do any harm being there, but if you want a clean, minimal plist, there's no sense in having them. ## RtVariables And SMBIOS ### Raw XML ```markup RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02253902J9F2FRCB ROM UseMacAddr0 SMBIOS BoardSerialNumber C02253902J9F2FRCB ProductName iMac13,2 SerialNumber C02JX0KSDNCW SmUUID FDDCE665-D5C0-4738-8F80-77380686E42B ``` ### Clover Configurator Screenshots ### Explanation For setting up the SMBIOS info, I use acidanthera's [_macserial_](https://github.com/acidanthera/macserial) application. I wrote a [_python script_](https://github.com/corpnewt/GenSMBIOS) that can leverage it as well \(and auto-saves to the config.plist when selected\). There's plenty of info that's left blank to allow Clover to fill in the blanks; this means that updating Clover will update the info passed, and not require you to also update your config.plist. For this Ivy Bridge example, I chose the _iMac13,2_ SMBIOS. To get the SMBIOS info generated with _macserial_, you can run it with the `-a` argument \(which generates serials and board serials for all supported platforms\). You can also parse it with `grep` to limit your search to one SMBIOS type. With our _iMac13,2_ example, we would run _macserial_ like so via the terminal: ```text macserial -a | grep -i iMac13,2 ``` Which would give us output similar to the following: ![Ivy Rt Variables CC Section](../.gitbook/assets/image%20%2813%29.png) ![Ivy SMBIOS CC Section](../.gitbook/assets/image%20%2859%29.png) ```text iMac13,2 | C02JX0KSDNCW | C02253902J9F2FRCB iMac13,2 | C02KC3Y9DNCW | C02309401GUF2FR1M iMac13,2 | C02KPYYDDNCW | C02319902J9F2FRJA iMac13,2 | C02LLSYJDNCW | C02343301J9F2FR1F iMac13,2 | C02JF0N3DNCW | C02238404GUF2FR1M iMac13,2 | C02JT6ZFDNCW | C02250104QXF2FRFB iMac13,2 | C02LT0GDDNCW | C02350130J9F2FR1H iMac13,2 | C02J1069DNCW | C02227310J9F2FRAD iMac13,2 | C02JN0Y4DNCW | C02245902CDF2FRFB iMac13,2 | C02JWJZSDNCW | C02252100GUF2FRCB ``` The order is `Product | Serial | Board Serial (MLB)` The `iMac13,2` part gets copied to _SMBIOS -> Product Name_. The `Serial` part gets copied to _SMBIOS -> Serial Number._ The `Board Serial` part gets copied to _SMBIOS -> Board Serial Number_ as well as _Rt Variables -> MLB._ We can create an SmUUID by running `uuidgen` in the terminal \(or it's auto-generated via my _GenSMBIOS_ script\) - and that gets copied to _SMBIOS -> SmUUID_. We set _Rt Variables -> ROM_ to `UseMacAddr0` which just utilizes our onboard Mac address - this should be unique enough to not conflict with any others. _BooterConfig_ gets set to `0x28`, and _CsrActiveConfig_ is set to `0x3e7` which effectively disables SIP. You can choose a number of other options to enable/disable sections of SIP. Some common ones are as follows: * `0x0` - SIP completely enabled * `0x3` - Allow unsigned kexts and writing to protected fs locations * `0x3e7` - SIP completely disabled ## System Parameters ### Raw XML ```markup SystemParameters InjectKexts Yes InjectSystemID ``` ### Clover Configurator Screenshots ![System Parameters CC Section](../.gitbook/assets/image%20%2843%29.png) ### Explanation #### Inject Kexts: This setting has 3 modes: * `Yes` - this tells Clover to inject kexts from the EFI regardless. * `No` - this tells Clover not to inject kexts from the EFI. * `Detect` - this has Clover inject kexts only if _FakeSMC.kext_ or _VirtualSMC.kext_ are not in the kext cache. We set it to `Yes` to make sure that all the kexts we added before get injected properly. #### InjectSystemID This setting tells clover to set the SmUUID as the `system-id` at boot - which is important for iMessage and such. ## Saving At this point, you can do _File -> Save_ to save the config.plist. If you have issues saving directly to the EFI, you can save it on the Desktop, then just copy it over. I'll leave the [sample config.plist here](https://github.com/corpnewt/Hackintosh-Guide/blob/master/Configs/Ivy%20Bridge/config.plist) too. ================================================ FILE: config.plist-per-hardware/kaby-lake.md ================================================ --- description: >- We'll go through the config.plist sections, one at a time for a Kaby Lake desktop setup. --- # Kaby Lake ## Starting Points I like to start with either the stock _config.plist_ that Clover gives you, or with just a blank canvas. In the next examples, I'll show you how I set things up from scratch; if you start from somewhere else, you may have more things checked/set than I do - but you'll want to follow along with what I do. I'll also include the raw xml examples too in order to show those that work with a text editor (as I prefer to). ## ACPI The default Clover settings are pretty overdone and can cause some issues. We'll keep this section fairly minimal, and I'll go through a bit of _why we do that_ for each part as well. ### Raw XML ```markup ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders SSDT Generate PluginType ``` ### Clover Configurator Screenshots ![Kaby Lake Acpi CC Section 1](<../.gitbook/assets/image (32) (1).png>) ![Kaby Lake Acpi CC Section 2](<../.gitbook/assets/image (64).png>) ### Explanation #### Patches: The first thing we'll go over is the _Patches_ section. This section allows us to dynamically rename parts of the DSDT via Clover. Since we're not running a real mac, and macOS is pretty particular with how things are named, we can make non-destructive changes to keep things mac-friendly. We have three entries here: * _change XHCI to XHC -_ helps avoid a conflict with built-in USB injectors * _change XHC1 to XHC_ - helps avoid a conflict with built-in USB injectors * _change SAT0 to SATA_ - for potential SATA compatibility #### Fixes: If we look then at the _Fixes_ section, we'll see that we have a few things checked (there are 2 pages, so I included 2 screenshots): * _FixShutdown_ - this can help with some boards that prefer to restart instead of shutdown. Sometimes it can cause shutdown issues on other boards (ironic, right?), so if you have issues shutting down with this enabled, look at disabling it. * The remaining fixes help avoid IRQ conflicts and etc, and are not known to cause issues. They may not be necessary for all hardware, but do not negatively impact anything if applied. #### Drop Tables: We touched in gently on DSDT with our _Patches_ section - and this is a a bit of an extension of that. SSDT is like a sub-section of DSDT. The _Drop Tables_ section allows us to omit certain SSDT tables from loading (as I mentioned before, mac and PC DSDT is different, and macOS can be rather picky). The two that I've added are as follows: * _DMAR_ - this prevents some issues with Vt-d; which is PCI passthrough for VMs, and not very functional (if at all?) on Hackintoshes. * _MATS_ - with High Sierra on up this table is parsed, and can sometimes contain unprintable characters that can lead to a kernel panic. #### FixHeaders and PluginType: The only other things we've done on this page are enable these two checkboxes. * _FixHeaders_ - this is just a double-up of our _MATS_ table dropping. This checkbox tells Clover to sanitize headers to avoid kernel panics related to unprintable characters. * _PluginType_ - this injects some DSDT data to get _X86PlatformPlugin_ to load - giving us a leg-up on native CPU power management. This setting only works on Haswell and newer CPUs though. ## Boot We don't need to do _too much_ here, but we'll tweak a few things. ### Raw XML ```markup Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 ``` ### Clover Configurator Screenshots ![Kaby Lake Boot CC Section](<../.gitbook/assets/image (22).png>) ### Explanation #### Arguments: We have a few boot args set here: * `-v` - this enables verbose mode, which shows all the _behind-the-scenes_ text that scrolls by as you're booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you an inside look at the boot process, and can help you identify issues, problem kexts, etc. * `dart=0` - this is just an extra layer of protection against Vt-d issues. * `debug=0x100` - this prevents a reboot on a kernel panic. That way you can (hopefully) glean some useful info and follow the breadcrumbs to get past the issues. * `keepsyms=1` - this is a companion setting to `debug=0x100` that tells the OS to also print the symbols on a kernel panic. That can give some more helpful insight as to what's causing the panic itself. #### DefaultBootVolume and Timeout: These are the only other settings I've updated in this section. * _DefaultBootVolume_ - this uses NVRAM to remember which volume was last booted by Clover, and auto-select that at the next boot. * _Timeout_ - this is the number of seconds before the _DefaultBootVolume_ auto-boots. You can set this to `-1` to avoid all timeout, or to `0` to skip the GUI entirely. If set to `0`, you can press any keys at boot to get the GUI to show back up in case of issues. ## Boot Graphics Nothing here - just the stock settings. You could adjust this if Clover's scaling needs changes, but I don't mess with it. ## Cpu Again, nothing here gets changed in most setups I've worked with. ## Devices We'll handle some slick property injection for _WhateverGreen_ here, and do some basic audio setup. ### Raw XML ```markup Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AAASWQ== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership ``` ### Clover Configurator Screenshots ![Kaby Lake Devices CC Section - iGPU](<../.gitbook/assets/image (2).png>) ![Kaby Lake Devices CC Section - iGPU Connectorless](<../.gitbook/assets/image (60).png>) ### Explanation #### Fake ID: This section remains empty for our example setup. In the past, almost-supported iGPUs (like the HD 4400) would get faked to a supported iGPU here, but we'll be using the cleaner Properties section for this. #### USB: Under this section, we ensure that _Inject_ and _FixOwnership_ are selected to avoid issues with hanging at a half-printed line somewhere around the `Enabling Legacy Matching` verbose line. You can also get past that by enabling _XHCI Hand Off_ in BIOS. #### Audio: Here we set our audio to inject _Layout 1_ - this may or may not be compatible with your codec, but you can check on [_AppleALC's Supported Codec Page_](https://github.com/acidanthera/AppleALC/wiki/Supported-codecs). We also enabled _ResetHDA_ which puts the codec back in a neutral state between OS reboots. This prevents some issues with no audio after booting to another OS and then back. #### Properties: This section is setup via Headkaze's [_Intel Framebuffer Patching Guide_](https://www.insanelymac.com/forum/topic/334899-intel-framebuffer-patching-using-whatevergreen/?tab=comments#comment-2626271) and applies only one actual property to begin, which is the _ig-platform-id_. The way we get the proper value for this is to look at the ig-platform-id we intend to use, then swap the pairs of hex bytes. If we think of our ig-plat as `0xAABBCCDD`, our swapped version would look like `0xDDCCBBAA`. The two ig-platform-id's we use are as follows: * `0x59120000` - this is used when the iGPU is used to drive a display * `00001259` when hex-swapped * `AAASWQ==` when the hex-swapped version is converted to base64 * `0x59120003` - this is used when the iGPU is only used for compute tasks, and doesn't drive a display * `03001259` when hex-swapped * `AwASWQ==` when the hex-swapped version is converted to base64 We also add 2 more properties, _framebuffer-patch-enable_ and _framebuffer-stolenmem_. The first enables patching via _WhateverGreen.kext,_ and the second sets the min stolen memory to 19MB. ## Disable Drivers We have nothing to do here. ## Gui ### Raw XML ```markup GUI Scan Entries Tool ``` ### Clover Configurator Screenshots ![Kaby Lake Gui CC Section](<../.gitbook/assets/image (67).png>) ### Explanation #### Scan: The only settings I've tweaked on this page are the _Scan_ settings. I've selected _Custom_, then checked everything except _Legacy_ and _Kernel_. This just omits some of the unbootable entries in Clover to clean up the menu. #### Hide Volumes: I haven't added anything here, but you _can_ hide unwanted volumes here. You can do so by either adding the volume's name, or UUID. To hide extra APFS entries, add the following to this list: * `Preboot` * `VM` To hide all Recovery partitions, add `Recovery` to the list. To get the UUID of a drive to hide, you can use the following terminal command: ``` diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev ``` Make sure to replace `diskXsY` with the actual disk number of the volume you'd like to hide. #### Theme: If you want to test out a new theme (and I suggest you look at [_clover-next-black_](https://github.com/al3xtjames/clover-theme-next-black)), you can add the unzipped theme folder to the _/Volumes/EFI/EFI/CLOVER/themes_ directory, then type the name of the folder in the _Theme_ text field to apply it. ## Graphics In the past, we'd setup the iGPU here, but since we already did that via Properties in the _Devices_ section, we have nothing to really configure here. **NOTE**: When Clover detects an Intel iGPU, it _automatically_ enables Intel Injection if the Graphics section doesn't exist in the config.plist. To bypass this, you can explicitly disable injection using the raw XML below, or by clicking the "Inject Intel" button once to check it, and once to uncheck it in CC. ### Raw XML ```markup Graphics Inject ``` ## Kernel And Kext Patches ### Raw XML ```markup KernelAndKextPatches KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (PMHeart) Disabled Find g/sPD4MDBQAA InfoPlistPatch MatchOS 10.14.0 Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External Icons Patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` ### Clover Configurator Screenshots ![Kaby Lake KernelAndKextPatches CC Section](<../.gitbook/assets/image (55).png>) ### Explanation In this section, we've enabled a few settings and added some kext patches. #### Checkboxes: We have a couple checkboxes selected here: * _Apple RTC_ - this ensures that we don't have a BIOS reset on reboot. * _KernelPM_ - this setting prevents writing to MSR 0xe2 which can prevent a kernel panic at boot. #### KextsToPatch: We added 4 different kexts to patch here. Three of them are for USB port limit increases, and the last acts as an _orange icons fix_ - when internal drives are hotpluggable, and treated as external drives. You'll notice that there are MatchOS values set for each of the USB port limit patches. You can remove any of the entries for OS versions you don't intend to run. They won't do any harm being there, but if you want a clean, minimal plist, there's no sense in having them. ## RtVariables And SMBIOS ### Raw XML ```markup RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02726902CDH69F1M ROM UseMacAddr0 SMBIOS BoardSerialNumber C02726902CDH69F1M ProductName iMac18,1 SerialNumber C02TX0VDH7JY SmUUID 91492A73-595C-4D97-A6FC-2B5D3ED1B54D ``` ### Clover Configurator Screenshots ![Kaby Lake RtVariables CC Section](<../.gitbook/assets/image (28).png>) ![Kaby Lake SMBIOS CC Section](<../.gitbook/assets/image (52).png>) ### Explanation For setting up the SMBIOS info, I use acidanthera's [_macserial_](https://github.com/acidanthera/macserial) application. I wrote a [_python script_](https://github.com/corpnewt/GenSMBIOS) that can leverage it as well (and auto-saves to the config.plist when selected). There's plenty of info that's left blank to allow Clover to fill in the blanks; this means that updating Clover will update the info passed, and not require you to also update your config.plist. For this Kaby Lake example, I chose the _iMac18,1_ SMBIOS - this is done intentionally for compatibility's sake. There are two main SMBIOS used for Kaby Lake: * _iMac18,1_ - this is used for computers utilizing the iGPU for displaying. * _iMac18,3_ - this is used for computers using a dGPU for displaying, and an iGPU for compute tasks only. To get the SMBIOS info generated with _macserial_, you can run it with the `-a` argument (which generates serials and board serials for all supported platforms). You can also parse it with `grep` to limit your search to one SMBIOS type. With our _iMac18,1_ example, we would run _macserial_ like so via the terminal: ``` macserial -a | grep -i iMac18,1 ``` Which would give us output similar to the following: ``` iMac18,1 | C02T8SZNH7JY | C02707101J9H69F1F iMac18,1 | C02VXBYDH7JY | C02753100GUH69FCB iMac18,1 | C02T7RY6H7JY | C02706310GUH69FA8 iMac18,1 | C02VD07ZH7JY | C02737301J9H69FCB iMac18,1 | C02TQPYPH7JY | C02720802CDH69FAD iMac18,1 | C02VXYYVH7JY | C02753207CDH69FJC iMac18,1 | C02VDBZ0H7JY | C02737700QXH69FA8 iMac18,1 | C02VP0H6H7JY | C02746300CDH69FJA iMac18,1 | C02VL0W9H7JY | C02743303CDH69F8C iMac18,1 | C02V2NYMH7JY | C02728600J9H69FAD ``` The order is `Product | Serial | Board Serial (MLB)` The `iMac18,1` part gets copied to _SMBIOS -> Product Name_. The `Serial` part gets copied to _SMBIOS -> Serial Number._ The `Board Serial` part gets copied to _SMBIOS -> Board Serial Number_ as well as _Rt Variables -> MLB._ We can create an SmUUID by running `uuidgen` in the terminal (or it's auto-generated via my _GenSMBIOS_ script) - and that gets copied to _SMBIOS -> SmUUID_. We set _Rt Variables -> ROM_ to `UseMacAddr0` which just utilizes our onboard Mac address - this should be unique enough to not conflict with any others. _BooterConfig_ gets set to `0x28`, and _CsrActiveConfig_ is set to `0x3e7` which effectively disables SIP. You can choose a number of other options to enable/disable sections of SIP. Some common ones are as follows: * `0x0` - SIP completely enabled * `0x3` - Allow unsigned kexts and writing to protected fs locations * `0x3e7` - SIP completely disabled ## System Parameters ### Raw XML ```markup SystemParameters InjectKexts Yes InjectSystemID ``` ### Clover Configurator Screenshots ![System Parameters CC Section](<../.gitbook/assets/image (58).png>) ### Explanation #### Inject Kexts: This setting has 3 modes: * `Yes` - this tells Clover to inject kexts from the EFI regardless. * `No` - this tells Clover not to inject kexts from the EFI. * `Detect` - this has Clover inject kexts only if _FakeSMC.kext_ is not in the kext cache. We set it to `Yes` to make sure that all the kexts we added before get injected properly. #### InjectSystemID This setting tells clover to set the SmUUID as the `system-id` at boot - which is important for iMessage and such. ## Saving At this point, you can do _File -> Save_ to save the config.plist. If you have issues saving directly to the EFI, you can save it on the Desktop, then just copy it over. I'll leave the [sample config.plist here](../Configs/KabyLake/config.plist) too. ================================================ FILE: config.plist-per-hardware/skylake.md ================================================ --- description: >- We'll go through the config.plist sections, one at a time for a Skylake desktop setup. --- # Skylake ## Starting Points I like to start with either the stock _config.plist_ that Clover gives you, or with just a blank canvas. In the next examples, I'll show you how I set things up from scratch; if you start from somewhere else, you may have more things checked/set than I do - but you'll want to follow along with what I do. I'll also include the raw xml examples too in order to show those that work with a text editor (as I prefer to). ## ACPI The default Clover settings are pretty overdone and can cause some issues. We'll keep this section fairly minimal, and I'll go through a bit of _why we do that_ for each part as well. ### Raw XML ```markup ACPI DSDT Fixes AddMCHC FixHPET FixIPIC FixRTC FixShutdown FixTMR Patches Comment change XHCI to XHC Disabled Find WEhDSQ== Replace WEhDXw== Comment change XHC1 to XHC Disabled Find WEhDMQ== Replace WEhDXw== Comment change SAT0 to SATA Disabled Find U0FUMA== Replace U0FUQQ== DropTables Signature DMAR Signature MATS FixHeaders SSDT Generate PluginType ``` ### Clover Configurator Screenshots ![Skylake Acpi CC Section 1](<../.gitbook/assets/image (51).png>) ![Skylake Acpi CC Section 2](<../.gitbook/assets/image (64).png>) ### Explanation #### Patches: The first thing we'll go over is the _Patches_ section. This section allows us to dynamically rename parts of the DSDT via Clover. Since we're not running a real mac, and macOS is pretty particular with how things are named, we can make non-destructive changes to keep things mac-friendly. We have three entries here: * _change XHCI to XHC -_ helps avoid a conflict with built-in USB injectors * _change XHC1 to XHC_ - helps avoid a conflict with built-in USB injectors * _change SAT0 to SATA_ - for potential SATA compatibility #### Fixes: If we look then at the _Fixes_ section, we'll see that we have a few things checked (there are 2 pages, so I included 2 screenshots): * _FixShutdown_ - this can help with some boards that prefer to restart instead of shutdown. Sometimes it can cause shutdown issues on other boards (ironic, right?), so if you have issues shutting down with this enabled, look at disabling it. * The remaining fixes help avoid IRQ conflicts and etc, and are not known to cause issues. They may not be necessary for all hardware, but do not negatively impact anything if applied. #### Drop Tables: We touched in gently on DSDT with our _Patches_ section - and this is a a bit of an extension of that. SSDT is like a sub-section of DSDT. The _Drop Tables_ section allows us to omit certain SSDT tables from loading (as I mentioned before, mac and PC DSDT is different, and macOS can be rather picky). The two that I've added are as follows: * _DMAR_ - this prevents some issues with Vt-d; which is PCI passthrough for VMs, and not very functional (if at all?) on Hackintoshes. * _MATS_ - with High Sierra on up this table is parsed, and can sometimes contain unprintable characters that can lead to a kernel panic. #### FixHeaders and PluginType: The only other things we've done on this page are enable these two checkboxes. * _FixHeaders_ - this is just a double-up of our _MATS_ table dropping. This checkbox tells Clover to sanitize headers to avoid kernel panics related to unprintable characters. * _PluginType_ - this injects some DSDT data to get _X86PlatformPlugin_ to load - giving us a leg-up on native CPU power management. This setting only works on Haswell and newer CPUs though. ## Boot We don't need to do _too much_ here, but we'll tweak a few things. ### Raw XML ```markup Boot Arguments keepsyms=1 dart=0 debug=0x100 -v DefaultVolume LastBootedVolume Timeout 5 ``` ### Clover Configurator Screenshots ![Skylake Boot CC Section](<../.gitbook/assets/image (69).png>) ### Explanation #### Arguments: We have a few boot args set here: * `-v` - this enables verbose mode, which shows all the _behind-the-scenes_ text that scrolls by as you're booting instead of the Apple logo and progress bar. It's invaluable to any Hackintosher, as it gives you an inside look at the boot process, and can help you identify issues, problem kexts, etc. * `dart=0` - this is just an extra layer of protection against Vt-d issues. * `debug=0x100` - this prevents a reboot on a kernel panic. That way you can (hopefully) glean some useful info and follow the breadcrumbs to get past the issues. * `keepsyms=1` - this is a companion setting to `debug=0x100` that tells the OS to also print the symbols on a kernel panic. That can give some more helpful insight as to what's causing the panic itself. #### DefaultBootVolume and Timeout: These are the only other settings I've updated in this section. * _DefaultBootVolume_ - this uses NVRAM to remember which volume was last booted by Clover, and auto-select that at the next boot. * _Timeout_ - this is the number of seconds before the _DefaultBootVolume_ auto-boots. You can set this to `-1` to avoid all timeout, or to `0` to skip the GUI entirely. If set to `0`, you can press any keys at boot to get the GUI to show back up in case of issues. ## Boot Graphics Nothing here - just the stock settings. You could adjust this if Clover's scaling needs changes, but I don't mess with it. ## Cpu Again, nothing here gets changed in most setups I've worked with. ## Devices We'll handle some slick property injection for _WhateverGreen_ here, and do some basic audio setup. ### Raw XML ```markup Devices Audio Inject 1 ResetHDA Properties PciRoot(0x0)/Pci(0x2,0x0) AAPL,ig-platform-id AAASGQ== framebuffer-patch-enable AQAAAA== framebuffer-stolenmem AAAwAQ== USB FixOwnership ``` ### Clover Configurator Screenshots ![Skylake Devices CC Section - iGPU](<../.gitbook/assets/image (72).png>) ![Skylake Devices CC Section - iGPU Connectorless](../.gitbook/assets/image.png) ### Explanation #### Fake ID: This section remains empty for our example setup. In the past, almost-supported iGPUs (like the HD 4400) would get faked to a supported iGPU here, but we'll be using the cleaner Properties section for this. #### USB: Under this section, we ensure that _Inject_ and _FixOwnership_ are selected to avoid issues with hanging at a half-printed line somewhere around the `Enabling Legacy Matching` verbose line. You can also get past that by enabling _XHCI Hand Off_ in BIOS. #### Audio: Here we set our audio to inject _Layout 1_ - this may or may not be compatible with your codec, but you can check on [_AppleALC's Supported Codec Page_](https://github.com/acidanthera/AppleALC/wiki/Supported-codecs). We also enabled _ResetHDA_ which puts the codec back in a neutral state between OS reboots. This prevents some issues with no audio after booting to another OS and then back. #### Properties: This section is setup via Headkaze's [_Intel Framebuffer Patching Guide_](https://www.insanelymac.com/forum/topic/334899-intel-framebuffer-patching-using-whatevergreen/?tab=comments#comment-2626271) and applies only one actual property to begin, which is the _ig-platform-id_. The way we get the proper value for this is to look at the ig-platform-id we intend to use, then swap the pairs of hex bytes. If we think of our ig-plat as `0xAABBCCDD`, our swapped version would look like `0xDDCCBBAA`. The two ig-platform-id's we use are as follows: * `0x19120000` - this is used when the iGPU is used to drive a display * `00001219` when hex-swapped * `AAASGQ==` when the hex-swapped version is converted to base64 * `0x19120001` - this is used when the iGPU is only used for compute tasks, and doesn't drive a display * `01001219` when hex-swapped * `AQASGQ==` when the hex-swapped version is converted to base64 We also add 2 more properties, _framebuffer-patch-enable_ and _framebuffer-stolenmem_. The first enables patching via _WhateverGreen.kext,_ and the second sets the min stolen memory to 19MB. ## Disable Drivers We have nothing to do here. ## Gui ### Raw XML ```markup GUI Scan Entries Tool ``` ### Clover Configurator Screenshots ![Skylake Gui CC Section](<../.gitbook/assets/image (67).png>) ### Explanation #### Scan: The only settings I've tweaked on this page are the _Scan_ settings. I've selected _Custom_, then checked everything except _Legacy_ and _Kernel_. This just omits some of the unbootable entries in Clover to clean up the menu. #### Hide Volumes: I haven't added anything here, but you _can_ hide unwanted volumes here. You can do so by either adding the volume's name, or UUID. To hide extra APFS entries, add the following to this list: * `Preboot` * `VM` To hide all Recovery partitions, add `Recovery` to the list. To get the UUID of a drive to hide, you can use the following terminal command: ``` diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev ``` Make sure to replace `diskXsY` with the actual disk number of the volume you'd like to hide. #### Theme: If you want to test out a new theme (and I suggest you look at [_clover-next-black_](https://github.com/al3xtjames/clover-theme-next-black)), you can add the unzipped theme folder to the _/Volumes/EFI/EFI/CLOVER/themes_ directory, then type the name of the folder in the _Theme_ text field to apply it. ## Graphics In the past, we'd setup the iGPU here, but since we already did that via Properties in the _Devices_ section, we have nothing to really configure here. **NOTE**: When Clover detects an Intel iGPU, it _automatically_ enables Intel Injection if the Graphics section doesn't exist in the config.plist. To bypass this, you can explicitly disable injection using the raw XML below, or by clicking the "Inject Intel" button once to check it, and once to uncheck it in CC. ### Raw XML ```markup Graphics Inject ``` ## Kernel And Kext Patches ### Raw XML ```markup KernelAndKextPatches KernelPm KextsToPatch Comment Port limit increase Disabled Find g710////EA== InfoPlistPatch MatchOS 10.12.x Name com.apple.driver.usb.AppleUSBXHCI Replace g710////Gw== Comment Port limit increase (RehabMan) Disabled Find g32IDw+DpwQAAA== InfoPlistPatch MatchOS 10.13.x Name com.apple.driver.usb.AppleUSBXHCI Replace g32ID5CQkJCQkA== Comment Port limit increase (PMHeart) Disabled Find g/sPD4MDBQAA InfoPlistPatch MatchOS 10.14.0 Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment Port limit increase (Ricky) Disabled Find g/sPD4OPBAAA InfoPlistPatch MatchOS 10.14.x Name com.apple.driver.usb.AppleUSBXHCI Replace g/sPkJCQkJCQ Comment External Icons Patch Disabled Find RXh0ZXJuYWw= InfoPlistPatch Name AppleAHCIPort Replace SW50ZXJuYWw= ``` ### Clover Configurator Screenshots ![Skylake KernelAndKextPatches CC Section](<../.gitbook/assets/image (20) (2).png>) ### Explanation In this section, we've enabled a few settings and added some kext patches. #### Checkboxes: We have a couple checkboxes selected here: * _Apple RTC_ - this ensures that we don't have a BIOS reset on reboot. * _KernelPM_ - this setting prevents writing to MSR 0xe2 which can prevent a kernel panic at boot. #### KextsToPatch: We added 4 different kexts to patch here. Three of them are for USB port limit increases, and the last acts as an _orange icons fix_ - when internal drives are hotpluggable, and treated as external drives. You'll notice that there are MatchOS values set for each of the USB port limit patches. You can remove any of the entries for OS versions you don't intend to run. They won't do any harm being there, but if you want a clean, minimal plist, there's no sense in having them. ## RtVariables And SMBIOS ### Raw XML ```markup RtVariables BooterConfig 0x28 CsrActiveConfig 0x3E7 MLB C02634902QXGPF7FB ROM UseMacAddr0 SMBIOS BoardSerialNumber C02634902QXGPF7FB ProductName iMac17,1 SerialNumber C02S8DY7GG7L SmUUID DD574F3E-5774-414A-8FF9-5B0089B09480 ``` ### Clover Configurator Screenshots ![Skylake RtVariables CC Section](<../.gitbook/assets/image (41).png>) ![Skylake SMBIOS CC Section](<../.gitbook/assets/image (12).png>) ### Explanation For setting up the SMBIOS info, I use acidanthera's [_macserial_](https://github.com/acidanthera/macserial) application. I wrote a [_python script_](https://github.com/corpnewt/GenSMBIOS) that can leverage it as well (and auto-saves to the config.plist when selected). There's plenty of info that's left blank to allow Clover to fill in the blanks; this means that updating Clover will update the info passed, and not require you to also update your config.plist. For this Skylake example, I chose the _iMac17,1_ SMBIOS. To get the SMBIOS info generated with _macserial_, you can run it with the `-a` argument (which generates serials and board serials for all supported platforms). You can also parse it with `grep` to limit your search to one SMBIOS type. With our _iMac17,1_ example, we would run _macserial_ like so via the terminal: ``` macserial -a | grep -i iMac17,1 ``` Which would give us output similar to the following: ``` iMac17,1 | C02S8DY7GG7L | C02634902QXGPF7FB iMac17,1 | C02T4WZSGG7L | C02703104GUGPF71M iMac17,1 | C02QQAYPGG7L | C025474014NGPF7FB iMac17,1 | C02SNLZ3GG7L | C02645501CDGPF7AD iMac17,1 | C02QQRY8GG7L | C025474054NGPF71F iMac17,1 | C02QK1ZXGG7L | C02542200GUGPF7JC iMac17,1 | C02SL0YXGG7L | C026436004NGPF7JA iMac17,1 | C02QW0J5GG7L | C02552130QXGPF7JA iMac17,1 | C02RXDZYGG7L | C02626100GUGPF71H iMac17,1 | C02R4MYRGG7L | C02603200GUGPF7JA ``` The order is `Product | Serial | Board Serial (MLB)` The `iMac17,1` part gets copied to _SMBIOS -> Product Name_. The `Serial` part gets copied to _SMBIOS -> Serial Number._ The `Board Serial` part gets copied to _SMBIOS -> Board Serial Number_ as well as _Rt Variables -> MLB._ We can create an SmUUID by running `uuidgen` in the terminal (or it's auto-generated via my _GenSMBIOS_ script) - and that gets copied to _SMBIOS -> SmUUID_. We set _Rt Variables -> ROM_ to `UseMacAddr0` which just utilizes our onboard Mac address - this should be unique enough to not conflict with any others. _BooterConfig_ gets set to `0x28`, and _CsrActiveConfig_ is set to `0x3e7` which effectively disables SIP. You can choose a number of other options to enable/disable sections of SIP. Some common ones are as follows: * `0x0` - SIP completely enabled * `0x3` - Allow unsigned kexts and writing to protected fs locations * `0x3e7` - SIP completely disabled ## System Parameters ### Raw XML ```markup SystemParameters InjectKexts Yes InjectSystemID ``` ### Clover Configurator Screenshots ![System Parameters CC Section](<../.gitbook/assets/image (65).png>) ### Explanation #### Inject Kexts: This setting has 3 modes: * `Yes` - this tells Clover to inject kexts from the EFI regardless. * `No` - this tells Clover not to inject kexts from the EFI. * `Detect` - this has Clover inject kexts only if _FakeSMC.kext_ is not in the kext cache. We set it to `Yes` to make sure that all the kexts we added before get injected properly. #### InjectSystemID This setting tells clover to set the SmUUID as the `system-id` at boot - which is important for iMessage and such. ## Saving At this point, you can do _File -> Save_ to save the config.plist. If you have issues saving directly to the EFI, you can save it on the Desktop, then just copy it over. I'll leave the [sample config.plist here](../Configs/Skylake/config.plist) too. ================================================ FILE: gathering-kexts.md ================================================ # Gathering Kexts ## What Kexts Do I Need? _VirtualSMC.kext_ is a requirement - it emulates the SMC chip found on real macs, and convinces the OS that _yes, this is a real Mac_. Without it, no Hackintosh :\( All of the following kexts are available on [_this repo_ ](https://1drv.ms/f/s!AiP7m5LaOED-m-J8-MLJGnOgAqnjGw)courtesy of Goldfish64. Each kext is auto-built whenever a new commit is made. If you prefer to build them yourself, you can utilize my [_Lilu And Friends_ ](https://github.com/corpnewt/Lilu-and-Friends)script. ### Ethernet * [_IntelMausiEthernet.kext_ ](https://github.com/Mieze/IntelMausiEthernet)- this works with most newer Intel LAN chipsets * _AppleIntelE1000e.kext_ - this works with older Intel LAN chipsets - but can cause KPs on newer chipsets * [_AtherosE2200Ethernet.kext_ ](https://github.com/Mieze/AtherosE2200Ethernet)- this works for most Atheros or Killer networking chipsets * [_RealtekRTL8111.kext_](https://github.com/Mieze/RTL8111_driver_for_OS_X) - this works with most gigabit Realtek LAN chipsets * [_RealtekRTL8100.kext_ ](https://github.com/Mieze/RealtekRTL8100)- for 10/100 Realtek LAN chipsets ### USB You'll want to grab [_USBInjectAll.kext_](https://bitbucket.org/RehabMan/os-x-usb-inject-all/downloads/). If you're on an H370, B360, and H310 Coffee Lake system, or an X79/X99/X299 you'll likely want to make sure to include the _XHCI-unsupported.kext_ as well. As of 10.11, Apple has imposed a 15 port limit on each USB controller. This doesn't sound like a terribly imposing issue until you realize that each USB 3 port counts as 2 - one for USB 2, one for USB 3. On Skylake and newer builds where USB 2 and 3 are handled only on XHCI, and each USB 3 port counts as 2, this limit can be reached quickly. There is a way to route all USB 2 through EHCI though - utilizing RehabMan's [_FakePCIID.kext + FakePCIID\_XHCIMux.kext_](https://github.com/RehabMan/OS-X-Fake-PCI-ID) \(it only works on some chipsets though\) which can take some of the pressure off the XHCI controller. ### Audio For Audio - you'll want to grab /u/vit9696's [_AppleALC.kext_](https://github.com/vit9696/AppleALC/releases) and the companion [_Lilu.kext_](https://github.com/vit9696/Lilu/releases) - providing you have [a supported codec](https://github.com/vit9696/AppleALC/wiki/Supported-codecs). _AppleALC_ is capable of patching _AppleHDA.kext_ on the fly to allow for native audio with unsupported codecs. It also has a number of codec verbs built in to help with audio-after-sleep. ### Graphics For GPUs - you should grab [_WhateverGreen.kext_](https://github.com/acidanthera/WhateverGreen/releases) and the companion [_Lilu.kext_](https://github.com/vit9696/Lilu/releases) - this has the functionality of _IntelGraphicsFixup_, _NvidiaGraphicsFixup_, _CoreDisplayFixup_, and _Shiki_ all rolled into it. Prior, all of these kexts were separate - but since many of them share resources, they've been combined. ### WiFi and Bluetooth Apple is pretty minimal with their WiFi support, so I'll only cover the two main chipsets I'm familiar with. I've used a BCM94360CD + PCIe adapter, and BCM94352HMB/BCM94352Z in my Hackintoshes. The BCM94360CD worked OOB with no extras as it's a native card. For the BCM94352 flavors, I've been using [_AirportBrcmFixup.kext_ ](https://github.com/acidanthera/AirportBrcmFixup)and the companion [_Lilu.kext_](https://github.com/vit9696/Lilu/releases) for WiFi setup and _BrcmBluetoothInjector.kext_ \(on 10.13.6+\) or _BrcmPatchRAM2.kext_ alongside _BrcmFirmwareData.kext_ - all of the Brcm\* kexts are from RehabMan's [_OS-X-BrcmPatchRAM_](https://github.com/RehabMan/OS-X-BrcmPatchRAM) repo. ### Extras Depending on the rest of your hardware - you _may_ need more kexts as well, but this guide is designed to be a general foundation, so you'll have to rely on your google-fu for that.