Jump to content

I8k.kext I/O Kit Driver for Dell Fan


Recommended Posts

Here is it the first release of the I8k.kext !


It is a complete new implementation of the I8k Dell Fan Control Driver using Apple's I/O Kit. Actually there is no GUI application for it but coming soon.


The Driver supports 1 or 2 Fan configuration and should be compatible with Lion and higher. It supports both 32 and 64 Bit kernels. The driver

can do it's Job best if you disable the BIOS control of fans.


This is in some fashion a debug release since it has lots of IOLog() statements that will spam your Console Application, but is needed for me to debug things

and if some of you have trouble they can report errors.


You can change settings of the driver in its Info.plist


Most keys should be self explaining. If you have questions just ask.


The attached file is a fat binary compiled for 32/64Bit Intel machines using XCode 4.4.1 and OS X 10.7 base SDK.


Link to comment
Share on other sites

Here is a new version with some more settings in the driver personality...if some is interested in writing a Cocoa GUI for it using I/O Kit device interface from User-Space I will give out sources to him.


New Setting include a way to force setFanState()'s and to tell the driver if BIOS Fan Controls are enabled which will lead to a change in

Low and High Fan states they must be switched. Why is unknown to me but that's how my D630 behaves.


And less debug statements in the timerAction routine which spammed Console App.



Link to comment
Share on other sites

Hey mate, maybe we should promote this to a "real" page - this is so good stuff that it deserves it :)

Thanks for this. I used I8kfan+GUI way back on Leopard and Snow Leopard and it worked fine. (Sometimes the GUI got a little stupid, but nothing major.)


I'll definitely tweak the Info.plist file and see how it runs. I imagine it would help to already know the max fan speed, min fan speed, etc that your fan can handle. Also, does the <key>I8kTemperatureCurrent</key> point to anything particular? Or does it read from BIOS and implement through I/O Kit?


And I must ask, does this load in /S/L/E, or /E/E? Does it load at all, or must it be manually loaded like the previous "i8kfangui.kext"? Can we use the GUI that came with the original (That this is based from)?




Try as I might, I cannot get this to load in /S/L/E or /E/E. I couldn't even load it with a terminal. I end up with the following error:


Requesting load of /Users/bobdamnit/Downloads/I8k.kext.

/Users/bobdamnit/Downloads/I8k.kext failed to load - (libkern/kext) requested architecture/executable not found; check the system/kernel logs for errors or try kextutil(8).


However, if I grab the one from the OP's earlier post (https://osxlatitude.com/index.php?/topic/1782-try-my-i8kfankext-for-64bit-kernel/), that one loads just fine. Just not automatically.


Fan control is working great for me, even without accessing the hidden BIOS menu and disabling BIOS control of the fan. It kept wanting to flip between "Low" and "High", but after doing that about 15 times, it finally took my defined presets. Temps went down easily 10 degrees celsius. Between this and PState, my D520 is cool. (Idle on "On Demand" performance is about 49 celsius.)


Second edit:


Kext is annoying. Wont load with launchd automatically. Only safe way I know of to launch an I/O Kit kext. I've already bypassed the I8kfanGUI.app requiring administrative priv's, just need a way to auto-load this kext and this would be awesome.

Link to comment
Share on other sites

I can get the kext to automatically load with launchd. Open a Terminal and enter the following command:


sudo pico /Library/LaunchDaemons/i8kfan.plist


When pico opens i8kfan.plist, add the following to the plist file:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">


Press Control+O to write out the file, then Control+X to close the pico editor.


Back in the Terminal, enter the following command:


sudo launchctl load /Library/LaunchDaemons/i8kfan.plist




To confirm the kext is loaded, perform the following in a Terminal:


kextstat -l (thats a lowercase "L")


Look for the following:



If you see that, the kext is loaded properly at startup.


Now, if I could just get around the GUI needing an admin password EVERY time it starts...


Hope this helps.

Link to comment
Share on other sites

It's damn annoying that, isn't it? 'made me abandon it all.

Its real damn annoying, actually.


But I'll get it. I'm a pretty patient guy. I'm looking into how LaunchAsRoot accomplishes it and seeing if I can mimic it. The other option is to rebuild the whole damn GUI with Xcode for 10.7 SDK. (I'm looking into this, but never having worked with Xcode, that could take a while.) That might be hard, as the GUI originally used a daemon to launch it, and anytime I try to remove the daemon in Xcode I get a staggering number of build errors that I'm clueless about fixing. I can build the GUI sources with 10.7 32/64-bit 10.7 SDK including the daemon, but the thing still asks for a password. (Even with building the thing to have 755 permissions.)


So, yeah. Its being a pain in the ass.

Link to comment
Share on other sites

So, I got it!


Open a Terminal and input the following (I'm assuming you have I8kfanGUI.app installed into /Applications):


sudo chmod 4755 /Applications/I8kfanGUI.app/Contents/MacOS/I8kfanGUI

sudo chown root:admin /Applications/I8kfanGUI.app/Contents/MacOS/I8kfanGUI

sudo chmod 4755 /Applications/I8kfanGUI.app

sudo chown root:admin /Applications/I8kfanGUI.app


After that, use DockDodger to remove the Dock icon for I8kfanGUI. (If you want.) Select the application as a login item, checkmark the "Hide" box, and restart.


Should work just fine after that. (It is for me!)

  • Like 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in

Sign In Now
  • Create New...