Installation Drivers Nvidia

nvidia

Le but de cet HOWTO est d’aider à installer les drivers nvidia sous Mandrake 9.x. J’ai essayé de donner la méthode la plus propre qu’il soit pour que cela se passe sans encombres et ce en détaillant le plus possible.
Les commandes doivent être fait en tant que root ( super-utilisateur ).

Information :
Certains pourraient se demander : “Pourquoi est-ce si compliqué pour installer les pilotes NVIDIA sous linux ?”.
La réponse est complexe :
– Normalement les pilotes graphiques sont directement intégrés à XFree ( XFree est le composant qui gère de manière hardware la carte graphique, l’écran, la souris et le clavier ).
Cependant dans le cas des pilotes nvidia c’est plus compliqué, il y a 2 versions : une version libre qui n’a pas le support 3D mais est inclus dans XFree ( nv ) et une version non libre ( closed source ) récupérable sur le site de nvidia mais non inclus dans XFree ( nvidia ).
L’existence de cette version non libre est due au fait que nvidia ne pouvait/voulait faire une version OpenSource de ses pilotes à cause de problèmes de brevet concernant la partie 3D, notamment la partie openGL ( SGI détient le brevet ).

– une distribution comme Mandrake ne peut inclure les pilotes nvidia dans la version librement téléchargeable ( GPL ) car pour tous les logiciels inclus dans la version téléchargeable, il faut que les sources soient disponibles ( OpenSource ), or les pilotes NVIDIA n’étant pas Open source, ils ne peuvent être inclus. Si vous achetez la Mandrake, les pilotes seront inclus dans la version commerciale et aussi pour ceux ayant souscrit au Mandrake Club et l’installation sera grandement simplifié, voire même automatique.

– Enfin les pilotes NVIDIA intègrent des extensions spécifiques qui font qu’il ne peut se contenter des interfaces standards du noyau linux et donc il faut les compiler pour le noyau qui va être utilisé. De plus Linus Thorvalds ( le créateur de Linux ) ne voulant pas favoriser l’apparation de modules/drivers closed source, fait qu’il devient problématique d’utiliser un pilote sur un noyau autre que celui pour lequel il a été compilé

Installation

Préparation

REQUIS :
binutils, gcc, ed, kernel-source, glibc-devel

ed, kernel-source, glibc-devel se trouvent sur les CD de la distribution et peuvent être installé via urpmi/rpmdrake.
Vous devez installer la version de kernel-source qui correspond au noyau que vous utiliser !

Installation des sources du noyau ( kernel-source )

on installe ed,binutils et kernel-source. glibc-devel est installé automatiquement lorsque l’on installe kernel-source

# urpmi binutils ed kernel-source

vérification de l’installation des sources du noyau

on vérifie la version de kernel-source, par exemple on peut avoir comme résultat kernel-source-2.4.22-26mdk. ceci signifie que ce sont les sources pour le noyau 2.4.22-16mdk

# rpm -qa | grep kernel-source

vérification de la version du noyau

on vérifie la version du noyau que l’on utilise. Celle-ci doit correspondre à celle du package kernel-source. Par exemple cela devrait donner dans mon cas 2.4.22-26mdk

# uname -r

Note :
Si votre noyau est plus ancien que la version des kernel-source que vous avez, cela signifie que vous avez installé la dernière version des kernel-source de votre distribution et qu’un nouveau noyau est disponible. Ceci arrive si vous avez configuré votre système pour récupérer les mises à jour de sécurité et corrections de bogues via internet. Pour récupérer la dernière version du noyau, il vous suffit alors de l’installer via urpmi.

Pour cela vous tapez soit :# urpmi -p kernelqui vous donnera une liste des noyaux disponible, ou alors pour être sûr, vous taper directement le nom entier du noyau que vous voulez :# urpmi kernel-2.4.22-26mdkPour toujours utiliser la dernière version disponibles des noyaux pour votre système, mettez à jour vos sources updates :
# urpmi.update -aPuis récupérez les dernières version de votre noyau et de kernel-source avec urpmi. Ensuite vous mettez à jour lilo ( si vous l’utiliser ) afin de pouvoir démarrer sur le bon noyau :# /sbin/liloEt vous redémarrez en sélectionnant le bon noyau ( normalement linux devraient point vers le nouveau noyau, mais au pire vous pouvez sélectionner par exemple 2422-26 ). Une fois que vous avez fini de redémarrer, vous pouvez vérifier que c’est correcte avec la commande uname.

