Luego de mucho tiempo utilizando NVIDIA (exprimiéndole el jugo al máximo a mi placa NVIDIA GeForce GT9500), mi nueva notebook posee una tarjeta gráfica ATI AMD Radeon 7650M. Así pues, me tocó instalar por primera vez el driver propietario Catalyst de AMD (anteriormente ATI) en GNU/Linux. En este tutorial voy a explicar paso a paso cómo instalar el mismo en mi, recién instalado, Slackware 14.1. Aunque es exactamente el mismo procedimiento para cualquier otra distribución.

Por defecto, Slackware utiliza el controlador open source xf86-video-ati desarrollado por X.org que, para la mayoría de los casos, funciona muy bien (2D). Lo que me motivó a instalar el driver propietario Catalyst de AMD (fglrx) fue la curiosidad por probar los efectos de escritorio de KDE 4.10 que requieren aceleración por hardware gráfico 3D.

Escenario

La notebook en cuestión es una Sony VAIO con una configuración bastante peculiar, ya que posee un procesador Intel(R) Core™ i5-3210M y a su vez cuenta con una tarjeta gráfica AMD (¿en lugar de aprovechar la tarjeta gráfica Intel® HD Graphics 4000 integrada en el propio procesador?). Confieso que uno de los motivos por el cual me decidí a quedarme con ese modelo fue precisamente la tarjeta gráfica AMD Radeon 7650M (mi espíritu gamer sigue con vida, aunque con el paso de los años se ha ido diluyendo por culpa del trabajo y la familia :P).

[22:15 root@vaio emi] > cat /proc/cpuinfo | grep 'model name'
model name      : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz

De alguna forma la tarjeta integrada Intel® HD Graphics 4000 se encuentra deshabilitada de fábrica y no existe alguna opción en la BIOS que permita habilitarla o intercambiar entre tarjetas gráficas:

[22:15 root@vaio emi] > lspci | grep VGA
01:00.0 VGA compatible controller: AMD/ATI [Advanced Micro Devices, Inc.] Thames [Radeon 7550M/7570M/7650M]

Entiendo que existen equipos que poseen una configuración híbrida, donde las dos tarjetas gráficas se encuentran habilitadas y es posible intercambiar entre ellas, por ejemplo en GNU/Linux utilizando la herramienta vgaswitcheroo (ver este artículo en linuxquestions.org).

En mi caso no es posible, ya que no hay una opción en la BIOS que permita habilitar la tarjeta Intel® HD Graphics 4000, y para el kernel Linux es como si no existiera. Digamos que es un bonito engendro.

Mi instalación de Slackware 14.1 cuenta con kernel Linux 3.10.17:

[22:13 root@vaio emi] > uname -r
3.10.17

Get down to business

Desde el sitio oficial de descargas de AMD, obtener la última versión del driver Catalyst:

AMD Catalyst™ Display Driver

La última versión estable disponible actualmente (para 64 bit) es la 13.12.

Mover el paquete a una ubicación conveniente, por ejemplo /usr/local/src/AMD/, y luego descomprimir el ZIP:

mkdir /usr/local/src/AMD/
mv ~/Downloads/amd-catalyst-13.12-linux-x86.x86_64.zip /usr/local/src/AMD/
cd /usr/local/src/AMD/
unzip amd-catalyst-13.12-linux-x86.x86_64.zip

El ZIP contiene el instalador, antes de poder utilizarlo es necesario otorgarle permisos de ejecución:

chmod +x amd-catalyst-13.12-linux-x86.x86_64.run

El instalador posee una interfaz curses, es posible ejecutar ./amd-catalyst-13.12-linux-x86.x86_64.run y seguir el wizard paso a paso, aunque en mi caso preferí utilizar la línea de comandos.

El driver permite generar paquetes para una amplia variedad de distribuciones (entre las que se incluye Slackware, afortunadamente). Para ver qué distribuciones soporta, ejecutar:

[10:23 root@vaio packages] > ./amd-catalyst-13.12-linux-x86.x86_64.run --listpkg
Created directory fglrx-install.9ERrAZ
Verifying archive integrity... All good.
Uncompressing AMD Catalyst(TM) Proprietary Driver-13.251...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
=====================================================================
 AMD Catalyst(TM) Proprietary Driver Installer/Packager 
=====================================================================
List of generatable packages:

