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
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:
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)