Contribute
Register

[GUIDE] Installing 3rd Party Kexts - El Capitan, Sierra, High Sierra, Mojave, Catalina

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,048
Motherboard
ASRock-Z97 EX6
CPU
i7-4790K OC @ 4.8GHz
Graphics
Vega 64LC + HD4600
Mac
MacBook Air, MacBook Pro
Mobile Phone
Android, iOS
377425
Installing 3rd Party Kexts

1. What Versions of MacOS does this guide cover ?

The methods detailed in this guide will work on the following versions of MacOS
  • MacOS 10.11.X - El Capitan
  • MacOS 10.12.X - Sierra
  • MacOS 10.13.X - High Sierra
  • MacOS 10.14.X - Mojave
  • MacOS 10.15.X - Catalina
Note: If you are using VirtualSMC in place of FakeSMC then you should replace all instances of FakeSMC mentioned in this guide with the Lilu and VirtualSMC kexts, some users have reported that it is necessary to use LiluFriend to load VirtualSMC early enough in the boot process - see posts #7 to #13 for more info.



2. Where should I install 3rd Party Kexts ?

You should install all 3rd Party kexts (including FakeSMC) to /Library/Extensions (/L/E)
Warning: you can not simply use Finder to copy kexts into /L/E (see Section 7 below)



3. What about EFI/Clover/kexts/Other ?

It seems that many users are under the impression that you can simply copy all 3rd Party Kexts into EFI/Clover/kexts/Other and allow Clover to Inject the kexts by setting Clover -> System Parameters -> Inject Kexts to "Yes" which will result in a maintenance free and more native MacOS install.

This assumption is completely wrong ...



4. Why should I use /Library/Extensions over Clover Injected kexts ?

Contrary to Hackintosh myth, having Clover inject all the 3rd party kexts does not result in a cleaner install, in fact the exact opposite is true.
  • Injected Kexts live outside of "protected MacOS memory" *
  • Injecting a large amount of kexts can result in an unstable system.
  • Many 3rd party kexts will not work correctly when injected by Clover.
  • Injected Kexts are not included in the kernel cache and thus are excluded form MacOS error checking.
  • Installing kexts in /Library/Extensions is the Apple endorsed and recommended location for all 3rd Party kexts.
If you purchase a piece of hardware that requires the installation of a manufactures MacOS driver, the kexts will be installed in /Library/Extensions so why treat hackingtosh kexts any different ?

* Note: I use the term "protected MacOS memory" in this guide as a generic descriptive term. In reality kext's installed in /L/E are loaded into MacOS's kernel memory which is 'protected' (IE: segregated) form application memory and execution memory. Everything running in kernel memory (including kexts) is actively managed and monitored by MacOS.



5. If thats true why does Clover even have this feature ?

The main reason that Clover supports injecting kexts is to load critical kexts required to run the following :-
  • MacOS Installer
  • MacOS Updater
  • MacOS Recovery
Since none of the above are full MacOS operating systems it is not possible to install the kexts we need to run them so we use Clover to inject the critical kexts we need before running them. Most users will only need FakeSMC in EFI/Clover/kexts/Other in order to run all of the above packages. Some users may need to add additional driver kexts in order to access 3rd party storage controllers or NAS based TimeMachine backups, laptop users may need to add a mouse or trackpad kext if they require mouse control when running Recovery.

Think very carefully about the kexts you actually need in EFI/Clover/kexts/Other ... you only need the absolute bare minimum to run the above packages.

Examples of Critical Kexts :-
  • FakeSMC (or Lilu + VirtualSMC) is a basic necessity and must always be included in EFI/Clover/kexts/Other
  • Some GPU's/IGPU's may need Lilu + WhatEverGreen kexts
  • Ethernet driver if you need to restore a TimeMachine Backup in Recovery from a NAS
  • VoodooPS2Controller on laptops so you can use keyboard and trackpad in recovery
