Installation d'un pilote nVidia
Le 30 mai 2008, à 11:20 par Ulhume...

Jusqu'à récemment, je préconisais systématiquement une carte nVidia pour les nouveaux entrants Linux. En effet, ce constructeur a été le premier à offrir un vrai support de ses cartes à Linux même si malheureusement le pilote était, et est toujours, "fermé". Aujourd'hui, non seulement ATI s'est lancé dans l'aventure Linux mais avec la reprise de la marque par AMD, ils sont même passés au modèle libre. Mais bon, ce n'est pas une raison pour polluer les campagnes chinoises en remplaçant un matériel qui me donne pour l'instant entière satisfaction.

Historique (tout afficher)
  • v4 - Y'avait un bloc attention vide, j'me suis permi de le retirer. Puis j'avais le vertige en voyant les parenthèses ouvertes et jamais fermées pour cause de smiley. J'ai remis des parenthèses après, je n'sais pas ce que t'en penses ;-) . (2008-10-25 15:10)
  • v3 - Y'a amélioration je trouve ;-) (2008-05-30 21:43)

Installation du pilote

Il existe bien un pilote libre, livré avec toutes les distributions GNU/Linux mais nv, car tel est son nom, est loin d'être un foudre de guerre y compris dans le domaine de la 2D. Pour une utilisation intensive il n'y a donc pas d'autre alternative que le pilote propriétaire.

Installer à partir du dépôt standard

