DKMS
Un article de Wiki de la communauté Mandriva.
Sommaire |
[modifier] But de DKMS
Un pilote est un programme binaire qui sera utilisé par le noyau Linux pour supporter un matériel particulier. Le pilote et le noyau sont donc étroitement liés : le pilote a besoin de certaines variables et certaines fonctions dans le noyau. Le noyau, de son côté, doit savoir quand et comment charger un pilote. Ce lien étroit entre le noyau et le pilote empêche un pilote binaire (aussi appelé module) de fonctionner sur plusieurs versions de noyaux. Il est donc nécessaire, à chaque changement de noyau, de recompiler le pilote en question.
La plupart des pilotes sont directement intégrés au noyau Linux et donc, sont compilés dès que le noyau est lui-même compilé. Les distributions Linux telles que Mandriva fournissent un paquetage « noyau » comprenant le noyau et un ensemble de ces pilotes compilés ensemble, de manière à ce que l'utilisateur n'ait rien à effectuer (sauf installer le paquetage « noyau »).
Or, certains pilotes ne sont pas intégrés au noyau Linux et ont des cadences de sortie différentes. Il est donc intéressant de pouvoir mettre à jour ces pilotes sans mettre à jour le noyau et inversement, pouvoir mettre à jour le noyau sans changer de version de pilote. Auparavant, pour réaliser cela, il fallait recompiler soi-même les pilotes lorsqu'ils étaient mis à jour et aussi lors de la mise à jour du noyau (vous trouverez, par exemple, beaucoup d'articles sur la compilation du module NVidia).
Désormais, DKMS effectue cette recompilation des pilotes « tiers » (non intégrés au noyau) automatiquement. Il apporte donc une grande facilité de mise à jour du noyau Linux ou des pilotes.
[modifier] Le système DKMS source
Les DKMS sources ont été les premiers introduits. Ils ont besoin, pour fonctionner, de trois choses :
- Les sources du noyau Linux (paquetage kernel-source).
- Les sources du pilote à compiler (paquetage dkms-XX où XX est le nom du pilote : nvidia, ati, ou autre.
- Le programme DKMS lui-même (paquetages dkms et dkms-minimal).
Comme indiqué plus-haut, le pilote est étroitement lié au noyau. Il est donc nécessaire de compiler le pilote avec les sources du noyau qui est utilisé , sinon, le chargement du pilote échouera et le matériel ne pourra pas être pris en charge par le noyau.
En particulier, si vous utilisez les pilotes propriétaires NVIDIA ou ATI sur votre système (ou n'importe quel autre pilote dans un paquetage autre que le noyau Linux, par exemple le pilote gspca pour les caméras USB), veillez à toujours mettre à jour aussi le paquetage kernel-source-stripped ou kernel-source de façon à posséder sur le système les sources qui correspondant à la version du noyau qui est utilisée. Si vous ne le faites pas, le matériel pris en charge par le pilote risque de ne pas fonctionner avec Mandriva Linux dès que vous redémarrez votre système et sélectionnez le nouveau noyau (le nouveau noyau est le choix par défaut lors du redémarrage). Ainsi, une conséquence est que vous pourriez vous retrouver en mode texte, sans écran de connexion graphique. Pour ATI et NVidia, vous trouverez plus de précisions pour Mandriva Linux 2007 Spring sur le Mandriva Linux 2007 Spring Errata).
Pour connaitre les noyaux et les sources installées sur votre système, utilisez la commande rpm -qa | grep ^kernel | grep -v latest. Il est important que pour chaque version du noyau, vous possédiez la source avec le même numéro de version. Dans la nomenclature officielle du noyau Mandriva Linux, le numéro de version est un ensemble de 4 nombres dont les deux premiers sont 2.6 (ou 2.4 pour les vieux noyaux) et le dernier nombre est suivi de mdv ou mdk. Cette convention n'est pas suivie par les noyaux alternatifs (tmb, multimedia, etc...) mais il est assez aisé de trouver le numéro de version pour ces noyaux.
[modifier] Modules DKMS binaire
Depuis la Mandriva 2008, en plus des paquetages dkms traditionnels appelés aussi "dkms source", apparaissent les paquetages dkms binaires. Ce sont des paquetages dkms qui sont compilés non plus par votre machine, mais par Mandriva et le résultat est empaqueté et publié sur les miroirs.
Dans les sources Mandriva, ces paquetages dkms binaires se nomment XX-kernel-... où XX est le nom d'un pilote. Il s'agit de paquetages statiques composés d'un module lié à une version particulière de noyau. Ces paquetages ont comme avantage de fonctionner d'emblée car il n'y a rien à compiler avant d'utiliser directement le module. En plus, comme le module a été pré-construit, il n'y a pas besoin des sources du noyau (ce qui représente quand même un gros paquetage).
Si vous désirez mettre à jour le noyau linux, il vous faudra aussi mettre à jour ces paquetages pour que leur version corresponde à la version du noyau. Cela se fera par le biais de paquetages "-latest" : si vous installez le paquetage XX-kernel-...latest, vous aurez en permanence les modules qui correspondent à la dernière version du noyau (ainsi que les précédentes versions : elles ne sont pas supprimées). Comme le noyau utilise aussi ce système "-latest", vous pourrez mettre à jour votre noyau et vos pilotes simultanément, sans nécessiter l'installation des outils de compilation et des sources du noyau.
On pourrait se dire que les DKMS binaires sont la réponse à tous les problèmes, mais ils comportent un certain nombre d'inconvénient, le plus gros étant qu'ils peuvent entrer en conflit avec les DKMS source. Ils peuvent aussi entrer en conflit entre eux. Ce qui pose des problèmes lors de la mise à jour du noyau encore plus complexes que ceux que l'on a avec les DKMS source. Enfin, la sortie d'un nouveau noyau doit être précédé de la sortie de tous les modules DKMS binaires correspondant, sinon le nouveau noyau pourrait se retrouver utilisé sans que les modules correspondants ait été installés, ce qui pose des problèmes complexes de synchronisation au niveau des mirroirs et du système de construction des paquets Mandriva.
Depuis la 2008 Spring, des changements sont intervenus afin de pouvoir utiliser les deux systèmes indépendamment, sans conflit. Un ordre de priorité a été défini comme suit :
- Les modules installés avec le système dkms source ont la plus forte priorité
- Les modules dkms binaires ont une priorité plus faible
- Les modules qui viennent avec le paquetage « noyau » ont la plus faible priorité
[modifier] Alternative au système DKMS
Comme autre alternative, il vous est possible de compiler vous-même le pilote avec ses sources et les sources du noyau Linux que vous aurez préalablement installées. Vous trouverez généralement la documentation sur la manière de compiler un pilote sur le site qui fournit le pilote. Pour les modules les plus connus (ati et nvidia) vous trouverez aussi plusieurs tutoriels sur l'Internet. Cette méthode n'est toutefois pas recommandé, en particulier si vous mettez à jour le noyau : le système DKMS tentera de sauvegarder vos modules, ce qui n'est pas le cas si vous faîtes tout manuellement et vous pourriez vous retrouver sans support du matériel pour lequel vous avez compilé le module lors du prochain upgrade du noyau, si vous ne réalisez pas certaines tâches préparatoires.
[modifier] Problèmes avec DKMS
Comme indiqué plus haut, l'erreur la plus fréquente avec DKMS source est de ne pas installer les sources correspondant au noyau utilisé (ce à quoi il faut faire particulièrement attention lors de la mise à jour de son noyau).
Si vous faites cette erreur, après avoir mis à jour votre noyau et redémarré, vous verrez un ensemble d'erreurs d'installation de pilotes au démarrage de la machine comme slmodem, madwifi, ati, nvidia, ... Tant qu'il n'a pas compilé un module avec succès, DKMS réessaie de le compiler à chaque démarrage de la machine. Cela ralentira donc le chargement de Mandriva Linux et vous verrez apparaître des points ('.') qui indiquent qu'une compilation de pilotes est en cours.
À partir de Mandriva 2007 Spring, si on utilise dkms source, il est recommandé d'installer deux paquetages kernel-latest et kernel-source-latest. Ainsi, lorsque vous mettez à jour Mandriva avec MandrivaUpdate, vous aurez l'opportunité d'installer le dernier noyau ainsi que les sources correspondantes. Plus d'informations sur cette fonctionnalité sont disponibles sur les pages relatives à la mise à jour du noyau et dans les notes de version.
Dans la Mandriva 2008.0, des conflits entre les dkms source et binaires peuvent apparaitre, ainsi que des conflits entre les binaires eux-même. Dans ce cas, vous verrez au démarrage un message du style "Multiple versions in DKMS. Unsure what to do. Resolve manually.". La résolution de ce genre de problème se fait en deux étapes : d'abord supprimer les paquetages dkms inutilisés, puis supprimer les modules dkms inutilisés. La première étape peut se faire via drakrpm-remove quant à la seconde, il faut utiliser la ligne de commande dkms : dkms status donnera la liste des modules dkms et leur noyau associé; dkms remove vous permettra de supprimer les modules qui rentrent en conflit, afin qu'il n'en reste qu'un.
Dans la Mandriva 2008 Spring, il ne devrait plus y avoir de conflits, les dkms binaires étant séparés des dkms sources. La ligne de commande dkms possède une nouvelle option --binary qui permet de traiter les modules dkms binaires (ont ne peut que les ajouter ou supprimer, pas les recompiler).
Cas spécifique des kernel tmb : par exemple si kernel-tmb-desktop-2.6.22.6-2mdv-1-1mdv2007.1.i586 est installé, il faut ajouter kernel-tmb-desktop-devel-2.6.22.6-2mdv-1-1mdv2007.1.i586 (la notion de -latest existe aussi).