Installer un RPM pour pilote de carte graphique ATI sur une distribution sans RPM
Cette documentation est considérée comme étant obsolète. Cela signifie que la documentation sur cette page est dépassée. Léa-Linux vous incite à ne pas suivre cette documentation dans votre utilisation d'une distribution récente. Cette documentation est conservée uniquement dans un souci de curiosité et d'archive documentaire, mais au moins une partie des informations qui la compose n'est plus valide. Trouvez des articles plus à jour dans la rubrique Matériel. |
Installation des drivers ATI
par Fred
Installer un RPM sur une distribution n'utilisant pas RPM
Introduction
Installation des drivers ATI pour une gentoo (cette procédure doit fonctionner, moyennant quelques petites adaptations pour n'importe quelle distribution).
<cadre> Gentoo dispose depuis un ebuild pour le driver fglrx, il suffit de l'installer via : emerge ati-drivers </cadre>
Le problème de ces drivers venait auparavant (pour partie) de ce que le format choisi était RPM et uniquement RPM (quel choix étrange ...). Mais j'ai rencontré d'autres problèmes. Je vais tenter d'expliquer comment je m'y suis pris pour trouver une solution.
Si vous cherchez comment installer les nouvelles versions non-RPM des pilotes, allez voir ici.
Tout d'abord, il faut installer rpm. Sur une gentoo c'est assez simple : un ebuild (package) existe, un simple "emerge rpm" installe rpm sans aucun problème. Pour toute autre distribution, debian ou slackware par exemple, une procédure similaire permet aussi d'installer rpm.
Ensuite, on va installer un petit utilitaire qui va nous convertir le rpm en tar.gz : rpm2targz. Pour gentoo : "emerge rpm2targz" l'installe. Une procédure similaire doit exister pour debian ou slackware.
Installation
Ces pré-requis étant énoncés, passons aux choses sérieuses et transformons notre rpm en tar.gz :
root@gandalf ATI # ls
fglrx-glc22-4.3.0-3.7.0.i386.tar.gz
Regardons, un peu cette archive :
./
./lib/
./lib/modules/
./lib/modules/fglrx/
./lib/modules/fglrx/fglrx_info.txt
./lib/modules/fglrx/make_install.sh
./lib/modules/fglrx/build_mod/
./lib/modules/fglrx/build_mod/2.6.x/
./lib/modules/fglrx/build_mod/2.6.x/Makefile
./lib/modules/fglrx/build_mod/agpgart_be.c
[...]
Pas très sympathique ce tar.gz ;-) Bon visiblement, il faut le décompacter dans / :
Configuration
Après lecture de la documentation disponible là : http://www2.ati.com/drivers/linux/readme0370.txt. Je constate qu'il faut modifier un peu mon /etc/X11/XF86Config, la section "Module" doit contenir :
Load "glx"
Il faut, aussi, y créer une section "DRI" :
Group "video"
Mode 0660
EndSection
ou
Mode 0666
EndSection
Enfin, une section "Device" doit être modifiée ou créée pour prendre en compte le nouveau driver :
Identifier "ATIRadeon"
VendorName "Hercules"
BoardName "3D Prophet 8500 LE"
#Driver "radeon"
Driver "fglrx"
Option "DPMS" "on"
BusID "PCI:1:0:0"
EndSection
Note: le BusId est obtenu par :
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R200 QL [Radeon 8500 LE]
01.00.0 donne un busID de PCI:1:0:0"
Le module pour le kernel
Reste encore à compiler les modules pour le kernel. A ce stade, il nous faut l'arborescence du kernel correctement configurée. On se place dans /lib/modules/fglrx/
root@gandalf build_mod # make
ATI module generator V 2.0
==========================
initializing...
cleaning...
patching 'highmem.h'...
skipping patch for 'drmP.h', not needed
patching 'drm_os_linux.h'...
probing for VMA API version...
doing script based build for kernel 2.4.x and similar
./make.sh: line 1009: [: -ge: unary operator expected
compiling './agpgart_be.c'...
compiling './agp3.c'...
compiling './i7505-agp.c'...
compiling './nvidia-agp.c'...
compiling './firegl_public.c'...
linking of fglrx kernel module...
duplicating results into driver repository...
done.
==============================
You must change your working directory to /lib/modules/fglrx
and then call ./make_install.sh in order to install the built module.
==============================
root@randalf build_mod # cd ..
root@randalf fglrx # ./make_install.sh
- creating symlink
- recreating module dependency list
- trying a sample load of the kernel module
[...]
done.
Puis, on charge le module, des fois que ce ne soit pas automatique ...
[...]
Le kernel nous prévient que cela va corrompre (taint) notre kernel : normal, maintenant le kernel utilise un module non GPL. Mais en attendant un module efficace libre ...
Il ne nous reste plus qu'à redémarrer X. Puis à lancer glxinfo pour voir si effectivement OpenGL utilise maintenant l'accélération 3D :
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
Yes ! Vous pouvez tester plus avant, crack-attack, les économiseurs d'écran de kde ou tuxracer (qui chez moi ne fonctionne pas : je n'ai que des saletés à l'écran). Personnellement, j'ai un gros progrès : l'accélération fonctionne en dual-head (mais pas encore en Xinerama, mais d'après ce que j'ai compris, c'est Xinerama le responsable).
Bonus: fireglcontrol
Et maintenant, la compilation de "fireglcontrol" le panneau de contrôle d'ATI (pas très complet). Je mets le détail complet de la procédure car cette méthode peut resservir pour d'autres programmes qui râlent à la compilation. Cela montre comment, même sans connaissance précise en programmation, compiler un programme récalcitrant.
Les sources du panneau de contrôle d'ATI sont là : /usr/src/ATI/fglrx_panel_sources.tgz, on les décompresse :
fred@gandalf ATI # tar xzf /usr/src/ATI/fglrx_panel_sources.tgz
fred@gandalf ATI # make
gcc -c -g -O2 -fno-strength-reduce -funsigned-char -Dlinux -DFGLRX_USE_XEXTENSIONS -DFGLRX_OGL_INFO -DQT_NO_STL -I/usr/X11R6/include -I. -I./include_dummy ATITVOExtensions.c
ATITVOExtensions.c:36:36: Radeon_extension_tvout.h: Aucun fichier ou répertoire de ce type
ATITVOExtensions.c:40: « ATITVOUT_EXTENSION_NAME » non déclaré ici (n'est pas dans une fonction)
ATITVOExtensions.c: Dans la fonction « find_display_atitvo »:
ATITVOExtensions.c:73: « ATITVOUT_NUMBER_EVENTS » non déclaré (première utilisation dans cette fonction)
[...]
Ça commence bien ! Radeon_extension_tvout.h est introuvable et « ATITVOUT_EXTENSION_NAME » non déclaré ici ! Et bien cherchons le :
ATITVOExtensions.c:static char *atitvo_extension_name = ATITVOUT_EXTENSION_NAME;
TVOExt.h:#define ATITVOUT_EXTENSION_NAME "ATITVOUT"
TVOExt.h:static char *atitvo_extension_name = ATITVOUT_EXTENSION_NAME;
Visiblement le #define est dans TVOExt.h, ils ont dû oublier de renommer ce fichier ou quelque chose du genre, je vais tenter de faire un lien du fichier trouvé vers le fichier manquant :
fred@gandalf ATI # make
gcc -c -g -O2 -fno-strength-reduce -funsigned-char -Dlinux -DFGLRX_USE_XEXTENSIONS -DFGLRX_OGL_INFO -DQT_NO_STL -I/usr/X11R6/include -I. -I./include_dummy ATITVOExtensions.c
ATITVOExtensions.c:39: redéfinition de « atitvo_info »
Radeon_extension_tvout.h:18: `atitvo_info' previously defined here
ATITVOExtensions.c:40: redéfinition de « atitvo_extension_name »
Radeon_extension_tvout.h:19: `atitvo_extension_name' previously defined here
ATITVOExtensions.c:50: redéfinition de « close_display_atitvo »
Radeon_extension_tvout.h:259: `close_display_atitvo' previously defined here
ATITVOExtensions.c:53: redéfinition de « atitvo_extension_hooks »
Radeon_extension_tvout.h:262: `atitvo_extension_hooks' previously defined here
ATITVOExtensions.c:73: redéfinition de « find_display_atitvo »
Radeon_extension_tvout.h:282: `find_display_atitvo' previously defined here
ATITVOExtensions.c:79: redéfinition de « answerisyes »
Radeon_extension_tvout.h:288: `answerisyes' previously defined here
ATITVOExtensions.c:88: redéfinition de « getstring »
Radeon_extension_tvout.h:297: `getstring' previously defined here
make: *** [ATITVOExtensions.o] Erreur 1
C'est pas vraiment mieux, mais on voit que ce n'est plus le message d'erreur, cette fois, ce sont des déclarations en double ... je vais les supprimer, mais avant je vais regarder ces définitions :
ATITVOExtensions.c:static XExtensionInfo _atitvo_info_data;
ATITVOExtensions.c:static XExtensionInfo *atitvo_info = &_atitvo_info_data;
ATITVOExtensions.c: atitvo_info)
ATITVOExtensions.c: atitvo_info,
Radeon_extension_tvout.h:static XExtensionInfo _atitvo_info_data;
Radeon_extension_tvout.h:static XExtensionInfo *atitvo_info = &_atitvo_info_data;
Radeon_extension_tvout.h: atitvo_info)
Radeon_extension_tvout.h: atitvo_info,
TVOExt.h:static XExtensionInfo _atitvo_info_data;
TVOExt.h:static XExtensionInfo *atitvo_info = &_atitvo_info_data;
TVOExt.h: atitvo_info)
TVOExt.h: atitvo_info,
Manifestement ce sont les mêmes partout, il est donc bien légitime de vouloir en supprimer certaines. A priori ces déclaration n'ont pas lieu d'être dans un .h mais comme elles y sont je préfère les y laisser des fois que d'autres fichiers .c y fassent référence. Je vais donc commenter ces déclarations dans ATITVOExtensions.c, l'erreur de make m'a signalé les lignes : 39, 40, 50, 53, 73 et 88 comme fautives. Je prends bien soin de commenter toute la déclaration et pas seulement la première ligne.
Ici je commente les lignes fautives avec des // en début de ligne, je quitte avec :wq!
Ça marche !
Il y a un message d'erreur à la fin sur "fireglcontrol.desktop" mais je m'en fiche ;-)
Rulez !
Malheureusement, ce n'est pas toujours aussi simple !
@ Retour à la rubrique Matériel
Copyright
© 02/01/2004 Frédéric Bonnaud
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique 4.0 : https://creativecommons.org/licenses/by-sa/4.0/ |