Would you like to stop using the Graphics Mode (Chameleon bootloader) and/or screen resolution (Clover bootloader)? With some time to research the graphics family for your ATI video card, you can very likely use the already supplied OS X kexts by adding the specific DeviceID and VendorID combination in the correct kext(s). After doing this, I successfully have my ATI FirePro v4900 operating with all of the usual Display selections available on System Preferences | Displays | Display and System Preferences | Displays | Color (resolutions and refresh rates to choose from are monitor model aware).
ATI Graphics Card (I am using PCIe x16 slot 1; slot zero is too close to the heat sinks on my system)
Favorite Connection Mode of VGA or DVI (HDMI will likely work too)
The Motherboard model should not matter
Retail OS X (I am presently using retail SL 10.6.8)
1) Chameleon (I am currently using 2.0 RC5 r726)
2) Clover (not tested before writing this tutorial)
Note that the bootloader version should not affect the outcome of having a correctly working video display. You may find that it is necessary to remove the Graphics Mode and/or screen resolution setting. For my system, the contents of the Graphics Mode setting seems to be ignored after having the card drivers up and running.
Note: Snow Leopard 10.6.8 kext names are used throughout this tutorial (Lion and Mountain Lion likely have more).
Loaded Kexts When Finished
(OS X does this on startup for you, Lion and Mountain Lion may differ slightly)
ATINNNNController.kext, where NNNN is 1300, 1600, 1900, 2400, 2600, or some other value
ATIRadeonXYYYY.kext, where YYYY is 1000, 2000, or 3000
For my FirePro v4900, the loaded kexts are:
Your video card kext combination will likely be completely different. ATISupport.kext will likely always be present, regardless of graphics family. The OS X booting process adds ATISupport.kext. Note that i am not aware of how Lion and Mountain Lion use the support file. Please review Lion and Mountain Lion specific video card posts for additional details.
Considerations / Preparation
- The following is a very detailed procedure to address all ATI video cards. The general steps may work for nVidia cards, but I do not own an nVidia.
- You should be amenable to spending several hours reviewing data and tracking it. Skipping key items may affect the outcome of modifying the proper kexts to match your video card.
- Be sure to have system copies via your favorite backup method. I use SuperDuper to create a disk image. As needed, I can use SuperDuper to copy the image back to replace failed modifications and have my system running again.
- If testing this with a restored disk image, you may have to copy the bootloader files to the proper location on the boot disk. The commands for the Chameleon 2.0 bootloader are (from the Chameleon 2.0 RC5 r726 README file in the trunk/doc directory):
sudo ./fdisk440 -f boot0 -u -y /dev/rdiskX
sudo dd if=boot1h of=/dev/rdiskXs2
sudo cp boot /
Bootloader Description (For Reference; This Paragraph Can Be Ignored)
X is the disk number where you have installed the bootloader (disk used to boot the system). fdisk440 is the Chameleon specific fdisk executable to write to the booting sectors of the boot disk as the bootloader needs. To make it easier on my typing, I copied the fdisk440 from /usr/local/bin to the boot, boot0, boot1h directory. Your system may be different. The boot, boot0 and boot1h files are available from previous Chameleon installations and/or compiling via Xcode. I am not sure if the same boot0 and boot1h file names are used by Clover. If not, I am sure the sudo cp commands are similar. More details on this are contained in the Chameleon README file. The above commands assume you have navigated to the directory containing the boot, boot0 and boot1h files (as well as the fdisk440 executable). To confirm the bootloader files worked, I obtained the r726 source and built it with Xcode, then found where the boot, boot0 and boot1h files were (e.g. /chameleonSourceRoot/trunk/sym/i386). If you compile and build Chameleon 2.0 RC5 r726, be sure you have a disk volume name that is a single word. A multiple word disk volume name will not pass the make. Make will error out. Instead of spending time on makefile corrections, I renamed my build disk volume name to a single mixed case name (right click the volume name in Finder and modify accordingly). The third sudo cp command may be slightly different if you use a boot disk that is different from where the boot, boot0, and boot1h files are at. Please modify the slash destination to where it needs to be. For example:
sudo cp boot /Volumes/DiskName
Overall Modification Process (Tutorial Continues... )
- Determine your video card Device ID, Vendor ID and graphics family.
- Find sibling graphics family Device IDs and track by your favorite method.
- Search through the already existing ATI kexts in the /System/Library/Extensions directory.
- Note the specific controller and RadeonX kext for your graphics family (your card’s specific Device ID may be present in none, one or both).
- Save the matching retail kexts to an isolated area for backup and modification (two distinct locations in total).
- For the kext having sibling graphics family member Device IDs, add your card’s DeviceIDVendorID value, repeating for the second kext as needed.
- Copy the now modified kext(s) to the /System/Library/Extensions area, replacing the existing installation kext(s).
- Repair permissions via Kext Wizard | Maintenance (other methods are possible).
- Watch your display and video card work together as expected with retail drivers.
Search & Review Graphics Family Data
1) Determine both the Device ID and Vendor ID of the ATI card you have. I used lspci and System Info.
- Supporting details: I do not know if older cards have the same Vendor ID as more recent ones (e.g. the last 24 months). Theoretically, the device and vendor IDs should appear in the System Profiler even when Graphics Mode is used in the bootloader. I did not rely on the System Profiler values, wanting to be sure via other means that I obtained the correct values. It is very important to be absolutely sure that the Device ID and Vendor ID values from the card running in the system are known.
A) Use the web and one source file from Chameleon 2.2 r2187 (ati.c) to determine the graphics family for your card (e.g. the v4900 is part of the Turks graphics family)
- A PCI database site is here
- Obtain the ati.c source file via subversion (other methods are possible)
svn co -r 2187 http://forge.voodooprojects.org/svn/chameleon/trunk/
- Most likely the most helpful file will be ati.c, but you will have to determine which graphics family your card is, since there is no guarantee your card is already in the contents of the ati.c file.
- Your card Device ID must exactly match in ati.c to be useful. If your card Device ID is not listed in ati.c, then you must use other tools to determine the graphics family.
B ) Record your card’s graphics family name (e.g. a spreadsheet, text file, paper notes, etc.)
C) Now obtain the other graphics family member Device IDs and record them from ati.c and/or the PCI database.
- There could be as few as one to as many as 50+. Copy-paste is your friend. These values will be very important to determine the already existing matching kexts for your graphics family.
- Since this is ATI, the vendor ID should be the same no matter which card, but it is possible the Vendor ID for old cards is not 1002, but an ATI anyway.
D) With all of the family member Device IDs, it is now time to search the already supplied kexts
- Navigate to the /System/Library/Extensions directory (Finder or Terminal as it does not matter for this step).
- Find all kexts that have ATI in the name (most likely the first three characters are the biggest indication a kext is used by ATI video cards).
- Within SL 10.6.8, there are ATI1300Controller.kext, ATI4800Controller.kext, ATIRadeonX1000.kext, ATIRadeonX3000.kext, etc.
- Use the Finder to Show Package Contents (right click on the kext), then expand the Contents sub-directory and navigate to the Info.plist for that kext. Double click the Info.plist and the Property List Editor application will open.
- Review the Info.plist | IOKitPersonalities | ... | IOPCIMatch data contents.
- The ellipses indicates that the IOKitPersonalities sub keys differ between kexts. However, they all seem to have the IOPCIMatch sub key (may be two or three levels below the tree root at the top).
- The format of the IOPCIMatch usually is in the form of
0xDeviceIDVendorID <space> 0xDeviceIDVendorID <space> ... 0xDeviceIDVendorID, where each entry is separated by a single space. The first four characters following the 0x (zero x) are the hexadecimal values that the card tells the system for the PCI device identification code. The last four characters are the hexadecimal values for the PCI vendor identification code.
- Record matching graphics family member Device IDs for this kext (e.g. spreadsheet, text file, paper notes, etc.), as well as correlating with the kext name.
E) Repeat steps 2.C) and 2.D) for each and every kext with the indication of being used by ATI. Skip the ATISupport.kext as it has no impact for the search. Snow Leopard has 24 different ATI kexts.
F) After reviewing the graphics family to kext matches, determine whether one controller kext and one Radeon kext is in your matching kext list.
- Ideally, there will be only one each that matches your graphics family. Hopefully your card Device ID is in a kext already, but it may not be.
- Note that I do not know enough about how the retail ATI graphics kexts are designed to say whether a graphics family has been spread across multiple controller and/or Radeon kexts. If you have this occur, then additional testing will be necessary to obtain the proper matching controller and Radeon kext combination for your card (e.g. reboot with one controller and one RadeonX kext coordinated modification and test video drivers; if not working, try another pairing until it does or all pairings have been tried).
- You may find that your video card Device ID is not in a controller kext and/or a Radeon kext, but the graphics family does have Device IDs that exist in a single controller kext and a single Radeon kext.
- This is the reason for having the graphics family Device IDs.
- Regardless, you now have all of the information to know which controller kext and which Radeon kext to add your card’s DeviceIDVendorID value to the IOPCIMatch contents.
- As an example, my v4900 was exactly matched in the ATIRadeonX3000.kext, but only sibling graphics family members in the ATI6000Controller.kext.
If your card’s DeviceIDVendorID combination is already within a single controller and single Radeon kext, then your system should already be using the correct drivers for your card. Double check that the bootloader Grahpics Mode is cleared out (as in removed) and you may have to use GraphicsEnabler=Yes (Clover calls it GraphicsInjector). If that does not enable your graphics card drivers, then some other problem is occurring that is not addressed here. No need to continue further with this procedure, since other issues are preventing your system from using the card drivers correctly.
3) Use your preferred method to copy the matching graphics family kext(s) to a working location (e.g. /Extra/Test). It is recommended to save your original kext(s) somewhere else, and the location is your choice. It all depends on personal preferences on how to roll back modifications as needed.
A) For example, I only had to modify the ATI6000Controller.kext Info.plist. The ATIRadeonX3000.kext already contained my video card DeviceIDVendorID combination. You will likley have different search results for your card’s unique DeviceIDVendorID. You may have to modify as many as two kexts (one controller and one Radeon).
B ) Once a kext is in the working directory, you can use the Finder to Show Package Contents, then expand the Contents sub-directory and navigate to the Info.plist. Double click the Info.plist and the Property List Editor application will open.
- You will also be able to save the changes to your working directory. If you want to confirm them independently before copying the updates, use the cat program in Terminal (For example:
cat Info.plist), after changing directories to the Contents sub-directory of the modified kext.
C) For copying a modified kext, I use the:
cp -R Terminal command as sudo (seems quickest). OS X interprets a kext as a directory structure so the -R option is very important. Failure to use -R will result in not copying the kext DeviceIDVendorID modification.
4) Once inside the Info.plist, navigate to the IOPCIMatch sub-key (as when reviewing the graphics family matches above).
5) Determine a reasonable location in the value field for adding your video card DeviceIDVendorID combination (e.g. I placed the v4900 combination in a sub group that had values near the v4900 Device ID).
A) Be sure to start the entry with 0x (zero x). Neglecting the 0x prefix may fail to load the kext later, and may even crash the video output altogether. It is recommended to double check your modification to be absolutely sure no typos occur.
B ) For example, the v4900 entry looks like: 0x67491002
C) Do not remove already existing DeviceIDVendorID values. You never know when you will replace your card. This process is intended to add a new entry (your card’s specific DeviceIDVendorID combination) to the matching kext that will support your card.
D) A sample of a complete and modified IOPCIMatch value string within my ATI6000Controller.kext | Contents | Info.plist:
[size=3][font=arial,helvetica,sans-serif]0x67681002 0x67701002 0x67791002 0x67601002 0x67611002 0x67501002 0x67581002 0x67591002 0x67401002 0x67411002 0x67451002 0x67491002 0x67381002 0x67391002 0x67201002 0x67221002 0x67181002[/font][/size]
Highlighted addition in bold red (non code block):
0x67681002 0x67701002 0x67791002 0x67601002 0x67611002 0x67501002 0x67581002 0x67591002 0x67401002 0x67411002 0x67451002 0x67491002 0x67381002 0x67391002 0x67201002 0x67221002 0x67181002
6) Save the Info.plist for this kext
7) Repeat steps four through six for the other graphics family kext not containing your card’s Device ID (if necessary).
8) Open Terminal window (if not already open)
9) Navigate to the /System/Library/Extensions area of the boot disk (e.g. Macintosh HD).
10) Execute the
sudo cp -Rcommand to place your modified kext into the current directory (overwrites the kext from the retail installation)
A) A sample:
sudo cp -R /Extra/Test/ATI6000Controller.kext .
B ) Enter your password.
C) Note that the dot is at the end of the copy command (might be difficult to see).
11) Repeat step 10 for the other modified kext as needed.
12) Using the Kext Wizard, execute the Maintenance for all directories on the boot drive (or whichever drive contains the kext modifications; this is more convenient than typing the sudo chown, chmod commands and repairing permissions with Disk Utility).
A) Enter your password again for the Kext Wizard to run
B ) Wait a little for the tool to finish (e.g. my SSD takes about 20 seconds, older hard drives are likely to take minutes).
13) Reboot, selecting the boot disk containing the modified kexts.
14) Be patient when the display passes the Gray Apple boot screen. You may see your display go dark a few seconds. I have an SSD boot disk, so I am not sure if a temporary dark screen for five seconds or so is common for all boot disk hardware.
15) Enjoy your correctly functioning display!
Edit: Replaced Smileys from a B parenthesis entry with B space parenthesis after initial post
Edit: Modified line spacing between letter items to have better look. Updated sample IOPCIMatch entry.
Edit: Better samples of the IOPCIMatch entry.