Examples of Non-Critical Kexts :-
  • Audio drivers (EG AppleALC)
  • Bluetooth drivers
  • Airport drivers
  • FakeSMC Sensor plug-in's


6. How does Clover know to Inject kexts or Not ?

You need to set Clover -> System Parameters -> Inject Kexts to "Detect"

With this setting, Clover will look for FakeSMC in /Library/Extensions or the MacOS Kernel Cache when you select/boot MacOS, if 'detected' Clover will not inject any kexts and leave MacOS to load all the 3rd party kexts (including FakeSMC) from /Library/Extensions (or the kernel cache) which is the preferred and recommended method for all the reasons stated in section 4. of this guide.

If Clover does not 'detect' FakeSMC in /Library/Extensions or the MacOS Kernel Cache such as when booting Recovery or a MacOS update then Clover will inject all the kexts from the EFI/Clover/kexts/Other folder.

Note: It is also possible to set Clover -> System Parameters -> Inject Kexts to either "No" or "Yes", these values should be considered as debugging settings, if set to "No" then Clover will never Inject any kexts and thus you will be unable to run Recovery or any MacOS Updates. If Set To "Yes" then Clover will Inject all kexts in EFI/Clover/kexts/Other regardless of any other condition, this can obviously cause problems if you have duplicate kexts in /Library/Extensions as these kexts will be loaded twice which can be especially problematic if you have different versions in the two locations.



7. How do I install kexts in /Library/Extensions ?

Important: Do not use Finder to copy kext's to /Library/Extensions as it will not correctly install the kext(S)

Prerequisites :-

First we need to make sure that MacOS is allowed to load unsigned kexts/drivers by setting BooterConfig and CsrActiveConfig in Clover's RTVariables section to the correct values.

Code:
<key>RtVariables</key>
    <dict>
        <key>BooterConfig</key>
        <string>0x28</string>
        <key>CsrActiveConfig</key>
        <string>0x67</string>
        .
        .
        .
    </dict>

You can also set these values in the RTVariables section of Clover Configurator :-

386314


Note: With MacOS Catalina 10.15.X Apple has moved MacOS on to its own system partition which is normally read only, as such installing kexts into /L/E is a little more complex than it was in previous versions of MacOS. Luckily @headkaze has already added Catalina support to Hackintool for installing kexts and rebuilding the kernel cache, if your running MacOS Catalina then you should stick to the Hackintool method described below.

The Hackintool Method

Prerequisites:
Make sure you have the latest version of Hackintool installed

Tip: If you have a lot of kexts to install then it easer to copy them all to a common folder.

Run Hackintool and click on the "Tools" icon on the upper in-app menu.

Catalina only: On the lower in-app menu bar click on the icon to "Disable Gatekeeper" and mount the System partition in Read/Write mode, You will be prompted to enter your system/admin password :-

Hackintool-Catalina-Gatekeeper.png


For all versions of MacOS: Now click on the "Install Kexts(s)" icon on the lower menu

Screenshot 2019-05-12 at 18.29.09.png
Navigate to the folder you want to install the kext(s) from and select (CMD-Click) the ones you want to install so that they are highlighted, then click on "Select".

Screenshot 2019-05-12 at 19.10.08.png

If prompted enter your admin/system password, Hackintool will now install the selected kexts into /L/E, repair all kext permissions and rebuild the kext caches :-

Screenshot 2019-05-12 at 18.35.46.png
Once it's finished you should see something like the following :-

Screenshot 2019-05-12 at 18.36.38.png

Thats it .. job done ... don't worry that the output is red .. thats completely normal, you should now reboot your system to load the newly installed kexts.

_____________________________________

Legacy Easy Method :-

First Download KextBeast which is available in the downloads section

For MacOS Catalina Only:

Before installing Kexts you must first disable Gate Keeper and mount the System Partition as Read/Wriet.
Enter the following commands in terminal, one at a time :-

Code:
sudo spctl --master-disable
sudo mount -uw
sudo killall Finder

