Installing proprietary AMD Catalyst Driver under Fedora 22

Installing the proprietary ATI AMD Catalyst driver is a bit tricky under Fedora 22 because the currently available driver, identified as “revision 15.5″ on their website, but actually versioned 15.101.1001 as far at the fglrx driver version is concerned, is just not compatible with the Xorg version of Fedora 22. Driver will install fine, but you’ll get a nice black screen on reboot.

One working solution would be to downgrade Xorg packages to Fedora 21 versions, waiting for AMD to release a compatible version of their driver, if they ever do. If you want to go down that route, there’s a good blog entry here that explains quite well how to do so.

However, I didn’t want to downgrade to the Fedora 21 Xorg version, so I managed to find another way. The previous version of the driver I had (14.501.1003) didn’t work with this Xorg version either. However, a somewhat difficult to find, intermediary version of the driver, internally versioned as 15.20.1013, apparently dated from February 2015 (whereas the latest, non-working version is dated April 2015), does actually work with the newer Xorg version. Go figure. As a quick summary:

Internal versionInternal release dateComplete version stringRevision (website)Works with Fedora 22 ?
14.501.10032014-11-20S14.501.1003-141120a-178002C14.xNo, Xorg version not supported
15.20.10132015-02-27S15.20.1013-150227a-180955E-ATI15.3 (?)Yes
15.101.10012015-04-14S15.101.1001-150414a-184705C15.5No, black screen (regression?)

By the way, to find out the real fglrx version and real release date of an fglrx driver, you can look in the amdpcsdb.default file of the unpacked archive :

user$
$ find fglrx-* -name amdpcsdb.default | xargs grep ^ReleaseVersion=
fglrx-14.10.1006.1001/common/etc/ati/amdpcsdb.default:ReleaseVersion=S14.10.1006.1001-140505a-171583E
fglrx-14.301.1001/common/etc/ati/amdpcsdb.default:ReleaseVersion=S14.301.1001-140915a-176098C
fglrx-14.501.1003/common/etc/ati/amdpcsdb.default:ReleaseVersion=S14.501.1003-141120a-178002C
fglrx-15.20.1013/etc/ati/amdpcsdb.default:ReleaseVersion=S15.20.1013-150227a-180955E-ATI
fglrx-15.101.1001/common/etc/ati/amdpcsdb.default:ReleaseVersion=S15.101.1001-150414a-184705C

On this complete release version numbering scheme, we can guess that the first part is the fglrx version (e.g. 15.20.1013), the second part is the release date (e.g. 15-02-27), and the third part seems to be a forever incrementing number, probably something like an internal SVN revision (180955). Note that the revision number advertised on their website (15.5 for the most recent version) is nowhere to be found in the archive file.

Back to our problem: the only package I could find for 15.20.1013 is buried deep on Launchpad, it’s labeled 15.200 there (seriously, what the hell AMD with your version numbering?), but it actually is 15.20.1013. Unfortunately, once unpacked, it doesn’t have the usual fglrx installer directory layout, and it’s missing the usual install scripts. It’s not usable out of the box.

What I did was unpacking it, along with the most recent 15.101.1001 package in another directory. Then, I replaced all the libraries and driver components of the 15.101.1001 installer by the 15.20.1013 versions. This way, I have an usable fglrx installer for 15.20.1013.
This operation is not very difficult to do, but a bit cumbersome, if you don’t want to bother doing it yourself, jou can grab the resulting archive, and skip over the next section.

Building a working installer for fglrx 15.20.1013

If you’re lazy, just get my prebuilt 15.20.1013 install package and skip to the next section.

Steps to do it yourself :
Grab the release 15.5 aka fglrx 15.101.1001 (mirror)
Grab the tar.gz of fglrx 15.20.1013 (mirror)
Grab this patch to make the driver compatible with kernel 4.0+
Grab this other patch to help the installer properly detecting your Xorg version with the new rootless X Fedora installations
Then fire up you preferred terminal

user$
# unpack the tar.gz under some directory
$ mkdir drv
$ tar xf fglrx-installer_15.200.orig.tar.gz -C drv
# extract the rel15.5 contents
$ unzip amd-catalyst-omega-15.5-linux-run-installers.zip
$ sh amd-catalyst-omega-15.5-linux-run-installers.run --extract inst
Creating directory inst
Verifying archive integrity... All good.
Uncompressing AMD Catalyst(TM) Proprietary Driver-15.101.1001...
# you should now have 2 folders
$ ls
drv inst
# now, let's move files around to replace the
# 15.5 driver files by the 15.200 ones
$ rsync -va drv/xpic* inst/
$ rsync -va --delete drv/arch/ inst/arch/
$ rsync -va --delete drv/etc/ inst/common/etc/
$ rsync -va --delete drv/lib/ inst/common/lib/
$ rsync -va --delete drv/usr/ inst/common/usr/
# change the fglrx version in the installer files
$ sed -i -re 's/15\.101\.1001/15.20.1013/g' inst/*.sh
# apply the usual fixups for kernel 4.0+ compatibility
$ patch -d inst/ -p0 < fglrx-kernel4.0.patch
patching file common/lib/modules/fglrx/build_mod/firegl_public.c
patching file common/lib/modules/fglrx/build_mod/kcl_str.c
# also patch the installer to be Fedora-22 compatible
# in detecting Xserver version with rootless Xorg
$ patch -d inst/ -p0 < fglrx-xorgdetect.patch
patching file check.sh
# you now have an installable driver !
$ sudo sh inst/ati-installer.sh 15.20.1013 --install

Installing the new driver

If you have an old version of the driver installed, you should uninstall it before.

user$
$ sudo /usr/share/ati/fglrx-uninstall.sh

You might need to add –force if AMD finds your install was a bit messy.
Don’t forget to put your current version.h file in the kernel build directory, the installer needs it there :

user$
$ sudo cp /usr/include/linux/version.h /lib/modules/`uname -r`/build/include/linux/

Then fire up the installer (either built from the previous section, or downloaded here)

user$
$ sudo sh ati-installer.sh 15.20.1013 --install

Select Install driver 15.20.1013 on X.Org 6.9 or later 64-bit, then Automatic mode. After installation, you should get the fglrx driver on next reboot:

user$
$ glxinfo | grep version
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL core profile version string: 4.4.13374 Core Profile Context 15.20.1013
OpenGL core profile shading language version string: 4.40
OpenGL version string: 4.4.13374 Compatibility Profile Context 15.20.1013
OpenGL shading language version string: 4.40

And it works, we now have the AMD Catalyst driver under Fedora 22 without downgrading Xorg !