kexts - heldersrvio/PureDarwin GitHub Wiki
Darwin kernel extensions (KEXT) are modules that provide aditional functionality to the kernel, e.g., in the form of device drivers.
The kernel cannot boot at all (crashes) if there is not at least a certain set of KEXTs present. The minimal set of KEXTs required to boot Darwin 9 from USB appears to be:
- AppleACPIPlatform.kext
- AppleAPIC.kext
- AppleFileSystemDriver.kext
- AppleRTC.kext
- AppleSMBIOS.kext
- IOACPIFamily.kext
- IOATAFamily.kext
- IOHIDFamily.kext
- IOPCIFamily.kext
- IOSCSIArchitectureModelFamily.kext
- IOStorageFamily.kext
- IOUSBFamily.kext
- IOUSBMassStorageClass.kext
- System.kext
This should get the system booting from USB (At the very least, it should go beyond the Got boot device
phase, so that no message Still waiting for boot device...
appears).
Copy the KEXT to $VOLUME/System/Library/Extensions/
and fix permissions (important):
chown -R root:wheel $VOLUME/System/Library/Extensions/ chmod -R 755 $VOLUME/System/Library/Extensions/
The minimal set of KEXTs above cannot, for example, boot from a CD, since the CD driver is not there. Hence, if we want to boot from CD, for example, we need to install the CD driver KEXT and its dependencies. Thus, we need to identify the dependencies.
In order to determine the dependencies of a KEXT, we can use kextlibs. Example:
kextlibs $VOLUME/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext com.apple.kpi.libkern = 9.2.2 com.apple.kpi.iokit = 9.2.2 com.apple.iokit.IOUSBFamily = 3.0.8
So in this example, AppleUSBCDC.kext has three dependencies. To see which KEXT satisfies a dependency (aka dependents), use kextfind:
kextfind -case-insensitive -bundle-id -substring 'com.apple.iokit.IOUSBFamily' -print /System/Library/Extensions/IOUSBFamily.kext
Of course, IOUSBFamily.kext itself has its own dependencies, so we need to make that recursive if we want to find out all dependencies.
Take a look at Visualize KEXTs dependencies page.
A cache of installed KEXTs is kept in order to speed up boot time.
Extensions.mkext can be unpacked with the mkextunpack command:
mkextunpack -v -d /tmp/Extensions Extensions.mkext
Normally, Extensions.mkext is updated whenever we add or remove extensions using the Finder on a Mac OS X system. However, if you install an extension as a plug-in of another (a subfolder into $VOLUME/System/Library/Extensions), the automatic cache updater is not triggered.
To force cache update, simply change the modification date of $VOLUME/System/Library/Extensions:
touch $VOLUME/System/Library/Extensions
(To be written)
Family KEXTs are not drivers. Family KEXTs generally contain classes that you are to subclass
Filesystem KEXTs {style="margin:10px 10px 10px 0px;background-color:transparent;color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:14px"}
Filesystem KEXTs are not drivers.