For All MacOS versions :

Copy all the kext's you want to install onto the desktop and run the KextBeast pkg file, click on Continue a few times, enter your admin password when prompted and accept the usual notices until you get the option to select the install target. Select /Library/Extensions and click on Continue.

Kext_Beast.png
KextBeast will install the kext's that you placed on the desktop into the target Extensions folder. Once Kext Beast has done its work it will offer you the option of keeping the pkg or deleting it. I generally click on "keep" as i'm always trying new and different versions of kext's and KextBeast is a quick and easy way to do the job.

Note: Do not install kexts into /System/Library/Extensions unless you are running a version of MacOS earlier than El-Capitan as it will cause SIP (System Integrity Protection) issues.

Once Kext Beast has finished I recommend running version 2.6.6 of cVad's Kext Utility (click here to download) which will repair any broken kext permissions and rebuild the caches. Simply run the app and enter your admin password when prompted, then wait while Kext Utility does it's work, it will take a while (approx 40 seconds) ... you will know when it's finished once you see "Quit" in black text at the bottom of the app window.

Kext_Utility.png
Warning: Do not use Kext Utility to install a kext as it does not support installing kext's into /Library/Extensions, it does however do a very good job of repairing all kext permissions and rebuilding the caches.

Once Kext Utility has finished reboot your system.

_____________________________________

Terminal/Console Method :-

For MacOS Catalina Only:


Before installing Kexts you must first disable Gate Keeper and mount the System Partition as Read/Wriet.
Enter the following commands in terminal, one at a time :-

Code:
sudo spctl --master-disable
sudo mount -uw
sudo killall Finder

For All MacOS versions :

Using Finder, create a folder on your desktop, copy all the kexts you want to install into it.
  1. Open Terminal and change the active path to the folder you created in step 1 using the "CD" command.
  2. Install the Kexts into /Library/Extensions using the following command :-
Code:
sudo cp -R *.kext /Library/Extensions

4. To repair permissions and rebuild the caches enter the following commands one at a time :-​

Code:
sudo chown -v -R root:wheel /System/Library/Extensions
sudo touch /System/Library/Extensions
sudo chmod -v -R 755 /Library/Extensions
sudo chown -v -R root:wheel /Library/Extensions
sudo touch /Library/Extensions
sudo kextcache -i /

The above command set is a belt and braces approach (mimics what Hackintool and Kext Utility does) and should make sure that there are no problems with any file persimmons on the system kexts (in /S/L/E) and the 3rd party kexts (in /L/E).

Once finished reboot your system.



8. Updating Kexts

If you need to update one or more kexts then use Finder to the delete just the kexts you want to update (do not select all/delete all) from /Library/Extensions and then install the new versions using one of the methods detailed in section 7 of this guide.

Note: Catalina users should first run Hackingtool and click on the icon in the tools section to disable Gatekeeper and mount the System drive in Read/Write, then you can delete the kexts you want to update and then use Hackintool to install the updated kext(s).

To update kexts in EFI/Clover/kexts/Other simply use Finder to copy and paste the new kexts and select "Replace" when prompted.



9. Deleteting Kexts

If you need to delete one or more kexts, simply navigate to /L/E in Finder, select the kext(s) you no longer need and select Move to Trash in the context menu (right click).

Note: Catalina users should first run Hackingtool and click on the icon in the tools section to disable Gatekeeper and mount the System drive in Read/Write, then you can delete the necessary kexts.

Then run Hackingtool and use the "Repair Permissions and Rebuild Caches" feature on the Tools page :-

Hackingtool-repair-rebuild.png
Alternatively you can run Kext Utility or execute the Terminal commands to repair permissions and rebuild the caches (see Section-7 above).



10. Summary

1. Copy FakeSMC and only critical kext's needed to run the MacOS Installer, Updater or Recovery to EFI/Clover/kexts/Other
2. Install all 3rd party kexts (including FakeSMC) required to run MacOS in /Library/Extensions
3. Set Clover -> System Parameters -> Inject Kexts to "Detect"​
 
