Managing kernel extensions (KEXT) has evolved over recent years as Apple works to phase them out in favour for more modern approaches like System Extensions which execute in the reduced privileged user-space as opposed to the elevated privilege of running in kernel-space. The reason for this change is part of Apple's push to make the Mac as much an appliance as possible and to keep the core operating system as stable as possible by keeping the contents of the system to Apple-only code.

To that end, the method in which KEXTs are managed (loaded, unloaded, installed, etc...) has evolved. What hasn't been updated to keep pace with these changes are the KEXT installers. This means we're finding more cases of KEXT installers not succeeding in leaving the system able to successfully load the newly installed KEXT.

Below is a list of OS version specific code to assist with allowing the KEXT to load successfully at the next boot time. Run the appropriate commands for your macOS version and then reboot, this process has succeeded in assisting several customers with issues where SymplyLTO or SymplySPARK products appear to fail to connect to their Mac systems.

macOS Mojave

sudo kextload /Library/Extensions/<KEXT_NAME>.kext
sudo kextcache -i / -f

macOS Catalina

sudo kextcache -prune-staging
sudo kextload /Library/Extensions/<KEXT_NAME>.kext
sudo kextcache -i / -f

macOS Big Sur and above

sudo kmutil clear-staging
sudo kmutil load -–load-style start-and-match -p /Library/Extensions/<KEXT_NAME>.kext
sudo kmutil install --force

Dealing with persistent load failures at boot time

We have come across a number of customers who seem to be unable to get the ATTO driver to load at boot time no matter how many times they run the above commands or re-run the installer. In these cases we have a workaround using a launchd daemon (attached). This .plist needs to be copied to /Library/LaunchDaemons/ and then the following commands run in Terminal to set the permissions and load the launchd item correctly.

sudo chmod 0755 /Library/LaunchDaemons/com.symply.loadatto.plist
sudo chown 0:0 /Library/LaunchDaemons/com.symply.loadatto.plist
sudo launchctl bootstrap system /Library/LaunchDaemons/com.symply.loadatto.plist


Custom Package for Accusys kext

I have created 2 versions of a custom package which installs a launchd item and bash script which will unload the old version of the ACS6x.kext and load the newest version at boot time as root.