Saturday, 31 March 2012

Installing the Proprietary ATI Driver

"Proprietary drivers on Debian". That just sounds wrong.

Even so, it would be nice if AMD could spare 30 minutes to polish their proprietary Linux driver installation. Perhaps they're too busy resting on their Eyefinity laurels.

To start, we'll remove the open source drivers and clear any remnants.

# apt-get remove --purge fglrx*
# apt-get remove --purge xserver-xorg-video-ati xserver-xorg-video-radeon
# update-alternatives --remove-all x86_64-linux-gnu_gl_conf
# apt-get install --reinstall libgl1-mesa-glx:amd64 libgl1-mesa-dri:amd64 libgl1-mesa-glx:i386 libgl1-mesa-dri:i386 
# apt-get install --reinstall xserver-xorg-core

AMD offers two installation options: direct installation and generation of a distribution package. Opting for the former can result in fewer potential pitfalls initially.

If you opt to generate a distribution package, you can bypass the irritating graphical prompts by using --buildpkg. For example: 


# ./amd-driver-installer-12-3-x86.x86_64.run --buildpkg Ubuntu/oneiric

There are a few things to watch out for. For starters, ATI omits to tell you that you'll need various binaries for this to work, and if you don't have them, generation will failf. To save you some time trawling through the fglrx-install log file, this is what you'll need under Ubuntu or other Debian-based distros:

# apt-get install devscripts execstack dh-make dh-modaliases

If you tried to install the driver directly before trying to generate a distribution package, you may encounter errors like this:

objdump: debian/fglrx/usr/lib/fglrx/alt_ld.so.conf: File truncated
objdump: debian/fglrx/usr/lib/fglrx/ld.so.conf: File format not recognized
objdump: debian/fglrx/usr/lib/pxpress/alt_ld.so.conf: File truncated
objdump: debian/fglrx/usr/lib/pxpress/ld.so.conf: File format not recognized
   debian/rules override_dh_shlibdeps
make[1]: Entering directory `/tmp/fglrx.NszX9x'
dh_shlibdeps -l/tmp/fglrx.NszX9x/debian/fglrx/usr/lib/fglrx:/tmp/fglrx.NszX9x/debian/fglrx/usr/lib32/fglrx -Xlib32
dpkg-shlibdeps: warning: debian/fglrx/usr/lib/fglrx/libAMDXvBA.so.1.0 contains an unresolvable reference to symbol dlsym: it's probably a plugin.
dpkg-shlibdeps: warning: 21 other similar warnings have been skipped (use -v to see them all).
dpkg-shlibdeps: warning: debian/fglrx/usr/lib/fglrx/bin/atieventsd contains an unresolvable reference to symbol XauFileName: it's probably a plugin.
dpkg-shlibdeps: warning: debian/fglrx/usr/lib/fglrx/libGL.so.1.2 contains an unresolvable reference to symbol XOpenDisplay: it's probably a plugin.
dpkg-shlibdeps: warning: 31 other similar warnings have been skipped (use -v to see them all).
dpkg-shlibdeps: error: no dependency information found for /usr/share/ati/lib64/libQtCore.so.4 (used by debian/fglrx/usr/lib/fglrx/bin/amdnotifyui).
[...]
 debian/fglrx/usr/lib/fglrx/libaticalcl.so debian/fglrx/usr/lib/fglrx/libaticaldd.so returned exit code 2
make[1]: *** [override_dh_shlibdeps] Error 2
make[1]: Leaving directory `/tmp/fglrx.NszX9x'
make: *** [binary-arch] Error 2
dpkg-buildpackage: error: debian/rules binary gave error exit status 2

The solution which worked for me was to completely remove remnants of previous installations. I ran:

# sh /usr/share/ati/fglrx-uninstall.sh
# apt-get remove --purge fglrx* xserver-xorg-video-ati xserver-xorg-video-radeon
# shutdown -r now

Successful generation of packages will dump three .deb files (or .rpms for RH, etc) to the current directory.


Package /home/ace/Downloads/fglrx_8.951-0ubuntu1_amd64.deb has been successfully generated
Package /home/ace/Downloads/fglrx-dev_8.951-0ubuntu1_amd64.deb has been successfully generated
Package /home/ace/Downloads/fglrx-amdcccle_8.951-0ubuntu1_amd64.deb has been successfully generated


You then need to install them manually:

# apt-get install dkms
# dpkg -i fglrx*8.951*.deb


Load the module


To load it automatically, do the usual and add fglrx to /etc/modules. To load it manually, modprobe it, and verify it's loaded with lsmod. Please use the verbose flag with modprobe as shown below, because useful error messages are typically suppressed.


# modprobe -v fglrx
# lsmod | grep fglrx


If you get an error at this stage, you may find more details in dmesg.


# dmesg | tail -n 50