Last edited:
Joined
Feb 18, 2011
Messages
55
Motherboard
Asrock B85M-ITX
CPU
i5-4670K
Graphics
HD4600
Mac
MacBook Pro
Classic Mac
LC
Mobile Phone
iOS
Pretty cool guide. I appreciate your efforts in making it as understandable as it can be. I learned a couple of things.
Cheers
 
Joined
Nov 26, 2017
Messages
197
Motherboard
Dell Inspiron 5379 - 1.11 - Clover
CPU
i5-8250U
Graphics
UHD 620, 1920x1080
Mac
iMac, MacBook Air
Mobile Phone
Android
Note: If you are using VirtualSMC in place of FakeSMC then you should replace all instances of FakeSMC mentioned in this guide with the Lilu and VirtualSMC kexts.
Hi, is there some special care when using Lilu and VirtnualSMC ?
Actually I am not able to move my laptop kexts (having VirtnualSMC) from the clover folder to L/E
The only workaround I have found on the forum is to add the vsmcgen=1 boot argument
Workaround is working, but wonder if concerns only laptop with VirtnualSMC, and what its consequences are ?
Many thanks for your guide
 
Last edited:
Joined
Aug 22, 2017
Messages
333
Motherboard
ASUS Rog Maximus IX Hero
CPU
i7-7700K
Graphics
RX 580
Mac
iMac
Mobile Phone
iOS
Note: Do not use Finder to copy kext's to /Library/Extensions as it will result in the kexts having bad permissions.
Ok, this is a fantastic guide! Thank you for explaining the importance of extension placement. There are a lot of noobs roaming this site myself included that really benefit from this type of information. So again, THANK YOU! And thank you to @manHands who turned me onto this guide.

If I may make one small suggestion - the statement above regarding the warning NOT to use Finder to place kexts in their proper location is probably the first statement that needs to be made in BIG BOLD LETTERS! People are trying to get from point A to point B as quickly as possible without reading through all of the material, so it's like putting a warning label on silica gel to not digest that crap. :D
 

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,048
Motherboard
ASRock-Z97 EX6
CPU
i7-4790K OC @ 4.8GHz
Graphics
Vega 64LC + HD4600
Mac
MacBook Air, MacBook Pro
Mobile Phone
Android, iOS
Hi, is there some special care when using Lilu and VirtnualSMC ?
Actually I am not able to move my laptop kexts (having VirtnualSMC) from the clover folder to L/E
The only workaround I have found on the forum is to add the vsmcgen=1 boot argument
Workaround is working, but wonder if concerns only laptop with VirtnualSMC, and what its consequences are ?
Many thanks for your guide

@favoriti,

I don't use VirtualSMC myself as I personally don't think its quite ready for prime time yet, it still lacks sensor plug-ins for certain system monitoring controllers and GPU's and it's been proven to be unstable of some systems. A such I think VirtualSMC should be considered as Beta software.

However once the stability issues have been resolved and it supports more sensor plug-in's then I do think that it will surpass FakeSMC and become the new standard for emulating the Apple SMC controller.

The advice for VirtualSMC in the guide was passed to me via another Moderator here at TMx86, as far as I am aware he has no issues running VirtualSMC from /L/E ... Since I don't use it myself I really can't comment on the consequences of using the vsmcgen=1.

However now that you have mentioned it, i'll try and get an answer from the VirtualSMC devs and update the guide if i find anything out.

Cheers
Jay
 
Last edited:

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,048
Motherboard
ASRock-Z97 EX6
CPU
i7-4790K OC @ 4.8GHz
Graphics
Vega 64LC + HD4600
Mac
MacBook Air, MacBook Pro
Mobile Phone
Android, iOS
this is a fantastic guide! Thank you for explaining the importance of extension placement.

@luckyal,