1°/ Récupération des drivers :

Télécharger les drivers nvidia sur le site de nvidia. Vous sélectionnez “Graphics Driver” puis “GeForce and TNT2” et enfin “Linux IA32” ( IA32 = Intel Architecture 32 bits, soit les processeurs Intel/AMD/Ciryx/Via 32 bits ). Si vous avez une connexion internet, vous pouvez procéder comme cela en console :

# urpmi wget‹— on install wget qui va nous permettre de télécharger les drivers
# cd /tmp‹— on va télécharger les drivers dans le répertoire /tmp
# wget http://download.nvidia.com/XFree86/Linux-x86/1.0-6111/NVIDIA-Linux-x86-1.0-6111-pkg1.run

2°/ Installation des librairies requises [ obsolète ] :

Note :A partir de la Mandrake 9.2, cette manipulation est inutile et est même déconseillée !!! Les librairies Mesa sont désormais livrés par défaut avec le serveur graphique X.

Il faut installer les librairies Mesa pour le support OpenGL. Pour cela il faut installer les packages libMesaGL1, libMesaGLU1 ( anciennement nommée Mesa-common ) :

# urpmi libMesaGL1 libMesaGLU1

3°/ Installation des drivers :

Arrêt de l’interface graphique

Tout d’abord le mieux est de quiter l’interface graphique, pour cela vous vous délogguez, ensuite vous basculer dans une console ( CTRL+ALT+F1 ), vous vous connectez en tant que root et vous tapez :

# service dm stop‹— permet d’arréter votre gestionnaire de connection ( gdm/kdm/mdkdm/xdm ) et d’arréter XFree

Installation du pilote

On lance le script d’installation qui se trouve dans /tmp

# sh /tmp/NVIDIA-Linux-x86-1.0-6111-pkg1.run

Note 1 : Lorsque vous tapez une commande faites attention à la casse ( respect majuscule/minuscule ). Un bon moyen pour éviter de faire de erreur est d’utiliser la touche TAB pour compléter automatiquement le nom du fichier. Souvent on tape les 3 premières lettre et ensuite on appuies sur TAB.

Note 2 : Si le driver ne dispose pas d’un module précompilé pour votre noyau alors il va essayer d’en compiler un : c’est pourquoi j’ai mis gcc, kernel-source et glibc-devel dans les requis. Cela devrait se passer normalement de manière transparente pour vous.

Note 3 : Si vous avez un message d’erreur concernant le support de rivafb activé et incompatible, vous pouvez l’ignorer. En effet bien que le support de rivafb soit activé dans le noyau, le module n’est pas chargé par défaut, donc il n’y a pas de problème. Si vous voulez vous en assurez, vous pouvez ajouter la ligne suivantes dans le fichier /etc/modprobe.conf ( noyau 2.6 ) ou /etc/modules.conf ( noyau 2.4) : alias rivafb off
Cette ligne empéchera le chargement du module rivafb.

Configuration du serveur graphique ( XFree/Xorg )

Chargement du pilote

Si tout s’est correctement déroulé, Il ne reste plus qu’a configurer XFree pour qu’il prennent en compte ces nouveaux drivers
Il faut d’abord vérifier si les modules sont configurés correctement. Pour cela on va vérifié que le chargement du pilote est configuré dans le fichier de configuration qui contient la liste des pilotes à charger au démarrage.
Sous le noyau 2.4, c’est le fichier /etc/modules.conf, sous le noyau 2.6 c’est le fichier /etc/modprobe.conf :

# grep -i nvidia /etc/modprobe.conf

Vous devriez obtenir la ligne suivante :

alias /dev/nvidia* nvidia

Si elle n’y est pas rajouter la à la fin du fichier /etc/modules.conf ( pour un noyau 2.4 ) ou /etc/modprobe.conf ( noyau 2.6 ). :

