Free Web Space | BlueHost Review  


Homepage: http://linuxhelp.150m.com/


3D Acceleration for your ATI card.


The following procedure enabled 3D acceleration for my Radeon A9250 128 MB ATI graphics card. It has been tested on 32-bit Mandriva 2005 & 2006 and SuSE 9.3 & 10.0 and Debian (and will probably work generally). Debian users should visit the last section, first. For an older version of this page, with a list of standard VESA modelines, and commands that tell you what your graphics card is, see here.

The installation is fairly simple.

First, make sure that you have the following packages installed:

kernel-sources
gcc
libgcc
glibc
glibc-devel
glib2
glib2-devel
gcc-c++
libstdc++
libstdc++-devel

Create the directory /ati from which to work. Download the file ati-driver-installer-8.28.8.run (52MB) and save it in /ati with the commands (as usual, I am assuming you are the root user):

 mkdir /ati; cd /ati
 wget https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/ati-driver-installer-8.28.8.run

ati-driver-installer-8.28.8.run has both 32-bit, and 64-bit, drivers for the Radeon 8500 series and higher. More information can be found at ATI's site, here (requires javascript and cookies).

Make the file executable and run it:

 chmod +x ati-driver-installer-8.28.8.run
 ./ati-driver-installer-8.28.8.run

This will start a GUI guide.

Select Install Driver and click Continue.
Click I Agree to the ATI License Agreement.
Select Automatic and click Continue.
Click View HTML Release Notes.
Click Exit to close the Installer.


The drivers have been installed, it only remains to configure them. Enter the command:

 aticonfig -h

This prints the help for the script aticonfig. You need to run this script with the --initial option to create a suitable xorg.conf file. The script assumes that you already have a working xorg.conf file for whatever driver you are currently using.

 aticonfig --initial

The script automatically backs up your old xorg.conf. For a time, I included the option --overlay-type=Xv in the above command to get XVideo running. You should not do this, however, as it will stop most of your games from playing. If you have done this, simply delete the two lines:

	Option	    "VideoOverlay" "on"
	Option	    "OpenGLOverlay" "off"

from your /etc/X11/xorg.conf file and restart the X-Server with Ctr+Alt+Backspace.

Thats it. Finished. At least if all went well.

Now reboot and see how the installation went. After rebooting, run the command:

 /usr/X11R6/bin/fglrxinfo

If you get something like this:

fglrxinfo
display: :0.0  screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON 9200 Series DDR Generic
OpenGL version string: 1.3.1091 (X4.3.0-8.28.8)

then things are looking up. Now try the command:

 /usr/X11R6/bin/fgl_glxgears

Using GLX_SGIX_pbuffer
864 frames in 5.0 seconds = 172.800 FPS
997 frames in 5.0 seconds = 199.400 FPS
992 frames in 5.0 seconds = 198.400 FPS
994 frames in 5.0 seconds = 198.800 FPS

If you have cogs spinning on the faces of a spinning cube, you can stop here and enjoy your new drivers.

If the cube spins, but is lacking any cogs on the faces, the faces being instead, various shades of blue, and/or you get an error message like:

Using GLX_SGIX_pbuffer
913 frames in 5.0 seconds = 182.600 FPS
783 frames in 5.0 seconds = 156.600 FPS
X Error of failed request:  BadDrawable (invalid Pixmap or Window parameter)
  Major opcode of failed request:  14 (X_GetGeometry)
  Resource id in failed request:  0x0
  Serial number of failed request:  51
  Current serial number in output stream:  51

then you need to replace the shared library libGL.so.1.2.

Download this version of libGL.so.1.2 (189K) which was extracted from ati-driver-installer-8.14.13.run and save it in the directory /ati. This version should work with 32-bit X-Windows, versions 4.3, 6.8 and higher. You can check your version of X-Windows with the command:

 /usr/X11R6/bin/X -version

Now move out the old libGL.so.1.2 library with:

 mv /usr/X11R6/lib/libGL.so.1.2 /ati/libGL.so.1.2-saved

Do NOT just change the libraries name, for example, to libGL.so.1.2.old. You need to move it where the program ldconfig cannot find it, otherwise it will be re-linked when ldconfig is next run. Since, ldconfig is usually run on boot, leaving libGL.so.1.2.old where ldconfig can find it, will lead to your newly acquired 3D acceleration, not working after rebooting. Now unzip the archive and move it to /usr/X11R6/lib/ with the commands:

 bunzip2 libGL.so.1.2.bz2
 cp /ati/libGL.so.1.2 /usr/X11R6/lib/

libGL.so.1.2 should have MD5 8f3906b8b988258f0161f3ed22edcea0

Now everything should run fine. If you have any further problems, you may find the answer here:

