TABLE of CONTENTS
- About
- Processing order of Kexts and Kernel patches
- Lilu and VirtualSMC first?
- Utilizing
MinKernel
andMaxKernel
settings - Examples
- Example 1: Mandatory kexts (Minimal Requirements)
- Example 2: ApplePS2SmartTouchPad + Plugins (Laptop)
- Example 3: VoodooPS2 + TrackPad (Laptop)
- Example 4: VoodooPS2 + I2C (Laptop)
- Example 5: VoodooPS2 + VoodooRMI + VoodooSMBus (Laptop)
- Example 6: VoodooPS2 + VoodooRMI + VoodooI2C (Laptop)
- Example 7: Broadcom WiFi and Bluetooth
- Example 8a: Intel WiFi (AirportItlwm) and Bluetooth (IntelBluetoothFIrmware)
- Example 8b: Using
AirportItlwm.kext
in multiple versions of macOS - Example 9a: Possible Desktop Kext Sequence
- Example 9b: Possible Laptop Kext Sequence
- Example 10: Enabling legacy Broadcom WiFi Cards in macOS 14+
- Example 11: CPUFriend
- Notes and Credits
This chapter contains a collection of configuration examples to demonstrate the loading order for certain kexts in OpenCore's config.plist
. In contrast to Clover, where you just drop required kexts into the Clover\kexts\other
folder, OpenCore loads kexts in the exact order as listed in the Kernel/Add
section of your config.plist
. And if this order is incorrect, your system either won't boot, will crash during boot or the device you added the kext(s) for might not work! So it's essential to get the order right.
In general, kexts which provide additional functionality for other kexts have to be loaded first. Config 1 contains the loading sequence for the bare minimum kexts required by any Hackintosh to boot:
- Lilu.kext
- VirtualSMC.kext (+ Sensor Plugins) or FakeSMC.kext (+ optional Sensor Plugins)
- Whatevergreen
- AppleALC
The configuration examples listed below show the loading sequences for Wifi, Bluetooth,Keyboards, Trackpads, and other kexts that have to be loaded in the correct order to work properly. Not having them in the correct order may cause Kernel Panics. Same goes for having kexts listed in your config.plist which are not present in the EFI/OC/Kexts
folder. So it's of utmost importance that the kexts are loaded in the correct order and that the content of the config.plist
reflect the kexts present in the OC folder 1 to 1. The examples listed below provide a solid guideline on how to organize and combine kexts correctly.
Note
For additional information about available and supported kexts, read the Kext documentation on the OpenCore Github.
OpenCore handles the Kernel
section of the config.plist
in the following order (since version 0.9.2, Commit 6a65dd1):
Block
is processedAdd
andForce
are processedEmulate
andQuirks
are processedPatch
is processed
Note
Prior to OpenCore Commit 6a65dd1, Add
and Force
where last in the chain which made it impossible to patch force-injected kexts.
Although it is recommended to load Lilu and VirtualSMC first in order to simplfy kext-related troubleshooting, this is not a requirement per se! Lilu and VirtualSMC only need to load prior to any kexts that rely on them. ProperTree
cross-references CFBundleIdentifiers
against OSBundleLibraries
to ensure the correct loading order of kexts when creating a config snapshot. For reviewers of configs who try to assist other users in fixing config issues, this complicates troubleshooting.
Tip
When in doubt, either create a (new) snapshot in ProperTree (File → OC Snapshot
) or place Lilu and VirtualSMC at the top in the config to eliminate kext dependency issues altogether! In my experience, placing Lilu and VirtualSMC first also reduces boot times.
Applying MinKernel
and MaxKernel
settings for kexts is very useful to maximize the compatibility of your config.plist
with various versions of macOS without having to create multiple configs with different sets of kexts.
By specifying the kernel range, you can take control over which kexts are loaded for which version of macOS. Instead of enabling/disabling kexts manually for different OSes, you can leave all kexts enabled but control which ones will be loaded by entering values in the MinKernel
and MaxKernel
fields. "Example 7" and "Example 8" makes use of this technique extensively.
It's basically the same feature Clover provides, just a lot smarter: instead of using sub-folders labeled by the macOS Version (10.15, 11, 12, etc.), you specify the lower and upper kernel limit, so that you don't have to create kext duplicated (which you maybe forget to update later).
MinKernel
and MaxKernel
settings sare especially useful for:
- WiFi and Bluetooth kexts where certain macOS versions require different sets of kexts
- Kexts which are only required by certain versions of macOS, like
CryptexFixup.kext
(Ventura and newer only) orNoTouchID.kext
(High Sierra to Mojave only)
The following table contains the Kernel version ranges for OSX 10.4 up to macOS 15.
OS X/macOS Version (Name) | MinKernel | MaxKernel | Architecture |
---|---|---|---|
macOS 15 (Sequoia) | 24.0.0 | 24.99.99 | Intel (64-bit) Apple Silicon (ARM) |
macOS 14 (Sonoma) | 23.0.0 | 23.99.99 | " |
macOS 13 (Ventura) | 22.0.0 | 22.99.99 | " |
macOS 12 (Monterey) | 21.0.0 | 21.99.99 | " |
macOS 11 (Big Sur) | 20.0.0 | 20.99.99 | " |
macOS 10.15 (Catalina) | 19.0.0 | 19.99.99 | Intel (64-bit only) |
macOS 10.14 (Mojave) | 18.0.0 | 18.99.99 | Intel (32/64-bit) |
macOS 10.13 (High Sierra) | 17.0.0 | 17.99.99 | " |
macOS 10.12 (Sierra) | 16.0.0 | 16.99.99 | " |
OS X 10.11 (El Capitan | 15.0.0 | 15.99.99 | " |
OS X 10.10 (Yosemite) | 14.0.0 | 14.99.99 | " |
OS X 10.9 (Mavericks) | 13.0.0 | 13.99.99 | " |
OS X 10.8 (Mountain Lion) | 12.0.0 | 12.99.99 | " |
OS X 10.7 (Lion) | 11.0.0 | 11.99.99 | " |
OS X 10.6 (Snow Leopard) | 10.0.0 | 10.99.99 | " |
OS X 10.5 (Leopard) | 9.0.0 | 9.99.99 | PowerPC (PPC) Intel (32/64-bit) |
OS X 10.4 (Tiger) | 8.0.0 | 8.99.99 | " |
Tip
- To check, which Kernel your macOS version is using, either enter
uname -r
in Terminal or look it up in "System Profiler" under "Software". - Although
MaxKernel
can go up toX.99.99
, usingX.9.9
is sufficient in most cases. So far, there hasn't been a single version of macOS which used a Kernel greater thanX.9.9
.
Any additional kexts must be placed after the mandatory kexts.
For Synaptics TrackPads which are controlled via SMBus, the kext order is:
SOURCE: VoodooSMBus
For Synaptics TrackPads which are controlled via I2C, the kext order is:
SOURCE: VoodooSMBus
When using Broadcom WiFi/Bluetooth cards that are not natively supported by macOS, you have to be aware about the following:
- Kexts have to be loaded in the correct order/sequence (otherwise boot crashes). When in doubt, create an OC Snapshot in ProperTree – it can fix the order if it's incorrect.
- You have to make use of
MinKernel
andMaxKernel
settings to control which kexts are loaded for different versions of macOS AirportBrcomFixup
is for enabling WiFi. It contains 2 additional kexts as Plugins (only one of them should be enabled at any time):AirPortBrcmNIC_Injector.kext
(compatible with macOS 10.13 and newer)AirPortBrcm4360_Injector.kext
(compatible with macOS 10.8 to 10.15)
- For Bluetooth, various kexts and combinations are necessary:
BlueToolFixup.kext
: For macOS 12 and newer. Contains Firmware Data (MinKernel 21.0).BrcmFirmwareData.kext
: contains necessary firmware. Required for macOS 10.8 to 11.x (MaxKernel 20.9.9)BrcmPatchRAM.kext
: For 10.10 or earlierBrcmPatchRAM2.kext
: For macOS 10.11 to 10.14BrcmPatchRAM3.kext
: For macOS 10.15 to 11.x. Needs to be combined withBrcmBluetoothInjector.kext
in order to work.
- With the release of macOS Sonoma (Darwin Kernel 23.0), Apple completely dropped support for Broadcom Cards! In order to re-enable Broadcom WiFi, you have to:
- Apply root patches with OpenCore Legacy Patcher
- Add additional kexts and
- Adjust some config settings (see → Example 10)
Caution
Don't add BrcmFirmwareRepo.kext
to EFI/OC/Kexts
! It cannot be injected by Boot Managers. It needs to be installed in /System/Library/Extensions
(/Library/Extensions on 10.11 and later). In this case, BrcmFirmwareData.kext
is not required. You can use Kext-Droplet to install kext in the system library directly.
I've noticed recently that a lot of crash reports for com.apple.drive.Airport.Brcm4360.0
and com.apple.iokit.IO80211Family
are being generated (located under /Library/Logs/CrashReporter/CoreCapture) although my WiFi card is working great in terms of connectivity and speed.
This issue is related to Smart Connect, a feature of WiFi routers which support 2,4 gHz and 5 gHz basebands to make the WiFi card switch between the two automatically depending on the signal quality. Turning off Smart Connect in the router resolves this issue.
Note
- For Intel WiFi, there are actually 2 kexts available that can be used:
Itlwm.kext
andAirportItlwm.kext
. Both have different Pros and Cons, so which one to use depends on personal preference (find out more) - For using Intel Bluetooth in macOS Monterey and newer, read this.
As you may know, 2 kexts for enabling Wi-Fi support for Intel cards exist: itlwm and AirportItlwm. unlike the Itlwm, AirportItlwm requires a different variant of the kext per macOS version (macOS High Sierra up to Sonoma are currently supported).
If you have multiple versions of macOS installed and want to use AirportItlwm in all of them, you have to be able to have different builds of the kext present in your EFI folder so Wi-Fi works on all of your macOS versions.
- Go to https://github.com/OpenIntelWireless/itlwm/releases
- Click on “Assets”
- Download the builds of the AirportItlwm of your choice
- Extract and rename them: I usually add an underscore followed by the name of the OS, e.g.
AirportItlwm_Sonoma.kext
(don’t add empty spaces!) - Add them to
EFI/OC/Kexts
and yourconfig.plist
- Disable
itlwm.kext
(if present) - Next, add
MinKernel
andMaxKernel
settings to limit the kext to only load the kext for the macOS version it’s designed for: - Save your config
Important
- Adding the correct
MinKernel
andMaxKernel
settings is really important. Otherwise Wi-Fi won’t work and the system might crash when injecting the kext multiple times! - When renaming kexts, you can’t automatically fetch kext updates for it with tools like OCAT any longer.
- When updating macOS Sonoma (14.3 and newer), you must disable
AirportItlwm.kext
in favor ofitlwm.kext
and setSecureBootModel
toDisabled
prior to updating. Otherwise the installer will crash (more info). Afterwards, you can revert the settings.
Most Intel Desktop configs will at least contain Lilu
, VirtualSMC
(Plugins are optional), WhateverGreen
and AppleALC
. This example excludes USB Port, Ethernet and WiFi/BT kexts!
This is how a possible sequence of kexts for a Laptop might look. In this example, the Trackpad requires VoodooPS2Controller
, WiFi and BT are by Intel and the Ethernet card is from Realtek. Depending on your Laptop components, Kexts 10 to 17 could be something else entirely.
Note
- Dell users can add
SMCDellSensors
for temperature monitoring and fan control. - If your laptop has a built-in compatible brightness sensor, you can add
SMCLightSensor
- Block IOSkywalkFamily:
- Add the following kexts from OCLP (found here and here) (adjust
MinKernel
accordingly):
- Save and reboot
- Verify that all the kext listed above are loaded. Enter
kextstat | grep -v com.apple
in Terminal and check the list. If they are not loaded, add-brcmfxbeta
boot-arg to your config. Save, reboot and verify again. - Apply Root patches with OCLP 0.6.9 or newer (you can find the nightly build here)
- If "Networking: Modern Wireless" or "Networking Legacy Wireless" (use either or depending on your card) is not shown in the list of available patches you need enable the option in the Source Code manually and compile OpenCore Patcher yourself. Instructions can be found here
- Reboot. After that WiFi should work (if your card is supported).
Compatible Cards: only a couple of Wifi cards are support at the moment. Depending on the card you are using you have to enable the correct option for patching Wifi (modern or legacy wifi):
- Modern:
- Broadcom BCM94350, BCM94360, BCM43602, BCM94331, BCM943224
- Legacy:
- Atheros Chipsets
- Broadcom BCM94322, BCM94328
You can use CPUFried.kext and a Data Injector kext to modify the CPU Frequency Vectors used by macOS.
By default, the frequency vectors stored in the selected SMBIOS are used to handle CPU Power Management. If your Hackintosh uses the same CPU model as the one used in the corresponding Mac model of the selected SMBIOS, you don't need to use this kext. But if the CPU used in your system doesn't match one of the CPUs defined in the selected SMBIOS of the corresponding Mac model (i.e. if your CPU is better or worse than the one used in the Mac), you should optimize the CPU Power Management so your CPU is working optimally in macOS.
Example: You are using the iMac19,1 SMBIOS but your CPU is an i7-9700, which is not defined in this SMBIOS. In this case, you should use CPUFriendFriend to generate a Data Provider kext which provides the correct CPU Frequency Vectors to CPUFriend which in return injects them into the selected SMBIOS. In order for this to work, CPUFriend needs to be loaded prior to CPUFriendDataprovider.
Here's how:
- Download and run CPUFriendFriend
- Follow the On-Screen Instructions
- Add CPUFried.kext and CPUFriendDataprovider kexts to EFI/OC/Kexts and your config.plist
- Order of the kexts as follows:
Note
For more info about CPU Power Management, please refer to → Enabling CPU Power Management
⚠️ The plists included in this section ARE NOT for use with any system. They are only examples for demonstrating the order of the kexts listed in "Kernel/Add" section!- Ignore the red dots in the screenshots.
- The kexts listed in Examples 2 to 6 are for PS2 Controllers (Keyboards, Mice, Trackpads). We recommend to use
config-2-PS2-Controller
plist as a starting point. - Thanks to Acquarius13 for explaining how to enable te Wifi Root Patches in OCLP!