Go Job Hunting at the LQ Job Marketplace
Go Back > Linux Answers > Hardware
User Name


By sausagejohnson at 2004-08-18 21:05
nForce2 ATI Radeon 9600XT Acceleration Manual

Recently, I finally joined the ranks of those brave men and women who have struggled long and hard to finally get the ATI Radeon 9600XT running on an Nforce2 motherboard (namely the 7n400Pro).

I know there are others still left behind struggling, so it would be an injustice for me not to document up the process.

There have been a stack of people who helped out with my previous efforts but unfortunately, sometimes prior knowledge of certain steps is assumed and things end up not working.

I used Fedora Core 1 for this, but Red Hat 9 should be fine. DO NOT use Fedora test releases. Use a final release. As for other distributions, it may work ok, but I can't confirm one way or another. Please post if you get it working ok on another distribution.

To give you an overview of the process that will be taken:

1) Download Kernel Source version 2.4.26.
2) Compile new kernel with AGPGart and nforce driver built in.
3) Install ATI Driver 3.90
4) Done.

I'd like to make some notes about a couple of things before we go. Please read them, it's good for getting comfortable with what we are going to do...

Why do we need all this stuff?
It's not always clear from instructions why certain things need to be done (I'll try to explain these things). When you install Fedora or some other distribution, you may not have nForce2 support built in as standard. You may also not have AGPGart built in. If either of these are missing, the drivers for the ATI Radeon are useless. AGPGart is a module that talks to the AGP socket where your Radeon 9600XT is. If that is missing, the card can only communicate with the motherboard with the slow VESA driver. If you don't have the nForce2 chipset support enabled, I don't what the consequence is, but you need it. Maybe it's because it has the optimum way of getting to the AGP slot functions. Who cares anyway, you need it.

nForce Driver
I will say this up front. Forget about getting this driver from! I struggled trying to patch my kernel and get the driver compiled as a module. And when I finally did it all by hand, it didn't work. So please forget about it. We are going to download the source for Kernel 2.4.26 which has your nforce2 chipset built in. The whole process will be easier and less complicated.

Kernel 2.4.26
At the time of writing, this is the latest 2.4 kernel. Now you may be thinking that you don't want to do the whole new compiling a kernel thing, it's too hard and never works out in the end anyway. Don't worry. There are certain things that you are not always told and it's those simple things that ruin a kernel. We'll get to that in a moment, but the reason we are installing this new kernel is because it has the nForce chipset driver built in, and that saves us so much grief. Also, there are other options that need to be set as well and if we are compiling a new kernel, we may as well take the opportunity to compile these things right into the kernel as opposed to making modules (which can be headache occasionally).

Occasionally I will mention a step and there may be additional information you might be interested in knowing, yet does not have any extra value in helping with our objective here. Those notes will be marked with asterisk (*) and you can read those notes at the end of this document.

First order of business, download the packages that are required.

1) First the 2.4.26 kernel from here:

2) Next, get the ATI Radeon 9600XT 3.90 Driver from here:
For Fedora Core 1 and Red Hat 9, this is the driver to use. For other Distributions, go to to find the right driver for your version of xfree86. (ours is 4.3).

Log in as root
Everything will need to be done as root so logout and log back in again using the root account. You can do the following procedure in X/KDE or in Console mode. It's up to you. Later, we will have to drop back to console mode, but I'll tell you when. You might want to run the glxgears program and write down the number of frames per second (maybe around 400FPS). That way you can compare to the values you get at the end.

Build the new Kernel
1) Go to the directory where your linux-2.4.26.tar.bz2 file is kept. /tmp is a good place but it really isn't that important.
2) Unpack the kernel source with:

tar -jxvf linux-2.4.26.tar.bz2

The j means to use bzip2 decompression, x means to decompress, v to show information as it goes, f means to specify a file to decompress.
3) Now you will have a directory called linux-2.4.26. Move this directory to the correct place using:

mv linux-2.4.26 /usr/src/

/usr/src is where all kernel sources must live.
4) We have to set a symbolic link now in the /usr/src directory so that the system compiles the right version of the kernel, namely, the one we just downloaded. Do this:

cd /usr/src (this gets us there)
ln -s /usr/src/linux-2.4.26 linux
ls -la

That last command will show up the list of kernel directories and links. See the linux file? It is pointing to linux-2.4.26. Now the compiling scripts using /usr/src/linux will be really using /usr/src/linux-2.4.26. Simple eh?
5) Next thing to check is that the kernel version will be correctly named. It should be already, but some kernels are not. They do this to save you from stuffing up your existing system, but it's more a pain in the neck. To check:

cd /usr/src/linux
head Makefile

You should see the following at the top of the file:


So EXTRAVERSION should equal nothing. If has the word "custom", then this needs to be removed, but it's a good thing to know about for the future*.
6) make mrproper (this sets up your kernel sources properly)
7) make xconfig (this loads the config program, use make menuconfig if in console mode)
8) Now this stage is very important. You can't just pick any old stuff and try to compile. You must use a config file from the working kernel that you usually use. This will be found in the boot directory. Open another terminal window and do an:

ls /boot

You'll most likely see something like config-2.4.22-1.2115.nptl for Fedora Core 1 and config-2.4.20-8 for redhat 9 (although the kernel versions change a lot in redhat 9 releases).
9) Load in the old config file by clicking the "Load Configuration From File" button. Then in the Enter Filename box, enter:


Obviously, replace <whatever> with the filename you saw listed in step 8.
10) When you click ok, there is no success message. If you are returned to the screen with all the options, then the config loaded fine. If it didn't, it would have shown an error.
11) Now to set the required options:

Processor type and features | MTRR (Memory Type Range Register) = Y
Character devices | /dev/agpgart (AGP Support) = Y
Character devices | nforce support = Y
Character devices | Direct Rendering Manager (XFree86 DRI support) = N

12) Ok, now save your config to a file in case we forgot something and want to try again later. Click "Store Configuration to File" and in "Enter Filename": /boot/config-9600xt
13) Click OK and then "Save and Exit". **
14) Type:

make dep

This sets up all the source code dependencies and creates some files.
15) Make the actual kernel with:

make bzImage

This will take a few minutes. Lots of compiling will run up the screen. At the end, there will most likely be a notice displayed at the end that the new kernel will not fit on a floppy. This is normal. The kernel is now built and waiting for us to collect it. A couple more jobs to go.
16) Make the modules for the rest of linux with:

make modules

Although we made the kernel, there are lots of extra modules for rest of your system that needs to be built, ie. USB, firewire, IDE etc etc. We are just making the same modules that you had before on your old kernel (remember how we loaded the config from your old kernel?). That's how the new compiling process knows what modules to make and which ones not to. By the way, this process will most likely take longer to build than the kernel itself did.
17) Finally...

make modules_install

The modules that you made need to be moved into the correct place. This command performs this for you.
18) Ok, now the modules are compiled and ready for you, but the kernel itself doesn't get moved into place for you. We have to do this ourselves. Go to:


19) You'll see a file called bzImage. Remember "make bzImage"? We made that. This is the new kernel. Your old kernel lives in the /boot directory, so we'll move ours there too:

mv bzImage /boot/

20) Go now to boot and have a look:

cd /boot

21) Can you see a file something like vmlinuz-2.4.20-8? This is your old kernel file. Your bootloader runs this when it starts up. We want the bootloader to load our kernel now, not the old one. First, let's give the kernel file a better name than bzImage:

mv bzImage vmlinuz-2.4.26

The mv command means move, but it can also act as a rename command. That's what we've done, renamed our kernel file to look something like our old kernel file.
22) Next, we have to add our new kernel to the bootloader. This will allow us to choose to boot our kernel at boot time. We can also go back and boot our old kernel if so desired, or if something went wrong. First you need to know which bootloader you use, GRUB or LILO. I'm not sure how to tell if you don't know, but if you installed GRUB use:
    kwrite /etc/grub.conf