http://odin.prohosting.com/wedge01/gentoo-radeon-faq.html

You may wish to speculate as to the motives of ATI, in shipping libraries that did not work (for many people).

Comments and discussion here.

MTRR Overlaps.


One thing I did before installing the ATI drivers, was to play with the MTRR (Memory Type Range Registers). So, I figured I should add a section on this, just in case it is useful to anyone. I had noticed the following error message in the output of dmesg

mtrr: 0xd0000000,0x8000000 overlaps existing 0xd0000000,0x1000000

On searching the internet, I found that the command cat /proc/mtrr gives information on the registers, and that the frame-buffer used to provide a graphical display during boot, often causes these registers to be incorrectly set.

 cat /proc/mtrr

reg00: base=0x00000000 (   0MB), size=1024MB: write-back, count=1      <-- System RAM
reg01: base=0xe0000000 (3584MB), size=  64MB: write-combining, count=1 <-- AGP Aperture
reg02: base=0xd0000000 (3328MB), size=  16MB: write-combining, count=1 <-- Video Memory

So my system was operating with only 16MB of the available 128MB of video memory. Not too good. So I disabled the frame-buffer (the graphical display used during boot) by removing the options vga=0x317 and splash=silent from the grub boot entry in /boot/grub/menu.lst. This led to the following improvement:

 cat /proc/mtrr

reg00: base=0x00000000 (   0MB), size=1024MB: write-back, count=1
reg01: base=0xe0000000 (3584MB), size=  64MB: write-combining, count=1
reg02: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=1

It seemed strange that my system's AGP Aperture was so small. On consulting the computers handbook, I found it was not that small at all. I just had to set it to 128MB in the BIOS. After doing this, the MTRR was correctly set at:

 cat /proc/mtrr

reg00: base=0x00000000 (   0MB), size=1024MB: write-back, count=1
reg01: base=0xe0000000 (3584MB), size= 128MB: write-combining, count=1
reg02: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=1


It turns out that you do not have to disable the frame-buffer. Adding video=vesafb:nomtrr to your grub boot entry, does the trick.


Extra Help for Debian Users.


Although, Debian has worked hard to make the addition of pre-compiled packages easy, they have gone out of their way to make compiling your own programs, a nightmare. Unlike SuSE or Mandriva, the Debian packagers have not included the kernel sources for the default kernel images (those automatically chosen when you install Debian). For example, the kernel image chosen for me, was:

kernel-image-2.6.8-2-686 (2.6.8-16sarge1) Kernel image for PPro/Celeron/PII/PIII/P4.

However, the only kernel source packages are:

kernel-source-2.2.25 (2.2.25-4) Kernel source for 2.2.25
kernel-source-2.4.27 (2.4.27-10sarge3) Kernel source for 2.4.27 with Debian patches
kernel-source-2.6.8 (2.6.8-16sarge4) Kernel source for 2.6.8 with Debian patches

none of which match the kernel image. Apparently, 2.6.8-16sarge4 means a 2.6.8 kernel, with general patch level 16 and security patch level 4 (20 levels of patching overall). The closest source package is kernel-source-2.6.8, however, it has a different security patch level (patch level four, instead of one). There are two ways around this, you can either roll back the patches to level one (hard) or choose a new kernel image which matches the available sources (easy). So, I chose the new kernel (which was a better fit than the automatically chosen kernel, anyway):

kernel-image-2.6.8-3-k7 (2.6.8-16sarge4) Kernel image for AMD K7.

After installing the new kernel image with synaptic, the /boot/grub/menu.lst file now has entries for each kernel version:

title   Debian GNU/Linux, kernel 2.6.8-3-k7 
root    (hd0,5)
kernel  /boot/vmlinuz-2.6.8-3-k7 root=/dev/hda6 ro 
initrd  /boot/initrd.img-2.6.8-3-k7

title   Debian GNU/Linux, kernel 2.6.8-2-686 
root    (hd0,5)
kernel  /boot/vmlinuz-2.6.8-2-686 root=/dev/hda6 ro 
initrd  /boot/initrd.img-2.6.8-2-686

Choosing Debian GNU/Linux, kernel 2.6.8-3-k7 from the grub menu, boots the 2.6.8-3-k7 kernel.
Choosing Debian GNU/Linux, kernel 2.6.8-2-686 from the grub menu, boots the 2.6.8-2-686 kernel.

Unlike SuSE or Mandriva, the Debian packagers have split the kernel source into a number of separate pieces. For the 2.6.8-16sarge4 kernel, the sources come in the following three pieces:

kernel-source-2.6.8 (2.6.8-16sarge4),
kernel-headers-2.6.8-3 (2.6.8-16sarge4),
kernel-headers-2.6.8-3-k7 (2.6.8-16sarge4).