Thank you for the feedback, i'm glad that you found it useful.

tIf I may make one small suggestion - the statement above regarding the warning NOT to use Finder to place kexts in their proper location is probably the first statement that needs to be made in BIG BOLD LETTERS!

Thanks for the suggestion, i'll add something toward the top of the guide that indicates the importance of not using finder to copy kexts to /L/E.

Cheers
Jay
 
Joined
Nov 26, 2017
Messages
197
Motherboard
Dell Inspiron 5379 - 1.11 - Clover
CPU
i5-8250U
Graphics
UHD 620, 1920x1080
Mac
iMac, MacBook Air
Mobile Phone
Android
However now that you have mentioned it, i'll try and get an answer from the VirtualSMC devs and update the guide if i find anything out.
Hi !
I found this thread talking the question of installing VirtualSMC in L/E
https://www.tonymacx86.com/threads/guide-dell-xps-9560-mojave-virtualsmc-i2c-trackpad-clover-uefi-hotpatch.263567/page-17
@RehabMan indicates it could be considered to build a LiluFriend.kext (@polarbear128 had no more need vsmcgen=1 boot flag when doing that)
Tried to do that with no success for now ...
 

Feartech

Moderator
Joined
Aug 3, 2013
Messages
12,242
Motherboard
Asus N752VX-Clover
CPU
i7-6700HQ / HM170
Graphics
HD530 + GTX 950m 1920 x 1080
Mac
iMac
Mobile Phone
Android
Hi !
I found this thread talking the question of installing VirtualSMC in L/E
https://www.tonymacx86.com/threads/guide-dell-xps-9560-mojave-virtualsmc-i2c-trackpad-clover-uefi-hotpatch.263567/page-17
@RehabMan indicates it could be considered to build a LiluFriend.kext (@polarbear128 had no more need vsmcgen=1 boot flag when doing that)
Tried to do that with no success for now ...
yes, i had the same issue, i used a tool from Rehabman that created a LiluFriend.kext and that worked great

first off i would recommend to make sure you are using the latest kexts:
https://bitbucket.org/profdrluigi/kextupdater/downloads/

and then create the LiluFriend.kext:
https://github.com/RehabMan/hack-tools

install the kext, reboot without caches, and then in terminal rebuild caches:

Code:
sudo kextcache -i /
and then reboot
 

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,048
Motherboard
ASRock-Z97 EX6
CPU
i7-4790K OC @ 4.8GHz
Graphics
Vega 64LC + HD4600
Mac
MacBook Air, MacBook Pro
Mobile Phone
Android, iOS
RehabMan indicates it could be considered to build a LiluFriend.kext

yes, i had the same issue, i used a tool from Rehabman that created a LiluFriend.kext and that worked great.

@Feartech,

Do you consider LiluFriend as a requirement in order to load VirualSMC from /L/E earlier enough in the boot process ?

If so i'll add a bit to the guide that details this.

Cheers
Jay
 

Feartech

Moderator
Joined
Aug 3, 2013
Messages
12,242
Motherboard
Asus N752VX-Clover
CPU
i7-6700HQ / HM170
Graphics
HD530 + GTX 950m 1920 x 1080
Mac
iMac
Mobile Phone
Android
@Feartech,

Do you consider LiluFriend as a requirement in order to load VirualSMC from /L/E earlier enough in the boot process ?

If so i'll add a bit to the guide that details this.

Cheers
Jay
it was on my machine, without it i needed to use boot argument vsmcgen=1 otherwise the machine failed to boot

although i saw that other's didn't need a LiluFriend.kext and their machines booted fine without it

not sure if this is an Asus issue, although i did have to download and mod my own bios by updating the microcodes before i could install High Sierra .6 on it, not sure if that was an issue

maybe as i had to delete SMChelper for VirtualSMC to work was the cause?

apparently, using a LiluFriend.kext is a preferred way (going by Rehabman's comments over the months)
 
Top