# echo “alias /dev/nvidia* nvidia” >> /etc/modules.conf‹— pour un noyau 2.4
# echo “alias /dev/nvidia* nvidia” >> /etc/modprobe.conf‹— pour un noyau 2.6

Note :Une autre solution pour s’assurer que le pilote sera chargé au démarrage est d’ajouter nvidia dans le fichier /etc/modules ( pour un noyau 2.4 ), ou /etc/modprobe.preload pour un noyau 2.6

Activation 3D/support OpenGL

Maintenant il faut modifier le fichier de configuration de XFree à savoir le fichier /etc/X11/XF86Config-4
Dans la section Module , ajouter Load “glx” . Cela devrait donner quelquechose comme cela :

Section “Module”
# This loads the DBE extension module.
Load “dbe”
Load “glx”
# This loads the miscellaneous extensions module, and disables
# initialisation of the XFree86-DGA extension within that module.
SubSection “extmod”
#Option “omit xfree86-dga”
EndSubSection
# This loads the Type1 and FreeType font modules
Load “type1”
Load “freetype”
EndSection

Note : Si vous avez les lignes Load “dri” et Load “GLcore” , vous devez les enlever.

Note 2 : Sous la Mandrake 10.1 avec le passage à Xorg, il faut modifier le fichier /etc/X11/XF86Config ou /etc/X11/xorg.conf

Note 3 : Vous pouvez ajouter la ligne Load “v4l” pour avoir des optimisations matérielles concernant la vidéo. Cependant cette option devra être désactivé si vous revenez aux drivers livré par défaut avec XFree

Activation du pilote

Ensuite remplacer dans la section Devices le driver nv par celui de nvidia nommé nvidia
Vous devrier avoir quelquechose d’approchant :

Section “Device”
Identifier “NVIDIA GeForce 256 (generic)”
VendorName “Unknown”
BoardName “Unknown”
Driver “nvidia”
# VideoRam 4096
# Clock lines
# Uncomment following option if you see a big white block
# instead of the cursor!
# Option “sw_cursor”
Option “DPMS” “on”
EndSection

Vérifications

Chargement de l’interface graphique

Maintenant croisons les doigts et vérifions si tous s’est déroulé sans problême. Tout d’abord il faut relancer le serveur X pour que les changements prennent effet. Il est inutile de rebooter.

# service dm start

Normalement X devrait s’afficher de nouveau normalement.
Si vous vous logguer en mode console, quittez votre session, puis relancer X avec startx.
Il se peut que vous notiez un décalage de votre affichage et que vos polices sont devenus plus grosses. Ceci est due au fait que les drivers n’ont pas un support DCC ( Display Data Channel ) parfait.

Vérification du support OpenGL

Vérifier si le support OpenGL est bien chargé en tapant :

# xdpyinfo | grep GLX

Vous devriez obtenir à peu près cela :

GLX
NV-GLX

Une autre commande pour le vérifier est la suivante :

# glxinfo

Vous devriez obtenir pleins d’informations sur le drivers OpenGL et notamment les différentes extensions supportées.

Vérification que le pilote est bien chargé

Vérifer que le module est bien chargé et ce gràce à la commande lsmod ( list modules ) qui permet de voir la liste des pilotes/modules chargés :

# lsmod | grep nvidia

Si vous passez tous les tests alors vous êtes prêts pour la 3D accélérée sous Linux. Des jeux sont disponibles parmis lesquels Unreal Tournament, UT2003, Quake 3 Arena, Tribes 2, Descent 3, Kohan, Civilisation, NeverWinter Nights … .
Un jeu sympa que je recommande pour passer le temps : chromium.
C’est un shoot’em up en 3D avec des graphiques sympas, supporte le plein écran, mode fenêtre, du 640×480 au 1280×960, les CD audio ou une playlist de mp3, etc…
Il est dispo sur Mandrake 8.x, il suffit d’installer chromium et chromium-setup, puis de lancer chromium-setup pour configurer le jeu et chromium pour lancer le jeu.

# urpmi chromium
# urpmi chromium-setup
# chromium-setup
# chromium

Troubleshootings ( en cas de problèmes )