Les pilotes nVidia sont maintenant dans les dépôts standards de la Mandriva. Malheureusement cela ne nous évite pas totalement (ou alors j'ai pas trouvé) d'installer un "vrai" pilote pour disposer des outils nvidia-settings et nvidia-xconfig. Ce détail n'est cependant pas d'une grande importance pour qui utilise peu ou pas ces utilitaires.

Pour installer le pilote nVidia à partir du dépôt, il suffit de lancer la commande nvidia-current-kernel-desktop-latest. Basé sur le système dkms ce pilote s'installe sans difficultés particulières et sans avoir à compiler quoi que ce soit, ni ajouter de dépôts exotiques, ce qui en soit est une petite révolution pour qui n'a juste pas que cela à faire Wink .

Une fois le pilote installé, si vous ne voulez pas redémarrer, faites simplement un modprobe nvidia-current et relancez le serveur X (CTRL-ALT-BACKSPACE).

Installation du pilote à la main

Avant son apparition dans les dépôts standard, ce pilote devait être installé à la main. C'est encore le cas aujourd'hui lorsque l'on désire en tester les toutes dernières évolutions. Il faut alors aller sur le site de nVidia, choisir sur le côté gauche les pilotes pour Linux stables ou les bétas, et télécharger le fichier correspondant.

Une fois récupéré le reste du processus se passe exclusivement en console, en root, et sans Xorg de lancé. Il faut auparavant vérifier que vous disposez des sources du kernel. Vous pouvez valider cela par un rpm -ka | grep kernel | grep source en comparant avec les informations de version données par uname -a.

Je vous conseille d'utiliser les méta-paquets "latest" pour tout ce qui touche au kernel. Ces paquets font référence aux dernières versions connues du dépôt. Pour installer le dernier kernel et les dernières sources pour une version "desktop", il suffira alors de lancer un urpmi kernel-desktop-latest kernel-source.

Une fois les sources en place (n'oubliez pas de rebooter si vous avez changé de kernel). Ceci fait il ne reste plus qu'à lancer l'installation du pilote :

sh NVIDIA-Linux-x86-XXXXXXXX-pkg1.run

Dites "oui" à toutes les questions, vous gagnerez du temps Wink . A la fin du processus il vous est proposé de configurer X11 ce que vous devez accepter seulement si vous n'avez pas encore une configuration nVidia fonctionnelle. C'est terminé et il est possible à ce stade de vérifier que tout s'est bien passé en chargeant le module.

# chargement du module
modprobe nvidia

# déchargement
rmmod nvidia

Problèmes sous Mandriva

Le symptôme est toujours le même, tentative de compilation du pilote natif et une fois que l'on croit que tout va se passer comme sur des roulettes, voilà que l'on se prend une volée d'insultes pour motif de refus du Kernel de charger le binaire fraîchement construit.

La solution est souvent dans le message d'erreur qui indique ici d'aller jeter un œil à /var/log/nvidia-installer.log. On peut y lire (si vous avez ce même problème) que la raison du rejet est un nom de kernel non concordant avec les sources.

En effet, pour motif de sécurité (éviter l'écrasement du kernel courant), lorsque l'on installe les sources du noyau, ces derniers sont configurés pour générer une mouture portant la douce extension de mdvcustom (ou quelque chose du genre). Or un uname -r donne quelque chose finissant plutôt par .XX-desktop-1mdv. C'est là que ça coince.

La solution est d'aller dans /usr/src/linux et de lancer une compilation en passant en paramètre le bon numéro de version :

make EXTRAVERSION=$(uname -r)

Une fois que la compilation a démarré, laissez la juste causer une dizaine de lignes, puis arrêtez violemment (CTRL-C), ça suffira.

Ceci fait, vous pouvez relancer l'installation du pilote nVidia.

Paramétrage de XOrg

Une bonne manière de faire une première configuration du fichier /et/X11/xorg.conf est de lancer l'outil nVidia nvidia-xconfig. C'est ce que fait l'installateur du pilote avec sa dernière question. Cela va créer un premier jus fonctionnel que l'on pourra modifier. Il est même possible de passer des paramètres à cet outil pour des configurations plus exotiques comme le double écran.

Ceci fait, vous devriez pouvoir lancer le serveur Xorg.

startx

Maintenant vous pouvez utiliser l'éditeur de texte de votre choix (attention vous êtes root !) pour charger le fichier /etc/X11/xorg.conf. Logiquement, votre fichier est déjà configuré pour l'essentiel (la preuve, vous pouvez lire ces lignes Wink ). Nous allons donc examiner les parties spécifiques à nVidia en les commentant. A noter cependant que toutes les directives spécifiques au pilote nVidia sont documentées dans le dossier /usr/share/doc/NVIDIA_GLX-1.0/. Vous y trouverez un manuel texte complet ainsi que des exemples de configurations typiques.

Section "Module"
    Load "dbe"
    Load "v4l"
    Load "extmod"
    Load "type1"
    Load "freetype"

    # A rajouter pour nvidia
    Load "glx"                                # OpenGl
    Load "nv-control"                         # Contrôle via nvidia-settings
EndSection

La section Module qui permet à XOrg de charger les parties optionnelles du serveur. Deux nous intéressent ici : glx donnant accès à la 3D (openGL) et nv-control permettant de contrôler dynamiquement des aspects pointus de la carte à travers l'outil nvidia-settings comme régler la fréquence du GPU et de la VRAM (faites attention, il est aisé de griller une carte en jouant avec cela...)

Section "Screen"
    Identifier "screen"
    Device "fx5200"
    Monitor "viewsonic"
    DefaultColorDepth  24


    # interactions 3D en plein écran
    Option "AddARGBGLXVisuals" "true"
    Option "DisableGLXRootClipping" "true"

    Subsection "Display"
        Depth 1
        Modes "1280x1024"
    EndSubsection
EndSection

La section suivante à modifier est Screen. Je ne suis pas bien sûr que cela soit d'une utilité fondamentale mais c'est beaucoup cité sur le web depuis l'apparition des bureaux 3D. Le premier groupe d'option permet au driver d'autoriser OpenGL à jouer avec la couche Alpha (transparence). Nous retrouverons la même déclaration dans la section suivante Device un peu plus loin. Laquelle est utile ? les deux ? J'ai pris le parti de laisser ainsi, au cas où... L'autre point qui semble important, toujours relatif aux bureaux 3D est cet étrange Depth 1 qui permettrait au pilote de gérer cette fameuse couche Alpha.

Section "Device"
    Identifier "fx5200"
    VendorName "nVidia Corp."
    BoardName "NVIDIA GeForce FX 5200"
    Driver "nvidia"

    #Option "NoLogo" "true"

    Option "RenderAccel" "true"


    Option "AddARGBGLXVisuals" "true"
    Option "DisableGLXRootClipping" "true"
    Option "AllowGLXWithComposite" "true"

    Option "AllowDDCCI" "true"
EndSection

Maintenant donc, la section la plus importante, Device. La première opération consiste à demander une accélération du module Render (je pense que c'est activé par défaut, mais cela ne coûte rien de le préciser).

Suit un bloc dédié aux gestionnaires de fenêtre 3D (compiz, Beryl, Xgl, etc..). Nous retrouvons cette fameuse option permettant à OpenGL de gérer la couche Alpha, puis l'option DisableGLXRootClipping qui permet quant à elle aux gestionnaires de composition de fonctionner correctement lorsqu'ils dessinent sur la fenêtre racine, ce qui est le cas typique d'XGL. Dans la même veine, AllowGLXWithComposite permet à ces mêmes gestionnaires de fonctionner avec XGL.

L'option AllowDDCCI permet quant à elle le contrôle fin du matériel via nvidia-settings (voir plus haut).

Sauvons maintenant notre travail, quittons X et retapons startx pour vérifier que tout se lance correctement. Si vous avez laissé l'affichage du logo nVidia, son arrivée vous assurera que le pilote est bien chargé et fonctionnel.

Gestion de l'AGP

C'est ici l'occasion d'utiliser deux-trois commandes utiles pour connaître la configuration de votre PC. Tout d'abord, nous allons utiliser la commande lspci qui comme son nom l'indique, donne la liste des périphériques disponibles sur le bus PCI (AGP en faisant partie):

lspci | grep VGA | grep nVidia
#  02:00.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)

Notre carte est donc une FX 5200 positionnée sur le bus PCI 02:00.0. Nous pouvons donc rajouter dans la section Device, sous Driver "nvidia" l'option suivante :

BusID           "PCI:2:0:0"

Ce n'est pas strictement nécessaire mais néanmoins utile lorsque vous ajouterez éventuellement une seconde ou une troisième carte graphique dans votre machine.

Maintenant occupons nous de la gestion de l'AGP à proprement parler. Pour faire simple une carte AGP communique avec le CPU via un bridge (pont) AGP géré par le chipset de la carte mère. Il faut donc vérifier les capacités de l'un et de l'autre :

cat /proc/driver/nvidia/agp/card
#   Fast Writes:     Supported
#   SBA:             Supported
#   AGP Rates:       8x 4x
#   Registers:       0x1f000e1b:0x1f004312

La carte supporte donc le SBA (Side Band Addressing) qui sans rentrer dans les détails (google est votre ami Wink ) est, avec le mode Fast Writes, un facteur important de performance. La carte testée supporte les deux, c'est déjà bien. Nous notons aussi que nous avons droit à de l'AGP 8x et 4x. Maintenant passons aux capacités du bridge (chipset) :

cat /proc/driver/nvidia/agp/host-bridge
#   Host Bridge:     PCI device 10de:01e0
#   Fast Writes:     Supported
#   SBA:             Supported
#   AGP Rates:       8x 4x
#   Registers:       0x1f00421b:0x00000312

C'est plaisant, tout est supporté ici aussi. Notez que si vous avez des "non supporté", certain bios permettent d'activer ou de désactiver ces fonctions. Faites y un tour au cas où et recommencez le test après avoir changé les valeurs. Maintenant, voyons ce que le pilote fabrique avec tout cela :

cat /proc/driver/nvidia/agp/status
#   Status:          Enabled
#   Driver:          AGPGART
#   AGP Rate:        8x
#   Fast Writes:     Disabled
#   SBA:             Enabled

Bon, double mauvaise tisanne... D'un Fast Writes n'est pas utilisé, c'est dommage, de deux, le pilote utilises le support AGP fournit par Linux (AGPGART). Ce n'est pas très grave mais cela nuit aux performances. En effet, le pilote nvidia embarque sa propre gestion de l'AGP réputée plus rapide que la version Linux. Pour lui indiquer d'utiliser cette gestion de l'AGP, il faut rajouter dans le fichier xorg.conf, à la section Device l'option

Option "NvAGP" "1"

Dans certains cas, du fait du processus chargement des modules au démarrage de Linux, cela ne va pas suffire. En effet, dans le fichier /etc/modprobe.preload, vous retrouvez la ligne suivante :

nvidia-agp

Supprimez cette ligne ou mettez la en commentaire.

Reste notre problème de Fast Writes qui va être réglé en ajoutant un paramètre au module nvidia. Pour connaître la liste des paramètres d'un module, tapez la commande suivante :

modinfo nvidia
#   filename:       /lib/modules/2.6.17-6mdv/kernel/drivers/video/nvidia.ko
#   license:        NVIDIA
#   alias:          char-major-195-*
#   vermagic:       2.6.17-6mdv SMP mod_unload 686 gcc-4.1
#   depends:
#   alias:          pci:v000010DEd*sv*sd*bc03sc00i00*
#   alias:          pci:v000010DEd*sv*sd*bc03sc02i00*
#   parm:           NVreg_RMEdgeIntrCheck:int
#   parm:           NVreg_PanelBrightnessLimits:int
#   parm:           NVreg_PanelPWMFrequency:int
#   (...)
#   parm:           NVreg_EnableAGPFW:int
#   parm:           NVreg_EnableAGPSBA:int
#   (...)
#   parm:           nv_disable_pat:int

Si comme moi, votre Fast Writes était fautif, l'option recherchée est donc NVreg_EnableAGPFW. Si c'est le SBA qui était disabled, l'option NVreg_EnableAGPSBA est pour vous. Attention cependant, n'activez jamais une fonctionnalité qui n'est pas supportée par la carte ET par le bridge (voir plus haut).

Pour injecter des paramètres à un module, le plus simple est d'ajouter une ligne à la fin du fichier /etc/modprobe.conf :

options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1

Voilà, la configuration est maintenant terminée, reste à redémarrer votre PC. Ceci fait, vous vérifiez que l'AGPGART n'est pas chargé en tapant la commande :

lsmod | grep agp

Si tel est le cas, vous pouvez taper startx pour vérifier une nouvelle fois la configuration de la carte :

cat /proc/driver/nvidia/agp/status
#   Status:          Enabled
#   Driver:          NVIDIA
#   AGP Rate:        8x
#   Fast Writes:     Enabled
#   SBA:             Enabled

Et là, tout va bien, les accélérations sont bien activées et le Driver AGP est bien NVIDIA.

Configurer la sortie TV

L'objectif est ici de configurer la sortie PAL d'une carte nVidia pour, par exemple, lire un DVD sur votre téléviseur. Pour les invétérés consuméristes qui ont des écrans plats de 15m de diagonale, passez votre chemin, cet partie ne concerne que ceux qui gardent en vie un pauvre téléviseur cathodique en PAL.

Le téléviseur est relié au PC par un câble S-Vidéo (auquel peut être ajouté un convertisseur péritel). Dans cet exemple, je n'utilise QUE la sortie télévision (PC multimédia dédié). Si vous désirez une sortie de type "écran double", il faut un peu potasser la documentation du driver nVidia Smiling .

Un téléviseur analogique dispose d'une définition d'image entrelacée de 720x576 en 50Hz (720x480 lignes en NTSC). Il est donc mauvais pour la qualité d'image (déjà pas terrible Wink ) de taper dans des résolutions supérieures. Nous allons donc dans notre fichier /etc/X11/xorg.conf ajouter une section Monitor optimisée pour ce format

Section "Monitor"
    Identifier "tvMonitor"
    HorizSync 30-50
    VertRefresh 50-60
    Modeline "720x576x50" 27.15 720 736 880 896 576 578 579 606 # 27 MHz, 30.3 kHz, 50.0 Hz
EndSection

Nous allons ensuite créer un Écran (section Screen) pour définir une profondeur de couleur de 24 bits pour notre téléviseur

Section "Screen"
    Identifier "tvScreen"
    Device "tvDevice"
    Monitor "tvMonitor"
    DefaultColorDepth 24

    Subsection "Display"
        Depth 24
        Modes "720x576"
    EndSubsection
EndSection

Enfin, nous allons ajouter la section Device activant sortie TV, PAL et SVIDEO.

Section "Device"
    Identifier "tvDevice"
    Driver "nvidia"

    Option "ConnectedMonitor" "TV"
    Option "TVStandard" "PAL-N"
    Option "TVOverScan" "0.7"
    Option "TVOutFormat" "SVIDEO"    
EndSection

Les options ConnectedMonitor , TVOutFormat et TVStandard indiquent que la sortie se fait sur la prise télévision, en s-video, au standard PAL-N (PAL pour la France). L'option TVOverScan permet quant à elle de rogner sur les bords de l'écran pour occuper tout l'espace.

Il ne me reste plus maintenant qu'à modifier la section ServerLayout pour indiquer le chemin vers mon nouvel écran

Section "ServerLayout"
    Identifier "mediaLayout"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    Screen "tvScreen"
EndSection

Après un redémarrage du serveur X, je dois avoir mon téléviseur qui s'anime par magie... Reste plus qu'à exécuter la commande, on ne peut plus barbare mais ô combien efficace, indiquant à mplayer que l'on attend avec les pop-corn :

mplayer -ao alsa -monitoraspect 4:3 -dr -fs -stop-xscreensaver -vo xv -saturation 10 -panscan 1 -alang fr,en dvd://1

Conclusion

Voilà, normalement nous avons maintenant un pilote nVidia totalement opérationnel.

Commentaires

advaya, le 10 February, 2008 - 22:38

De ce que j'ai vu (mais pas testé), il me semble que depuis le kernel > 2.4, on peut passer directement EXTRAVERSION en paramètre à make (comme plein d'autres variables comme KBUILD par ex - ça par contre, j'ai testé). Ainsi, je pense que tu dois pouvoir obtenir le même résultat avec un

make EXTRAVERSION=$(uname -r)

(à confirmer tout de même Wink )

Ulhume, le 12 February, 2008 - 15:11

Yep, il semble que ton astuce fonctionne, merci Smiling

Dreamkiller , le 29 July, 2008 - 22:53

Bonsoir, tout d'abord je tien a te féliciter pour ton non-blog c'est une mine d'information bien utile.

J'ai adapter ton tuto pour une debian mais je coince avec agpgart depuis une semaine. Impossible de blacklisté ce module il est toujours present

lsmod:

nvidia 7092432 34
ipv6 229956 12
video 19600 0
output 3712 1 video
ac 4480 0
battery 8448 0
via_agp 9856 0
agpgart 31152 2 nvidia,via_agp

cat /proc/driver/nvidia/agp/status
Status: Disabled

AGP initialization failed, please check the ouput
of the 'dmesg' command and/or your system log file
for additional information on this problem.

Si une ame charitable passe par la afin d'eclairer ma lanterne
Merci d'avance

Ulhume, le 29 July, 2008 - 23:09

@Dreamkiller là je ne pourrais t'aider, je pense que Dab qui est notre spécialiste Debian a plus de chance de pouvoir t'aider :
http://artisan.karma-lab.net/user/6

Sinon pour ton tuto, n'hésites pas à poser l'URL que je l'ajoute.

Dreamkiller, le 21 August, 2008 - 16:58

Yop, j'ai resolu mon gros probléme de lag (je croyais que c'etais lié a AGPART).
Il a suffit que je vire Option "NvAGP" "1" de mon xorg.conf je retrouve un fonctionnement optimal (flash/compiz ...)

Au passage peut tu me dire le module que tu utilises dans drupal pour afficher le code?

Ulhume, le 24 August, 2008 - 08:27

Le module utilisé est un machin perso utilisant Geshi :
http://artisan.karma-lab.net/subversion/drupal/modules/code_highlighter/...

Le code est pas super propre ceci dit Wink

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...