Apple regularly introduces innovative solutions and improvements to macOS. However, not all improved tools can fully replace their predecessors. This is what happened with kernel extensions and their successors, System Extensions and DriverKit.
If you have a Mac, you've probably at some point come across the need to install a Kext. There are some installers available, but they are generally old and prone to crashing or cluttered with features you don't need. Kext Drop is a new, super easy Kext installer that just works. Advanced Mac users may want the ability to install programs, called kext files, to modify basic system information. Kext Drop for Mac, while simple and with limited features, works well for.
The super easy Kext installer. If you have a Mac, you've probably at some point come across the need to install a Kext. There are some installers available, but they are generally old and prone to crashing or cluttered with features you don't need. Kext Drop is a super easy Kext installer that just works. Install KEXT Files Easily with Kext Drop says: January 4, 2012 at 3:36 pm most people won’t need this application, or have any need to tweak with kext files and kernel extensions.
In this article, we overview the basics of implementing macOS kernel extensions. We discuss typical tasks requiring kernel extensions as well as tools and environments for creating them. We also take a look at some peculiar aspects of creating kexts. This tutorial will be useful for macOS developers working on projects that still require the use of kernel extensions.
Contents:
Introduction to the macOS kernel and kernel extensions
The kernel is the central part of an operating system, providing applications with coordinated access to system resources: CPU, memory, external hardware, external input/output devices, and so on. The kernel usually provides access to applications’ executable processes. It does so using mechanisms for interprocess communication and by providing applications with access to operating system calls.
The macOS kernel is XNU — an acronym for X is Not Unix. This hybrid kernel was developed by Apple and is used in the macOS family. In 2019, Apple introduced macOS version 10.15, also known as macOS Catalina, which contained System Extensions and DriverKit and moved most kernel APIs to the user space. This approach changed the way developers access kernel parts of the system and improved the security and stability of macOS. However, adding System Extensions and DriverKit to macOS didn’t completely erase the need for kernel extensions (kexts). Let’s look closer at the peculiarities of this macOS feature.
.kext kernel extensions

A kernel extension, or kext, is an application bundle used for extending the functionality of the macOS kernel. It’s the minimum unit of executable code that can be loaded and used in the kernel.
Usually, there’s no need for creating a kext when developing a macOS solution. The functionality available in user mode is sufficient for most tasks. Also, with the introduction of System Extensions and DriverKit, Apple has reduced the number of permitted APIs and cases where kexts can and need to be used.
But since the capabilities of System Extensions and DriverKit don’t cover all kext use cases, many developers still have to build and install custom kernel extensions.
There are tasks that can’t be implemented without a kernel extension, including:
- supporting a certain type of file system (including creating a new one)
- writing a specific device driver that the DriverKit API doesn’t cover (for example, a graphics driver)
One of the main restrictions when creating a kext is that the code of the kext itself, as indicated in Apple’s official documentation, should be essentially flawless. The reason for this strict quality requirement is simple enough: the worst-case scenario for an application is a crash and emergency exit. But if a kernel module fails, the worst-case scenario is a crash of the entire operating system and a reboot of the device. And if a kext is loaded at system startup and contains an error, it will crash the system each time it starts, thus complicating system recovery.
To avoid such unpleasant scenarios, it’s crucial to ensure the highest quality of kext code. In the next section, we take a look inside a kernel extension to give you a better understanding of its structure and most important operations.
Read also:
Avoiding Kernel Development in macOS with System Extensions and DriverKit
Inside a kernel extension
Before you dive into the world of custom development of kernel extensions for macOS, you need to get familiar with the structure, enter/exit routines, and kernel–user interactions of macOS. If you already know all about this, you can move straight to the next section.
Kext bundle structure
A kext, like any other macOS application, is a bundle, only with the .kext extension. A bundle is a special folder that encapsulates application resources (in our case, kext resources).
A kext bundle must contain two files:
Kext Drop For Macbook
- a compiled binary file with executable code
- an Info.plist file containing information about the kernel extension: name, version, identifier, kernel library dependencies, etc.
Sometimes, the bundle.kext folder also contains additional files, including:
- device firmware
- resources (including those localized for use by user mode applications)
- plugins, including other kexts
Enter/exit routines
Depending on the type of extension, a kext can be written in C or C ++ and has its own peculiarities when loading to and unloading to/from the kernel:
Since this article is devoted to regular kexts, let’s take a closer look at loading and unloading kernel extensions.
In kernel extension code, you must implement entry points — functions that are called when a kext is loaded to and unloaded from the kernel.
Entry points can have arbitrary names that must be specified in the project file:
Entry point functions have fixed prototypes:
What kexts do you need?
The kext that is absolutely required
VirtualSMC.kext (or FakeSMC.kext) is as aforementioned essential. This kext is what tells macOS 'Yes this is a real mac', emulating the functionality of the SMC on real Macs (hence the name). Without it, no Hackintosh.
Where can I find these kexts?
All the kexts shown here are available for download on the kext repo provided and maintained by Goldfish64. All these kexts are automagically built when a new kext update is commited.
Ethernet
- IntelMausiEthernet.kext - 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 - this works for most Atheros or Killer networking chipsets
- RealtekRTL8111.kext - this works with most gigabit Realtek LAN chipsets
- RealtekRTL8100.kext - for 10/100 Realtek LAN chipsets
USB
- USBInjectAll.kext- best explained by the creator of the kext himself:
In 10.11+ Apple has changed significantly the way the USB drivers work. In the absense of a port injector, the drivers use ACPI to obtain information about which ports are active. Often, this information is wrong. Instead of correcting the DSDT, a port injector can be used (just as Apple did for their own computers)
- GenericUSBXHCI.kext- this kext is often needed for USB 3 support, especially on FX.
Graphics
- WhateverGreen.kext- this kext fixes a lot of GPU related issues.
- Lilu.kext- this kext acts as a loader for other kexts. More specifically it can patch kexts, processes and libraries.
WiFi and Bluetooth
(I myself don't use Bluetooth nor WiFi so I don't have knowledge in that, but here is some information on the subject by CorpNewt. Check Credits for more info)
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
and the companion
Lilu.kext
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
repo.
Audio
- VoodooHDA.kext- a jack of all trades master of none solution to audio. Required on FX, but has better alternatives on Ryzen.
- If you are on Ryzen and have a supported codec we will be using native audio, this will be setup later on. This has a better quality than VoodooHDA along with other improvements.
Misc
- NullCPUPowerManagement.kext- This kext disables CPU power management, as that is not supported on AMD chips.
Extra
Kext Drop For Macbook Pro
Depending on what hardware you have in your machine you might need some other kexts. This list is more to be used to give you a general idea, you will probably have to do some google-fu.