Copy the section that looks like this:
    title Red Hat Linux (2.4.20-8)
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/
        initrd /boot/initrd-2.4.20-8.img
and paste it underneath and change it to:
    title Red Hat Linux (2.4.26) 3D accelerated
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.26 ro root=/dev/hda<whatever>
(You need to place your correct /dev/hda? here. )

Also notice that you have deleted the initrd line. This is for a ramdisk. You don't need it but we can make one if you so choose later. Save and quit Kwrite. Now, if you use LILO instead of GRUB, do this:
    kwrite /etc/lilo.conf
Copy the lines that look like this:
and paste underneath and change to this:
        label=linux 3D version
(change /dev/hda? to whatever your /dev/hda? partition number is called, ie /dev/hda1, or /dev/hda2, etc )
Save and quit. Now type:

lilo make lilo accept the changes. You don't have to do this for grub. It knows automatically about changes to itself.
23) That was a complicated step. Ok, time to reboot to test if it all worked. Type:


24) When you come to the bootloader screen, select the new boot config that we created. Linux will boot up and hopefully you'll see some info fly by about agpgart and nforce chipset. If there's no failures and everything seems ok, we can move on the installing the actual ATI Radeon 9600XT driver.

Install 9600XT Driver
Please note that the guide I followed to produce this guide is located at: (which is a much better guide than anything available at

1) Time to drop back to console mode with:

init 3

Linux should exit X and go back to console mode.
2) Go to the place where you saved the fglrx-4.3.0-3.9.0.i386.rpm file. Unpack with:

rpm -ivh --force fglrx-4.3.0-3.9.0.i386.rpm

The package will unpack and do some compiling.
3) Now you need to compile some more things that got unpacked in the last step. Despite the notice to "run fglrxinfo", don't do it yet.
4) Compile the other stuff by going to:

cd /lib/modules/fglrx/build_mod
cd /lib/modules/fglrx/

You may see a notice about a test load of the module. This is a good sign.
5) Now we can run fglrxinfo:


This script will ask you a stack of questions about your system. What this script is doing is building a new /etc/XFree86Config-4 file. It will rename your old XFree86Config to XFree86Config_old ***. At this point you may need to see a copy of your old XFree86Config_old file to make sure you get your keyboard and mouse settings right. You can do this by switching to a new terminal: Ctrl, Alt and F2 (or F3, F4, F5 whichever you would like).

You will switch to a new console. Enter your root username and password. Don't worry, your other console is still there. Ctrl, Alt and F1 so switch back to it. You can switch back and forth at will. Ok, stay in the second console for a moment, and enter:

cd /etc/X11
ls XF*

Check for the name of your old XFree86Config file. It will most likely be: XFree86Config_old, so therefore type:

less XFree86Config_old

This will allow you to scroll around the file and check settings that the fglrxinfo will ask you for. Now switch back to your first console (Ctrl, Alt and F1) and start answering the questions. Stick to the defaults as much as you can except for mouse, keyboard, screen resolutions, monitor refresh rates (vertical and horizontal) and External AGPGart. The first four values you can get by scroll through XFree86Config_old in the second console screen. Check the keyboard, mouse and monitor sections for the information and copy them exact. This will ensure that even if the acceleration doesn't work, X will still be able to start. Also, when it asks you if you want to use the External AGPGart, say Yes.
6) Well, that's it. Reboot your system with:


(and don't forget to select the correct Kernel at boot time)
7) X should load. Bring up a terminal windows and type:

lsmod | grep fgl

You should see an entry. Type:


Faster than before? Quit that and type:


Is the snow falling smoothly? Nice, you have 3D acceleration. Play the game. Now it's playable. Enjoy your new faster 3D enabled 9600XT, but remember to go outside and enjoy the sunshine. You might forget it's there. :)