Package Maintainer(s): Aric Cyr <aric.cyr@gmail.com>
                      Mario Limonciello <superm1@gmail.com>
Status: *UNVERIFIED*
Debian Packages:
        Debian/sid
        Debian/unstable
        Debian/etch
        Debian/stable
        Debian/lenny
        Debian/testing
        Debian/experimental

Package Maintainer(s): Niko Mirthes <nmirthes@gmail.com>
                      Michael Larabel <michael@phoronix.com>
Status: *UNVERIFIED*
Fedora Packages:
        Fedora/FC3
        Fedora/FC4
        Fedora/FC5
        Fedora/FC6
        Fedora/F7
        Fedora/F8
        Fedora/F9
        Fedora/F10
        Fedora/RHEL3
        Fedora/RHEL4

Package Maintainer(s): Anssi Hannula <anssi@mageia.org>
Status: *UNVERIFIED*
Mageia Packages:
        Mageia/1
        Mageia/2
        Mageia/3
        Mageia/4

Package Maintainer(s): Dmitry Mikhirev <dmikhirev@mandriva.org>
Status: *UNVERIFIED*
Mandriva Packages:
        Mandriva/2007.0
        Mandriva/2007.1
        Mandriva/2008.0
        Mandriva/2008.1
        Mandriva/2009.0
        Mandriva/2009.1
        Mandriva/2010.0
        Mandriva/2010.1
        Mandriva/2010.2
        Mandriva/2011.0
        Mandriva/2012.0

Package Maintainer(s): AMD
Status: Verified
RedHat Packages:
        RedHat/RHEL5
        RedHat/RHEL6
        RedHat/RHEL5_64a
        RedHat/RHEL6_64a

Package Maintainer(s): Emanuele Tomasi <tomasi@cli.di.unipi.it>
Status: *UNVERIFIED*
Slackware Packages:
        Slackware/Slackware

Package Maintainer(s): Sebastian Siebert <freespacer@gmx.de>
Status: *UNVERIFIED*
SuSE Packages:
        SuSE/SLE10-IA32
        SuSE/SLE10-AMD64
        SuSE/SLE11-IA32
        SuSE/SLE11-AMD64
        SuSE/SUSE121-IA32
        SuSE/SUSE121-AMD64
        SuSE/SUSE122-IA32
        SuSE/SUSE122-AMD64
        SuSE/SUSE123-IA32
        SuSE/SUSE123-AMD64
        SuSE/SUSE-autodetection

Package Maintainer(s): Alberto Milone <alberto.milone@canonical.com>
Status: *UNVERIFIED*
Ubuntu Packages:
        Ubuntu/gutsy
        Ubuntu/hardy
        Ubuntu/intrepid
        Ubuntu/jaunty
        Ubuntu/karmic
        Ubuntu/lucid
        Ubuntu/maverick
        Ubuntu/natty
        Ubuntu/oneiric
        Ubuntu/precise
        Ubuntu/quantal
        Ubuntu/raring
        Ubuntu/source

For example, to build a Debian Etch package, run the following:
% ./amd-driver-installer-<version>-<architecture>.run --buildpkg Debian/etch

Removing temporary directory: fglrx-install.9ERrAZ

Por ejemplo, si se desea generar el paquete .deb para Debian Etch, ejecutar:

./amd-catalyst-13.12-linux-x86.x86_64.run --buildpkg Debian/etch

En mi caso (como utilizo Slackware):

./amd-catalyst-13.12-linux-x86.x86_64.run --buildpkg Slackware/Slackware

Al intentar generar el paquete .tgz para Slackware, utilizando Slackware 14.1 con kernel Linux 3.10.17, se produce el siguiente error en tiempo de compilación:

/usr/local/src/AMD/fglrx-install.npDKuk/common/lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.c:999:5: error: too few arguments to function ‘(acpi_status (*)(u32,  void *, void *))handler’
make[2]: *** [/usr/local/src/AMD/fglrx-install.npDKuk/common/lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.o] Error 1
make[1]: *** [_module_/usr/local/src/AMD/fglrx-install.npDKuk/common/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/linux-3.10.17'
make: *** [kmod_build] Error 2
build failed with return value 2
ERROR: I didn't make module
Removing temporary directory: fglrx-install.npDKuk

De acuerdo a la siguiente entrada en el foro linuxquestions.org, esto se puede resolver aplicando un parche en el código fuente.

Crear un archivo parche.patch:

nano parche.patch

Pegar el siguiente contenido y guardar:

--- 13.12/common/lib/modules/fglrx/build_mod/kcl_acpi.c	2013-12-17 20:05:35.000000000 +0100
+++ 13.12/common/lib/modules/fglrx/build_mod/kcl_acpi.c	2013-12-19 18:40:18.386568588 +0100
@@ -995,7 +995,11 @@
 #endif
     {
         return KCL_ACPI_ERROR;
-    }    
+    }
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,1)
+    ((acpi_tbl_table_handler)handler)(hdr);
+#else
     ((acpi_table_handler)handler)(hdr);
+#endif
     return KCL_ACPI_OK;
-}
+}

Crear un directorio "build" y extraer el contenido del instalador del driver dentro del mismo:

mkdir build
./amd-catalyst-13.12-linux-x86.x86_64.run --extract build
cd build/

Aplicar el parche:

patch -p1 < ../parche.patch

Ahora es posible compilar el paquete para Slackware correctamente:

./ati-installer.sh 13.251 --buildpkg Slackware/Slackware

Instalar el paquete generado, al igual que cualquier otro SlackBuild:

installpkg fglrx-13.251-x86_64-1.tgz

Una vez que se ha instalado el driver, el siguiente paso consiste en generar la nueva configuración del servidor X.org, para ello ejecutar:

aticonfig --initial

Si se desea, previo a este paso es posible generar un backup de la configuración de X:

cp -a /etc/X11/ /etc/X11-bak

Reiniciar el equipo:

reboot

Al iniciar nuevamente, comprobar qué driver está utilizando la tarjeta gráfica. Para ello ejecutar lsci -v y revisar el campo "Kernel driver in use" del dispositivo "VGA compatible controller: AMD/ATI":

01:00.0 VGA compatible controller: AMD/ATI [Advanced Micro Devices, Inc.] Thames [Radeon 7550M/7570M/7650M] (prog-if 00 [VGA controller])
        Subsystem: Sony Corporation Device 90ab
        Flags: bus master, fast devsel, latency 0, IRQ 48
        Memory at b0000000 (64-bit, prefetchable) [size=256M]
        Memory at c0000000 (64-bit, non-prefetchable) [size=128K]
        I/O ports at 3000 [size=256]
        Expansion ROM at c0040000 [disabled] [size=128K]
        Capabilities: [50] Power Management version 3
        Capabilities: [58] Express Legacy Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting
        Kernel driver in use: radeon
        Kernel modules: radeon, fglrx

Se observa que todavía está utilizando el driver open source "radeon". Es necesario crear un archivo de configuración dentro del directorio /lib/modprobe.d/ y agregar una regla "blacklist" para que el kernel no utilice el módulo "radeon":

nano /lib/modprobe.d/radeon.conf

Pegar el siguiente contenido:

blacklist radeon

Luego de reiniciar una vez más, finalmente está utilizando el driver "fglrx" propietario de AMD:


[...]

01:00.0 VGA compatible controller: AMD/ATI [Advanced Micro Devices, Inc.] Thames [Radeon 7550M/7570M/7650M] (prog-if 00 [VGA controller])
        Subsystem: Sony Corporation Device 90ab
        Flags: bus master, fast devsel, latency 0, IRQ 48
        Memory at b0000000 (64-bit, prefetchable) [size=256M]
        Memory at c0000000 (64-bit, non-prefetchable) [size=128K]
        I/O ports at 3000 [size=256]
        Expansion ROM at c0040000 [disabled] [size=128K]
        Capabilities: [50] Power Management version 3
        Capabilities: [58] Express Legacy Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting
        Kernel driver in use: fglrx
        Kernel modules: radeon, fglrx

[...]

Con la herramienta fglrxinfo es posible obtener información sobre la versión de OpenGL y el renderizador en uso:

[12:44 emi@vaio ~] > fglrxinfo 
display: :0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7500M/7600M Series
OpenGL version string: 4.3.12618 Compatibility Profile Context 13.251

Para mayor información sobre el driver fglrx en Slackware remitirse a la wiki de la comunidad AMD Linux no oficial: Slackware: ATI SlackBuild (ENG)


Tal vez pueda interesarte


Compartí este artículo