Si par vous n’arrivez plus à relancer votre serveur X, ne vous inquietez pas. Tout d’abord faites une copie du fichier de log de XFree ( /var/log/XFree86.0.log ), en analysant ce fichier vous pourrer éventuellement trouver la cause la problême. Pour voir son contenu il faut être root. Vous pouvez commencer par copier le fichier dans un répertoire temporaire plus facil d’accès :

# cp /var/log/XFree86.0.log /tmp

Note : Sous la Mandrake 10.1 et ce depuis le passage à Xorg, le fichier de log du serveur graphique se nomme Xorg.0.log et non plus XFree86.0.log.

Ensuite éditer le fichier de configuration de XFree et remplacez dans la section Devices Driver “nvidia” par Driver “nv” ce qui vous permet de remettre l’ancien drivers de XFree.
Ensuite relancer XFree en tapant startx dans la console. Si vous vous logguiez avec kdm/gdm, il faut faudra d’abord basculer sur console pour faire tout cela. Pour cela appuyer en même sur CTRL+ALT+F1 pour basculer sur la première console.
Il existe plusieurs éditeurs de texte qui permettent de modifier des fichiers en mode console, il y a par exemple : vi, emacs, vim, joe, pico, nano, etc …

Lorsque vous êtes a nouveau sous X, ouvrez la copie du fichier de log de XFree que nous avons faites dans un éditeur de texte. Cette copie se trouve normalement dans le répertoire /tmp si vous avez suivi les instructions précédentes : /tmp/XFree86.0.log
Les lignes les plus intéressantes sont les lignes qui commencent par (EE) car elles indiquent qu’il y a eu une erreur lors du chargement de ce paramêtre.

1°/ Toutes les résolutions sont rejetées !

Si par exemple vous remarquez que XFree à refuser toutes vos résolutions d’affichage, alors qu’elles sont correctes avec le drivers de base de XFree, alors le problême vient du support DDC des drivers nvidia. Pour y remédier il suffit de le désactiver en ajoutant dans la section Devices : Option “NoDDC” “true”. Cela donne à peu près :

Section “Device”
Identifier “NVIDIA GeForce 256 (generic)”
VendorName “Unknown”
BoardName “Unknown”
Driver “nvidia”
# VideoRam 4096
# Clock lines
# Uncomment following option if you see a big white block
# instead of the cursor!
# Option “sw_cursor”
Option “DPMS” “on”
Option “NoDDC” “true”
EndSection

Il ne vous reste plus qu’a relancer et X pour voir si X se lance cette fois-ci avec les drivers nvidia. Normalement ca devrait passer. Croisez les doigts.

2°/ Mon système est instable depuis que j’ai installé les drivers nvidia. Notamment il freeze complètement !

Si au cours de vos utilisations vous remarquez que votre système est instable et ce depuis que vous avez mis les drivers nvidia, il serait bon alors de vous penchez vers le support AGP. Par défaut les drivers nvidia utilisent leurs propres drivers pour l’AGP.
Une bonne solution pour remédier aux problêmes d’instabilités est d’utiliser alors le drivers du kernel agpgart ou alors en dernier recours de désactiver l’AGP.
Tout d’abord il faut que le support AGP soit activé dans votre noyau ( section Character Devices ) et cela pour /dev/agpgart et votre chipset de carte mère. Pour le vérifier rapidement faites :

# grep -i AGP /usr/src/linux/.config

Note : Sous Mandrakelinux, un fichier config est placé aussi dans le répertoire /boot, donc vous pouvez faire aussi :grep -i AGP /boot/config

Chez moi ( Mandrake 8.0 avec kernel de base 2.4.3-20mdk non modifié ) cela donne :

CONFIG_AGP=m
CONFIG_AGP_INTEL=y
CONFIG_AGP_I810=y
CONFIG_AGP_VIA=y
CONFIG_AGP_AMD=y
CONFIG_AGP_SIS=y
CONFIG_AGP_ALI=y
CONFIG_AGP_SWORKS=y

Comme j’ai une carte mère avec un chipset Via, j’ai mis en gras les deux options nécessaires dans mon cas.

