OS X Lion with GTX 570 and GTX 465 quad monitor support
September 11, 2011
Disclaimer: if you’ve stumbled across this article don’t attempt these steps without reading through the whole post and know that if you do screw something up your system may not boot again properly until you put your drive into another Mac or Hackintosh and undo your changes.
When I first purchased my ultimate Hackintosh machine, I bought the EVGA NVIDIA GeForce GTX 570 card. I did so foolishly without first finding out whether it was “supported” by OS X or the Hacktinosh community at large. I just got it because it sounded awesome and like a typical Linux user, assumed the drivers will come later.
Before we get going with the solution to getting the GTX 570 card working, here’s my system specs:
- Asus P6X58D-E Motherboard
- Intel i7 970 processor 3.2GHz 6 Cores, 12 threads
- 6 – 4GB Kingston DDR3 1333MHz – 24GB RAM
- 2 – 2TB Western Digital Black SATA3 6GB/s drives
After a few attempts I was able to get the GTX 570 to boot and after a few more I was able to get it to boot up with correct resolution detection, it wasn’t until 24 hours later that I was able to get everything to boot up with OpenGL (which was the biggest headache).
Okay so here’s what I had to do to get it working… I ran into countless dead ends with OS X 10.7.0 so, refusing to be beat, I updated to 10.7.1 and that’s when everything started working correctly for me.
I’m running:
- Mac OS X Lion 10.7.1 Update
- Chimera 1.5.4 (which added a device ID for the GTX 570)
Another important note with my rig is that my EVGA NVIDIA GTX 570 has the device ID 1081. There are others which have 1086 instead and so they need different configuration modifications than those listed below. (Possibly just changing 1081 to 1086 wherever it’s listed below)
First thing’s first, once you have OS X 10.7.1 installed, you need to edit the /System/Library/Extensions/NVDAGF100Hal.kext/Contents/Info.plist to add the device ID for your video card. I like to do stuff right from the Terminal though there are countless helper apps, so first let’s create a Backup folder for all of the files we’re going to break in case we need the originals again…
Password:
# mkdir /Users//Desktop/Backup-GTX570-Mods/
# rsync -av /System/Library/Extensions/NVDAGF100Hal.kext/ /Users//Desktop/Backup-GTX570-Mods/NVDAGF100Hal.kext/
Now let’s add our device IDs..
Add your device ID to the IOPCIPrimaryMatch key list, mine is 1081 but yours may be 1086. The 10de part is nVidia’s vendor ID, in case you’re wondering. That’s why they’re all the same.
<string>
0x06c010de&0xffe0ffff
0x0dc010de&0xffc0ffff
0x0e2010de&0xffe0ffff
0x0ee010de&0xffe0ffff
0x0f0010de&0xffc0ffff
0x104010de&0xffc0ffff
0x124010de&0xffc0ffff
0x108110de&0xffc0ffff
</string>
With this addition your system should boot up and you should have the correct resolution for your monitor instead of being stuck at 1024×768. YouTube videos will play but you won’t be able to use any OpenGL or OpenCL like watching a video with VLC or opening Chess.
Next thing I added was ATY_init.kext which set things in motion. Once downloaded and unzipped…
# chown -R 0:0 /System/Library/Extensions/ATY_Init.kext
# chmod -R 755 /System/Library/Extensions/ATY_Init.kext
There are three more files I needed to modify to get everything swimming along, the first was /Extra/com.apple.Boot.plist or, in my case since I’m running Chimera 1.5.4 /Extra/org.chameleon.Boot.plist In there I needed to disable the Graphics Mode by setting it to a blank string and add a Hex EFI String for the GTX 570 card. My Kernel Flags section also needed to be modified as it had something about i386 in it. Here’s my /Extra/org.chameleon.Boot.plist (update sept 16 at bottom of this post has new file)
<dict>
<key>Kernel</key>
<string>mach_kernel</string>
<key>Kernel Flags</key>
<string>npci=0x2000</string>
<key>Timeout</key>
<string>2</string>
<key>Legacy Logo</key>
<string>Yes</string>
<key>EthernetBuiltIn</key>
<string>Yes</string>
<key>Graphics Mode</key>
<string></string>
<key>device-properties</key>
<string>6c0200000100000001000000600200000d00000002010c00d041030a000000000101060000030101060000007fff04001e00000072006f006d002d007200650076006900730069006f006e0000002e0000004e5649444941204765466f7263652047545820353730204f70656e474c20456e67696e65205b4546495d22000000400030002c006400650076006900630065005f00740079007000650000000b000000646973706c6179100000004e00560043004100500000001800000004000000000003000c00000000000007000000000e0000006e0061006d00650000000b000000646973706c617914000000400030002c006e0061006d0065000000120000004e5644412c446973706c61792d41100000006d006f00640065006c0000001a0000004e5649444941204765466f72636520475458203537300e0000004e00560050004d000000200000000100000000000000000000000000000000000000000000000000000014000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d4220000000400031002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d6163220000005600520041004d002c0074006f00740061006c00730069007a0065000000080000000000005020000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d616322000000400031002c006400650076006900630065005f00740079007000650000000b000000646973706c61791c0000006400650076006900630065005f00740079007000650000000f0000004e5644412c506172656e74</string>
</dict>
</plist>
To generate my HEX string I used OSX86Tools. Open it up (reboot may be required?) and press Add EFI Strings/Boot Flag in the bottom box. Click on the GFX Strings button in the dialog box that pops up and then for Graphics Card choose Custom GeForce… at the bottom. Enter: NVIDIA GeForce GTX 570 for the name, Custom… for the VRAM and enter: 0x50000000 which equates to 1280MB. Select DVI-I / DVI-I and continue.
I just used the HEX value generated in the bottom window and created my new device-properties key manually. I didn’t use the program to manipulate the org.chameleon.Boot.plist file, I did it via Terminal manually.
So now the system will boot and not set the graphics mode and it will be told that it’s OpenGL capable. The next file I changed was a hex change from netkas to enable OpenCL for the card. So let’s back up the files and make them user-editable.
# cp /Users//Desktop/Backup-GTX570-Mods/GeForceGLDriver.bundle/Contents/MacOS/GeForceGLDriver /Users//Desktop/
# chown /Users//Desktop/GeForceGLDriver
Now let’s use HexEdit and follow netkas’ instructions on our /Users//Desktop/GeForceGLDriver file.
Find
a883f8028b45f0
replace 02 with 03 to get
a883f8038b45f0Find
ea83f802498b
replace 02 with 03 to get
ea83f803498b
So with our Desktop copy of the file patched and our original safely backed up let’s put this one into place…
# chown -R 0:0 /System/Library/Extensions/GeForceGLDriver.bundle/
# chmod -R 755 /System/Library/Extensions/GeForceGLDriver.bundle/
So now there’s just one more file left to tweak, it’s the AppleGraphicsPowerManagement or AGPM. For our changes to take effect the system type has to match our defined system type and our GTX 570’s device ID. So I used Multibeast from tonymacx86 to change my system type to iMac12,2 because that’s what others had done and that’s where the changes in this file seem to be.
Open up /System/Library/Extensions/AppleGraphicsPowerManagement.kext/Contents/Info.plist and edit the section which begins with iMac12,2 to be as follows:
<dict>
<key>Vendor10deDevice1081</key>
<dict>
<key>Heuristic</key>
<dict>
<key>ID</key>
<integer>0</integer>
<key>IdleInterval</key>
<integer>250</integer>
<key>SensorOption</key>
<integer>1</integer>
<key>SensorSampleRate</key>
<integer>4</integer>
<key>TargetCount</key>
<integer>5</integer>
<key>Threshold_High</key>
<array>
<integer>93</integer>
<integer>93</integer>
<integer>93</integer>
<integer>100</integer>
</array>
<key>Threshold_Low</key>
<array>
<integer>0</integer>
<integer>97</integer>
<integer>97</integer>
<integer>100</integer>
</array>
</dict>
<key>LogControl</key>
<integer>1</integer>
<key>control-id</key>
<integer>18</integer>
</dict>
<key>default-control-id</key>
<integer>18</integer>
</dict>
So! After making all of those changes and rebooting, I was succesfully able to boot, MUCH faster than ever before and once the system booted up OpenGL/CI worked videos play in VLC, youtubes tube, and 3D benchmarks in NovaBench and Xbench don’t crash the system anymore.
I tossed the EVGA nVidia GeForce GTX 465 in the second PCI Express slot and without any futher alterations I have quad monitors with 1920×1080 each. There’s a slight flicker when I move a playing video from one monitor on one card to another but I seem to be able to play them halfway between each just fine.
A big thanks goes to the materials found from these threads on tonymacx86’s forum and InsanelyMac’s. Wouldn’t have been possible for me to figure this out without all of their leg work.
Update [sept 13]: after only two days of use I noticed that my sound card wasn’t working. I used Multibeast to add in the missing kext files and I’ve been working on recovering from that ever since. I can boot the system fine, but once again no OpenGL. In the process of trying to fix things I’ve updated to the new Chameleon layout which got rid of /Extras/Extensions and added UseKernelCache key. If I don’t boot using the kernel cache, I can’t boot. If I do use the kernel cache, it ignores my Graphics Mode declaration (I’m guessing that’s why the OpenGL isn’t working). Trial and error is becoming extremely annoying, but I will solve this… and then never update my system again.
Update [sept 16]: after a week more of trial and error, I’ve got everything working correctly again, I’ve had to alter my org.chameleon.Boot.plist because with the new Chimera versions it seems the Graphics Mode function is ignored, BUT, I think the only thing we need to avoid is declaring the graphics mode to the card before the OS boots (so the OpenGL) will work. So to do so we can just boot with -v and the graphics mode will only get set once the OS boots. Here’s my new /Extra/org.chameleon.Boot.plist
<dict>
<key>Kernel</key>
<string>mach_kernel</string>
<key>Kernel Flags</key>
<string>-v arch=i386 npci=0x2000</string>
<key>Timeout</key>
<string>2</string>
<key>Legacy Logo</key>
<string>Yes</string>
<key>EthernetBuiltIn</key>
<string>Yes</string>
<key>UseKernelCache</key>
<string>Yes</string>
<key>GraphicsEnabler</key>
<string></string>
<key>Graphics Mode</key>
<string></string>
<key>device-properties</key>
<string>6c0200000100000001000000600200000d00000002010c00d041030a000000000101060000030101060000007fff04001e00000072006f006d002d007200650076006900730069006f006e0000002e0000004e5649444941204765466f7263652047545820353730204f70656e474c20456e67696e65205b4546495d22000000400030002c006400650076006900630065005f00740079007000650000000b000000646973706c6179100000004e00560043004100500000001800000004000000000003000c00000000000007000000000e0000006e0061006d00650000000b000000646973706c617914000000400030002c006e0061006d0065000000120000004e5644412c446973706c61792d41100000006d006f00640065006c0000001a0000004e5649444941204765466f72636520475458203537300e0000004e00560050004d000000200000000100000000000000000000000000000000000000000000000000000014000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d4220000000400031002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d6163220000005600520041004d002c0074006f00740061006c00730069007a0065000000080000000000005020000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d616322000000400031002c006400650076006900630065005f00740079007000650000000b000000646973706c61791c0000006400650076006900630065005f00740079007000650000000f0000004e5644412c506172656e74</string>
</dict>
</plist>
Check out the write-up on 10.7.2 for more.
Strange: if I add
Graphics Mode
"Graphics Mode"="1280x1024x32"
in /Extra/org.chameleon.Boot.plist
the screen is 1280 x 1024, so I followed the entire procedure.
I always get 1024x768 if I remove
"Graphics Mode"="1280x1024x32"
The first step does not allow me to display anything else than 1024x768.
I added the line:
0x108110de&0xffc0ffff
checked the 1081 ID with sysinfo, section monitor. I saved the file and reopened it to double check.
I rebooted And ... still 1024 x 768
Chimera is 1,7, not 1,5,4
I bought OSX 10,7,3 on app store and installed it over 10,6,8, (cd bought on app store 1 month ago.)
I'm a beginner with OSX, but I'm a linux user, so terminal commands are not really a problem for me.
So, I do not know what might be my problem.
Sys info reports:
Jeu de composants: GeForce GTX 570
Type: Processeur graphique (GPU)
Bus: PCIe
Logement: Slot-1
Longueur de la voie PCIe: x16
VRAM (totale): 1280 Mo
Fournisseur: NVIDIA (0x10de)
Identifiant du périphérique: 0x1081
Identifiant de révision: 0x00a1
Révision de la ROM: 70.10.17.00.03
A question. I just built my Hackintosh yesterday with the GTX 470. Everything works great and it was super easy with UniBeast and Lion.
I really want three monitors, but always thought you couldn't do that on a hack, but I noticed you said you have 4 of them running! That's awesome! I guess my question is...how was that possible? I'm thinking of getting another 470, so do you think something could work out with that?
i7 2600K Unlocked
Asus p67 sabertooth
Evga GTX 570
Though Lion may be possible ... I don't know if SL is realistic without first having a compatible card ...
May just have to stick with Deb 'Squeeze' and KDE for now ... :-)
both to be pluged in the board
NOT request you to run SLI under osx
Lion
regards
sudo nano -wT2 /System/Library/Extensions/NVDAGF100Hal.kext/Contents/Info.plist
scroll down to the IOPCIPrimaryMatch key and add a new line and tab over a couple of times to match the previous lines and then add:
0x108110de&0xffc0ffff
I have faith in you adding one line to a file grasshopper.
http://www.newegg.com/Product/Product.aspx?Item=N82E16814130593
Can you share the exact model of your EVGA GTX570? You probably know that this card from EVGA comes in many flavors (http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&N=50001402%2040000048%20600094002%20600007788&IsNodeId=1&Description=GTX%20570&name=1280MB&Order=BESTMATCH)
Which one is yours?
Your answer will help me choose.
Thanks a Bunch!
Leave a Reply