Slackware: ATI SlackBuild (ENG)
This wiki explains how to install the proprietary ATI drivers in a Slackware Linux distribution, creating, thanks to a SlackBuild, packages that can be installed through the installpkg command.
This wiki DOES NOT explain how to improve performance. In particular, It provides only a minimal description of how to set up the X.Org server with the only purpose of loading the proprietary drivers (a description on how to configure the X.Org server to increase performance can be found here). All commands starting with a '#' must be executed with root rights, while commands beginning with '$' can be performed by a user without such rights.
Proprietary ATI Drivers and ATI Catalyst
Getting all the necessary
The proprietary ATI drivers can be downloaded from the official web site, after selecting the Linux x86 operating system (or Linux x86_64) and selecting your video card, pressing the “go” button takes you directly into the download page from which you can download the installer (which henceforth we call installer.run).
Since drivers also contain a kernel module which will be compiled directly on your system, you'll need the kernel source currently installed in the system as well.
NOTE: Drivers for x86 and x86_64 architectures are equivalent.
The installer contains files for both architectures, then It will be the compilation process and the package creation process to choose the appropriate files. This means that the SlackBuild will be good for Slackware and for Slackware 64-bit portings (Slamd64, Bluewhite64, etc. ...).
If the downloaded driver version is less than 8.37.6, then you need to know from now that it will not work onto X.Org 7.2 server (or 1.3) or later.
How to create Slackware packages
The packages creation follows two different ways depending on whether you use the official driver version < 8.37.6 or >= 8.37.6. or new ATI Catalyst. The first way uses what is called external SlackBuild while the second way what we will call internal SlackBuild. In both cases the two packages will be created and they can be installed by Slackware installpkg utility. So let's see the two cases saying that the program that here is called installer.run is the installer downloaded from ATI web site.
NOTE: The external SlackBuild use is not limited to the driver <8.37.6 but you can use it (and at times we will see that It's the only alternative) with all versions of ATI drivers.
Drivers version <8.37.6 (external SlackBuild)
For these types of drivers I've created an external SlackBuild for Slackware and I made a package that can be found at: http://www.cli.di.unipi.it/~tomasi/ati-slack-packager/ati-slack-packager-current-noarch-1.tgz To create Slackware packages simply run:
# installpkg ati-slack-packager-current-noarch-1.tgz # sh installer.run -- buildpkg custom-package/Slackware
Drivers version >= 8.37.6 or new ATI Catalyst (internal SlackBuild)
# sh installer.run --buildpkg Slackware/All
or, if drivers are quite recent, it suffices:
# sh installer.run --buildpkg
# sh installer.run --buildandinstallpkg
What do created packages contain?
The two packages created by SlackBuild, that we'll call fglrx-module and fglrx-x contain, respectively, the kernel module and the X.Org server driver currently installed in the system. In this way, if you upgrade the kernel or the X.Org server, you can create only one package.
Creating only fglrx-module package
To create just the package containing the kernel module for the currently installed kernel, simply run the installer with the Only_Module option So with external SlackBuild:
# sh installer.run --buildpkg custom-package/Only_Module
With internal SlackBuild:
# sh installer.run --buildpkg Slackware/Only_Module
Creating only fglrx-x package
To create just the package containing the X.Org driver currently installed in your system, simply run installer with Only_X option With external SlackBuild:
# sh installer.run --buildpkg custom-package/Only_X
With internal SlackBuild:
# sh installer.run --buildpkg Slackware/Only_X
# sh installer.run
Minimal X.Org server configuration
Once installed the two indicated packages, you must tell to the X.Org server to use ATI proprietary drivers, to do this we must check if the xorg.conf file, which is usually located in the /etc/X11/ directory, contains the following items:
Section "Module" ... Load "dri" Load "glx" ... EndSection
Section "Device" ... Driver "fglrx" ... EndSection
Section "DRI" Group 0 Mode 0666 EndSection
To see if proprietary ATI drivers are properly installed run the command:
On my computer the output is:
display::0.0 screen: 0 OpenGL vendor string: ATI Technologies Inc. OpenGL renderer string: ATI Mobility Radeon X1400 OpenGL version string: 2.0.6650 (8.39.4)
Remove installed packages
To remove installed packages you can use the removepkg utility. However, there are aspects that should be considered:
- The packages' removing don't delete fglrx's driver configuration files, these files are located in /etc/ati directory
NOTE: The /etc/ati/custom-package directory, if exists, contains the external SlackBuild and therefore should not be deleted.
- The fglrx-x package contains ATI's OpenGL libraries, and these libraries are located in the same directory of the Mesa libraries, so when you install the fglrx-x package Mesa OpenGL libraries are overridden. To restore the situation you should simply reinstall the package containing these libraries, like:
for slackware 11, or:
for slackware 12.
Patching the drivers
Ati drivers are usually not compatible with brand new version of kernel linux. You often need to patch the driver so that you can create the kernel module successfully. Since Ati Catalyst > 8.11 you can patch Ati drivers within the "internal slackbuild" before that same slackbuild compiles the kernel module.
In order to do that, you just have to create (or download from the Internet) a patch and rename it like this:
ATI_DRIVER_VERSION must be equal to the output of:
$ sh installer.run -i | head -n1 | cut -d'-' -f2
KERNEL_VERSION must be equal to the output of:
If /etc/ati/patch doesn't exist, it must be made.
For example, if the former command outputs "8.55" and the latter "184.108.40.206", you need to name the patch /etc/ati/patch/patch-8.56-220.127.116.11.
The internal slackbuild will find the patch automatically and, if the command patch is installed, it will run:
# patch -p0 < /etc/ati/patch/patch-8.56-18.104.22.168
FATAL: modpost: GPL-incompatible module fglrx.ko uses GPL-only symbol 'paravirt_ops'
The error occurs during module compilation and It's due to the fact that the kernel was compiled with the option of paravirtualization active. This option among other things, prevents to load, and then to compile, modules that do not have the GPL license. Since that ATI drivers don't have this type of license, they aren't compiled.
To work around this problem you can:
Disable kernel paravirtualization option
The paravirtualization option is called CONFIG_PARAVIRT and generally is in the Processor type and features kernel submenu.
Patch ATI drivers
This operation is illegal because It changes the type of license issued by ATI in a GPL license. I wrote the ati_to_gpl.patch (md5sum: 4207f41a71035dc2eed3ea9346b881bb) patch but I do not take any responsibility, I do not use It and I discourage the use in order to prefer the alternative to disable the paravirtualization kernel option. To use this patch You need to:
- Copy the patch in the /etc/ati/custom-package/patch directory
Internal slackbuild (only with Ati Catalyst > 8.11)
- Copy the patch in the /etc/ati/patch directory (if it doesn't exist you must create it)
The SlackBuild will find and apply the patch automatically. In order to uninstall it you simply need to delete it.
In order to uninstall the patch simply delete It from /etc/ati/custom-package/patch directory.
This problem is due to the lack of SHM filesystem (now called tmpfs), that is virtual memory filesystem. To work around this problem you must:
- Add into /etc/fstab file the following line:
shm /dev/shm tmpfs defaults 0 0
- Then mount the filesystem through:
# mount /dev/shm
Obviously the kernel must be predisposed for the "mounting" of this filesystem, in particular the kernel option that must be enabled is CONFIG_TMPFS that is generally placed in File system --> Pseudo filesystems submenu. However all the compiled kernel generally have this option enabled.
kernel includes at /lib/modules/`uname -r`/build/include do not match current kernel
The complete mistake is something like this:
Error: kernel includes at /lib/modules/`uname -r`/build/include do not match current kernel. they are versioned as "" instead of "`uname -r`". you might need to adjust your symlinks: - /usr/include - /usr/src/linux
The error, also if explained, could be not clear. In practice It results from the fact that the symbolic link:
don't point to the directory where are inserted the current kernel sources (which is generally /usr/src/linux- 'uname-r'). It happens to those who use a kernel contained in Slackware, so I will try to explain It in terms of Slackware "packages". This can happen:
- because the kernel source were not installed. In this case should be enough to install the source package which can be found in Slackware k/ directory. However, It is not granted that the problem will be solved, You'll need to see the second reason why there is an error.
- because sources (also if installed) do not reflect the settings of the current kernel. The new Slackware 12 has some precompiled kernels (which means different settings), while just a single package for the sources (unless seeing the branch extra/). In particular, the sources are for the SMP kernel and so if you use a non-SMP kernel can appear this error. To avoid this, after making sure that the package source has been installed, do simply the following:
# cd /usr/src/linux # cp /boot/config .config # make
running make, in addition to compiling the kernel modules (which we will not use), some header files are regenerated, and they will reflect the kernel configuration (as it's set in the .config file).
Driver 8.39.4 logo
This "bug" in 8.39.4 drivers results from the fact that ATI developers don't update the packager maintainers before the official releases. It should be nice first if they did test us official releases in order to certify the proper functioning of the scripts for creating packages. To solve the problem It's necessary to use the external SlackBuild as described here.
amdcccle don't start on slackware 12
Many users of the X.Org 7.2 (or 1.3) server version fail to start properly the Catalyst. The command to run the Catalyst is:
For this problem it seems there is no solution yet, but we are working on to solve it.
The discussion thread from which it was derived this article:
An alternative to official ATI drivers is given by the following website:
A wiki in italian about installing and configuring ATI drivers (open source and proprietary) can be found at: http://www.slacky.eu/wikislack/index.php?title=Installazione_driver_ATI_su_Slackware_GNU/Linux
Proprietary ATI drivers for many modern desktop and notebook PC seems are almost the only alternative to the use of 3d acceleration with linux. Unfortunately ATI developers don't make back porting and then users using drivers' version older than 8.37.6 will never go to X.Org server version 7.2 (or 1.3) or later. Let's hope that Mesa drivers can also be used for these cards. The external SlackBuild is deprecated because now the internal slackbuild can apply patch natively. Also, because It hasn't been tested the SlackBuild with all possible versions of ATI drivers and kernels, It could happen that the module compilation fails. If so, feel free to write me at tomasiATcliDOTdiDOTunipiDOTit posting me the output generated by Only_Module option.