D’abord nous allons vérifier quel est le drivers agp utilisé par les drivers nvidia. Pour cela il suffit de regarde le contenu de /proc/driver/nvidia/agp/status :

# cat /proc/driver/nvidia/agp/status

Pour utiliser le drivers AGP du kernel Linux, il suffit de préciser dans le fichier de configuration de XFree que nous voulons qu’il utilise agpgart.
Il suffit d’ajouter dans /etc/X11/XF86Config-4 à la section Devices pour le drivers nvidia la ligne suivante : Option “NvAgp” “2” . Cela donne par exemple :

Section “Device”
Identifier “NVIDIA GeForce 256 (generic)”
VendorName “Unknown”
BoardName “Unknown”
Driver “nvidia”
# VideoRam 4096
# Clock lines
# Uncomment following option if you see a big white block
# instead of the cursor!
# Option “sw_cursor”
Option “DPMS” “on”
Option “NvAgp” “2”
EndSection

Si vous mettez 0, il va désactiver le support AGP. Si vous mettez 1, il utilisera le drivers interne de nvidia. Comme nous venon de le voir, 2 signifie qu’il va utliser le drivers du kernel.
Pour des options plus avancées, veuillez consulter README.txt de nvidia. Il contient aussi des infos concernant le support des différents chipset AGP.

Note : Vous pouvez aussi pour ceux qui possède un processeur AMD démarrer votre système avec comme option pour le noyau mem=nopentium. Plus d’infos dans l’Appendice F du README nvidia.

3°/ J’ai upgradé XFree et depuis la 3D ne marche plus.

Cette situation est due au fait que XFree dans ses dernières versions est désormais livrée avec les librairies Mesa. Or celles-ci entrent en conflit avec les libs OpenGL des drivers nvidia. pour régler les problème il suffit de procéder comme lors de l’installation des drivers. Il suffit tout simplement de réinstaller les drivers, ceux-ci devraient faire les nettoyages nécessaires.

4°/ J’ai upgradé mon kernel et depuis XFree ne marche plus

Tout d’abord vous devez vérifier les logs/journaux du serveur graphique. Normalement vous devriez y lire un message d’erreur selon lequel il n’arrive pas charger le module nvidia.
Cette situation est due au fait que le module kernel des drivers nvidia n’a pas été copié dans le nouveau répertoire de modules de votre kernel. Voici une explication rapide.

Le kernel cherche les modules qu’il chargent ( notamment ceux préciser dans /etc/modules.conf ) dans le répertoire /lib/modules/`kernel_version`/kernel/drivers . Par exemple la Mandrake 8.0 utilise par défaut un kernel 2.4.3-20mdk, donc les drivers nvidia sont dans le répertoire /lib/modules/2.4.3-20mdk/kernel/drivers/video .
Si vous passez par exemple au kernel 2.4.9, alors le kernel ira chercher ses modules dans /lib/modules/2.4.9/kernel/drivers .
Comment régler le problème pour les drivers nvidia ? C’est tout simple, il suffit de réinstaller les drivers nvidia et il ajoute le module dans le répertoire de modules du kernel courant.

Mieux on peut demander au drivers d’installer le module/pilote pour une version donnée du noyau avec l’option –kernel-name=’VERSION’, où VERSION désigne la version du noyau telle que la renverrait la commande uname -r :

# sh NVIDIA-Linux-x86-1.0-6111-pkg1.run –kernel-name=’2.6.3-13mdk’‹— installation du pilote pour le noyau de version 2.6.3-13mdk

Pour vérifier il suffit de faire :

# modprobe -l | grep nvidia

Tout devrait marcher impeccablement.

5°/ L’interface met plusieurs minutes à se lancer, voire j’ai un écran noir total !

Cette situation peut être dues à des problèmes au niveau des BIOS de la carte graphique, celle-ci essayant d’activer un deuxième moniteur qui n’existe pas. Si vous avez un seul écran connecté à la carte graphique ( écran CRT ), vous pouvez préciser manuellement que seul un écran CRT est connecté et qu’il n’y a pas d’écran TFT et TV connecté. pour cela il faut ajouter dans la section Devices “ConnectedDevices” “CRT” et “IgnoreDisplayDevices” “DFP, TV”.
Cela donne par exemple :

Section “Device”
Identifier “NVIDIA GeForce 256 (generic)”
VendorName “Unknown”
BoardName “Unknown”
Driver “nvidia”
Option “DPMS” “on”
Option “ConnectedDevices” “CRT”
Option “IgnoreDisplayDevices” “DFP, TV”
EndSection

Note : Vous trouverez plus d’informations à ce propos dans le README des drivers nvidia.

6°/ Les performances 3D sont décevantes ou je n’ai pas le support de l’AGP avec un noyau 2.6

Si l’interface se lance mais que vous avez de mauvaises performances 3D, il se peut que cela vienne du support de l’AGP qui n’est pas configuré correctement. Un symptome est notamment que la DRI ne marche pas. Pour le diagnostiquer, il suffit d’utiliser la commande glxinfo et de chercher la ligne direct rendering. Si jamais la DRI est désactivée, vous aurez la ligne suivante :

direct rendering: No

Pour charger le module qui gère votre port AGP, il faut préciser à linux de charger le pilote AGP au démarrage. Tout d’abord il faut vérifier que la gestion AGP est active ( sous les noyaux 2.6 de la mdk 10.0 le support AGP est sous forme de module ). Il suffit de vérifier dans le fichier de configuration du noyau gràce à la commande grep -i AGP /boot/config ou grep -i AGP /usr/src/linux/.config :

CONFIG_AGP=m
CONFIG_AGP_INTEL=m
CONFIG_AGP_I810=m
CONFIG_AGP_VIA=m
CONFIG_AGP_AMD=m
CONFIG_AGP_SIS=m
CONFIG_AGP_ALI=m
CONFIG_AGP_SWORKS=m

Pour moi qui possède un chipset Via ( Northbridge ), il faut qu’il y ait le support pour mon chipset. Le nom du module qui gère mon chipset est via-agp. Pour voir la liste des pilotes disponibles, il suffit d’utilise la commande modprobe -l qui permet de lister les différents modules disponibles pour le noyau. Nous ne prendrons que ceux dont le nom contient agp :

# modprobe -lt char | grep agp‹— commande qui va lister les différents modules qui gèrent les périphériques de type character ( -t char ), ce qui comprend le port AGP, et pour laquelle on ne récupère que les modules qui contiennent agp dans le nom ( grep -i agp )

Ensuite il suffit de dire au système de charger le module au démarrage de l’ordinateur. Pour cela on préciser le nom du module à charger dans le fichier /etc/modules ( noyau 2.4 ) ou /etc/modprobe.preload ( noyau 2.6 ). On peut le faire, par exemple, avec la commande suivante :

# echo “via-agp” >> /etc/modules‹— pour un noyau 2.4
# echo “via-agp” >> /etc/modprobe.preload‹— pour un noyau 2.6

Ensuite il suffit de redémarrer ou de charger le module directement ( modprobe via-agp ) puis de lancer l’interface

7°/ Comment désinstaller les drivers Nvidia ?

Pour désinstaller les drivers nvidia vous devez d’abord arréter l’interface, puis enlever les fichiers du pilotes avec la commande suivante :

# nvidia-installer –uninstall

Ensuite vous devez faire l’inverse de ce que vous avez pour activer les drivers nvidia. C’est-à-dire remplacer nvidia par nv, virer/désactiver les options spécifiques à nvidia en les commentant.
Par exemple la section device ressemblera à ceci :

Section “Device”
Identifier “NVIDIA GeForce 256 (generic)”
VendorName “Unknown”
BoardName “Unknown”
Driver “nv”
Option “DPMS” “on”
#Option “ConnectedDevices” “CRT”
#Option “IgnoreDisplayDevices” “DFP, TV”
#Option “NvAgp” “2”
EndSection

8°/ Comment mettre à jour les drivers Nvidia ?

pour mettre à jour les pilotes nvidia, il suffit d’appeler le programme nvidia-installer avec l’option –upgrade. Il se connectera au site de nvidia, téléchargera la dernière version des pilotes, les compilera et si tout se passe bien les installera.

# nvidia-installer –upgrade