EDIT 10/18/2011: This doesn’t seem to be working with 10.7.2 (causes a kernel panic on boot). Also tried adding <UseKernelCache><Yes> to org.chameleon.boot.plist (Chameleon 2.1 build 1627) and got a different KP. More updates to follow.
Update: Fix is below in red.
– – –
I’m done with the real-life Lion metaphors after this. Promise. If only Apple would quit infusing interface metaphors into every other application it releases.
In other news, my Lion hackintosh never seems quite ready to boot.
Lion boots sloooooooooooooooowly. Verbose output from the boot log indicates that Lion is processing every single kernel extension prior to booting (as if the -f flag was used), rather than caching the kernel extensions in a .mkext kernel extension boot cache. TL;DR: Lion isn’t caching kernel extensions.
It’s simple, really: force Lion to rebuild the kextcache and use it to boot. The solution thread on InsanelyMac.com (one of many like it) contains a good explanation of what’s actually happening, but here’s the code to build the cache (Edit: to make OS X also build a cache for your /Extra/Extensions folder, add “/Extra/Extensions” to the code below):
sudo kextcache -v 1 -a i386 -a x86_64 -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions
This *should* accomplish the same thing as setting the “kernelcache = yes” flag in com.apple.boot.plist. What does setting this flag do? tonymacx86.com has a very straightforward answer here. Please note that many a contributor to the InsanelyMac.com forum has reported kernel panics resulting from using this flag, while others have reported Lion booting fine (and quickly) but ignoring the kernel extensions placed in the /Extra/Extensions directory.
I have ONLY created the Extensions.mkext using the terminal code above; I HAVE NOT added the “kernelcache = yes” flag to com.apple.boot.plist.
The result? My machine now boots in seconds instead of minutes. That simple.
The Big Picture
What confuses me more than the problem itself (the solution is rather trivial) is why Apple decided to not include kernel extension caching automatically in Lion. OS X can clearly still read the kextcache– so why doesn’t it write one?
I’m not entirely sure, but it may be hackintosh-specific. I’m in the process of upgrading my brother’s MacBook Pro at the moment, so I will boot it with verbose logging and check back with the results.
Until then, enjoy the weekend! And don’t spend your whole weekend playing with your hackintosh… It’s beautiful outside. 🙂