The installation does not reintegrate the sources, even though it easily could have done so, but leaves you with one unopened tar archive and two separate directories containing header files. Never before, have I seen a package install, that does not even bother to unpack the archive. This is the Debian packagers, deliberately making it difficult for you to compile your own kernel.

I looked around for a README, or some help, and was not surprised when I didn't find any. I eventually found lots of documentation in the directories /usr/share/doc/kernel*. Unfortunately, most of it was for the 2.4 kernel and I could not find where it explained how to reassemble the kernel sources.

After installing the three, above mentioned, kernel packages with synaptic, you have the two directories of headers files:

kernel-headers-2.6.8-3
kernel-headers-2.6.8-3-k7

and the kernel-source-2.6.8.tar.bz2 archive in the directory /usr/src/.

To sort out the install mess, execute the following commands:

 cd /usr/src/
 mv kernel-headers-2.6.8-3 linux-2.6.8-3-k7
 tar -cf kernel-headers-2.6.8-3.tar linux-2.6.8-3-k7
 rm -fr linux-2.6.8-3-k7

(go to the directory /usr/src/)
(the move ensures the tar archive will unpack into linux-2.6.8-3-k7)
(creates tar archive named kernel-headers-2.6.8-3.tar)
(removes unneeded directory and contents)

 mv kernel-headers-2.6.8-3-k7 linux-2.6.8-3-k7
 tar -cf kernel-headers-2.6.8-3-k7.tar linux-2.6.8-3-k7
 rm -fr linux-2.6.8-3-k7

(the move ensures the tar archive will unpack into linux-2.6.8-3-k7)
(creates tar archive named kernel-headers-2.6.8-3-k7.tar)
(removes unneeded directory and contents)

 tar -xf kernel-source-2.6.8.tar.bz2
 mv kernel-source-2.6.8 linux-2.6.8-k7

(unpacks main kernel source)
(move main kernel source to linux-2.6.8-k7)

 tar -xf kernel-headers-2.6.8-3.tar
 tar -xf kernel-headers-2.6.8-3-k7.tar

(unpack kernel-headers-2.6.8-3.tar into linux-2.6.8-k7)
(unpack kernel-headers-2.6.8-3-k7.tar into linux-2.6.8-k7)

 rm -f linux
 ln -s linux-2.6.8-k7 linux

(remove the link to the old kernel sources, if any)
(link to the new kernel sources)

In summary, the directories of header files are repacked so that they will unpack into linux-2.6.8-3-k7. The kernel-source-2.6.8.tar.bz2 package is unpacked and moved to linux-2.6.8-3-k7. The tarred kernel-header directories, also unpack into linux-2.6.8-3-k7 and the sources are reintegrated. A link is then made to the new kernel sources.

The name linux-2.6.8-3-k7 was chosen simply because the command uname -r returned 2.6.8-3-k7.

Well, fine and good, so far. But the nightmare is not quite over.

The Debian packagers have "accidentally" forgotten a necessary link and have another pointing to some random place. To fix these "oversights" do the following:

 cd /lib/modules/2.6.8-3-k7
 rm -fr boot source
 ln -s /usr/src/linux-2.6.8-3-k7 boot
 ln -s /usr/src/linux-2.6.8-3-k7 source

Now you can continue with the ATI driver installation as above (tested on Debian Sarge).

An easier solution, using cpio, should be:

 tar -xf kernel-source-2.6.8.tar.bz2
 cd /usr/src/kernel-headers-2.6.8-3
 find | cpio -pd /usr/src/kernel-source-2.6.8
 cd /usr/src/kernel-headers-2.6.8-3-k7
 find | cpio -pd /usr/src/kernel-source-2.6.8

Another solution, using tar, should be:

 tar -xf kernel-source-2.6.8.tar.bz2
 cd /usr/src/kernel-headers-2.6.8-3
 tar -cpf - * | tar -C /usr/src/kernel-source-2.6.8 -xvpf -
 cd /usr/src/kernel-headers-2.6.8-3-k7
 tar -cpf - * | tar -C /usr/src/kernel-source-2.6.8 -xvpf -

In the last two solutions, everything should be unpacked into /usr/src/kernel-source-2.6.8. These commands may have to be tweaked a little (they have not been checked).

Of course, you will have to adjust the kernel versions in the above to reflect your situation. You may also ask some Debian person for the name of the script (assuming it exists) that reassembles the unnecessarily split kernel sources. Of course, this script should be automatically run, when the kernel sources are installed.

Remember, that with SuSE or Mandriva, the kernel-sources can be installed with one or two clicks.

You may wish to speculate in the forums, as to the reasons the Debian packagers are deliberately making things difficult for you.

 AS ALWAYS, USE AT OWN RISK.