Installer un RPM pour pilote de carte graphique ATI sur une distribution sans RPM

De Lea Linux
Aller à la navigation Aller à la recherche
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 # rpm2targz ../fglrx-glc22-4.3.0-3.7.0.i386.rpm
root@gandalf ATI # ls
fglrx-glc22-4.3.0-3.7.0.i386.tar.gz

Regardons, un peu cette archive :

root@gandalf ATI # tar tzf fglrx-glc22-4.3.0-3.7.0.i386.tar.gz
./
./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 / :

root@gandalf ATI # tar xzf fglrx-glc22-4.3.0-3.7.0.i386.tar.gz -C /

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 "dri"
Load "glx"

Il faut, aussi, y créer une section "DRI" :

Section "DRI"
Group "video"
Mode 0660
EndSection

ou

Section "DRI"
Mode 0666
EndSection

Enfin, une section "Device" doit être modifiée ou créée pour prendre en compte le nouveau driver :

Section "Device"
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 :

root@gandalf fglrx_gamma # lspci | grep -i radeon
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 ATI # cd /lib/modules/fglrx/build_mod
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 ...

root@gandalf fglrx # modprobe fglrx
[...]

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 :

fred@gandalf ~ # glxinfo | head -n 3
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 ~ # mkdir ATI && cd ATI
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 :

fred@gandalf ATI # grep ATITVOUT_EXTENSION_NAME *
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 # ln -s TVOExt.h Radeon_extension_tvout.h
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 :

fred@gandalf ATI # grep atitvo_info *
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,
Note: à cause de notre lien de tout à l'heure il semble que Radeon_extension_tvout.h et TVOExt.h dupliquent les lignes aussi, mais ça c'est normal, on ne peut pas l'éviter...

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.

fred@gandalf ATI # vi ATITVOExtensions.c

Ici je commente les lignes fautives avec des // en début de ligne, je quitte avec :wq!

fred@gandalf ATI # make

Ça marche !

fred@gandalf ATI # su -c "make install"

Il y a un message d'erreur à la fin sur "fireglcontrol.desktop" mais je m'en fiche ;-)

fred@gandalf ATI # fireglcontrol

Rulez !

Malheureusement, ce n'est pas toujours aussi simple !



@ Retour à la rubrique Matériel

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Frédéric Bonnaud le 02/01/2004.

Copyright

© 02/01/2004 Frédéric Bonnaud

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/