Is this document too difficult? Have I missed something or are you getting error messages? I'd like to add work arounds for every situation so that many more people can get their cards working right and feel like a king for a day just like I did. Post here or get in touch at

* When you only have one kernel source file loaded (say, 2.4.20-8), if you try to compile another version of 2.4.20-8, the new kernel will be known as 2.4.20-8custom. This is defined in the /usr/src/linux/Makefile file. The reason this is done is because if they didn't, then you could potentially get the compile job done very wrong. Being the only kernel version you have, there would be nothing to fall back on and you would have a hard time restoring your system if something went bust. But compiling a new kernel with the name 2.4.20-8custom means that you will have all sorts of headaches getting certain programs and drivers to work that are compiled for a version of a kernel, ie. 2.4.20-8 because 2.4.20-8 is not seen as the same thing as 2.4.20-8custom. Therefore, it's a chicken and the egg situation. Two official kernel versions are the best way to go and it's what we are doing in this tutorial. If the new one busts, we can go back to the old one and start again like it never happened.

** Although we saved our own config in /boot, clicking "Save and Exit" will save another copy of our config into the /usr/src/linux folder automatically. When we compile the kernel, this config file is used, not our one we saved to /boot. You don't need to know this for the process but it good to know about in general.

*** Just a note here in case you are curious... X looks for the presence of either XFree86Config or XFree86Config-4. If either one exists, it is used to determine how X interacts with mice, keyboards, monitors and video cards.

by The GingerNinja on Tue, 2004-08-24 01:54
I thought I'd add some feedback for this guide, with my own experience.
As a new linux user, obviously some of the things I point out will get a natural response of "well thats obvious".. But being as the author has gone to the effort of actually going step by step through a kernel rebuild, I'm assuming that I'm the type of user it's also aimed at.

Firstly, I couldn't get my card to work after this (glxgears is actually slower).. but never mind. I will keep trying!

Other than that, when you reach the grub configuration stage, you say to edit the grub.conf file. On my system, grub.conf is not a symbolic link so I went to menu.lst and made the changes. the guide doesn't mention menu.lst.
There's actually a typo in the example config also. In the grub one, you have the old kernel image down in the new "pasted" section for the 3d accelerated image. This should be changed to the vmlinuz-2.4.26

You also mention that although there is no initrd line in the new configuration, we can make one later. Could you add the line in there to make it.
I think I used

$ mkinitrd -k /boot/vmlinuz-2.4.26 -i /boot/initrd-2.4.26

in Suse 9 to make mine.

Otherwise, an excellent step by step guide and if nothing else, I managed to get through a kernel rebuild with only a few weeks experience!


by sausagejohnson on Mon, 2004-08-30 18:45
Nigel is quite right, I have made a typo in the grub config section. Please all using this guide, make the appropriate change.

[Moderators, can you please give me access to my post to make these changes]

I was not aware of the existence of 'menu.lst'. I guess that explains why grub knows about changes after exiting the grub.conf. I also wasn't aware that you could have grub running without the existence of a grub.conf.

Finally, the initrd thing was also pointed out to me by Sean since I write the article. I didn't realise that an inird file was nescessary for ext3 partitions to be mounted. Without it, ext3 is mounted as ext 2 and therefore you lose journalling.

Please all follow Nigel's step to get an initrd file built.

by jeremy on Mon, 2004-08-30 19:22
sausagejohnson, feel free to send me any changes you'd like made to the article. At this time there is unfortunately no edit facility for LinuxAnswers.


by sausagejohnson on Mon, 2004-08-30 19:25
That's ok. Under section 22) in the code box, please change:

kernel /boot/vmlinuz-2.4.20-8 ro root=/dev/hda<whatever>



by jeremy on Mon, 2004-08-30 20:18


by sausagejohnson on Wed, 2007-07-11 07:38
This information is now very old and out of date. For new kernels, driver and configuration, refer to:



Main Menu
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration