Webmail Espace privé About
Home   Debian Addict Testing

Le noyau Linux

samedi 8 octobre 2005.
 

« Et voilà, je branche mon nouveau joystick et il ne marche pas ! Pourquoi est ce qu’il y a des modules pour du matériel et pas pour d’autre ? Et d’abord, c’est quoi un module ? On ne m’explique jamais rien à moi ! »

Voilà une source de pépins énorme : la méconnaissance du noyau. La connaissance de son utilisation, de son rôle et de son fonctionnement vous aidera à y voir clair dans tout ces petits tracas !

Il était une fois...

Tout le monde connaît l’histoire :

En 1991, un jeune étudiant de l’université de Helsinki laisse un message à la communauté expliquant qu’il travail sur un système reprenant le fonctionnement de Minix...

Qu’est-ce que le noyau Linux ? Tout de suite vous pensez que c’est le coeur du système d’exploitation Linux. Vous n’avez pas tout à fait tord. En réalité, le noyau Linux est Linux ! L’amalgame souvent fait par les débutants est de penser que la distribution Linux est Linux. Ils pensent qu’ils trouveront toujours une base logicielle identique même en changeant de distribution. Ce qui est faux en réalité (toutes les distributions ne sont pas conformes LSB). En effet, l’encadrement logiciel (KDE, Gnome, ESD et autres) font partie de la “distribution Linux” et non de Linux. Ce que toutes les distributions Linux ont en commun, c’est uniquement le noyau Linux.

Voilà , une fois cet éclaircissement fait, il me faut passer à l’essentiel.

Que fait le noyau ?

Disons que l’aboutissement de chaque composant de votre ordinateur est l’interaction de celui-ci avec vous ou avec un autre composant de la machine. Néanmoins, il faut une sorte de chef d’ orchestre afin que tout le monde s’entende et joue uniformément. Voilà un des rôles du noyau : orchestrer le fonctionnement matériel de votre ordinateur. Seulement, dans un ordinateur, il y a l’aspect matériel et l’aspect logiciel. Le noyau ne permet pas de compiler (créer un exécutable à partir d’un code source) mais fournit les librairies de base pour permettre au programme de l’utiliser. Pour le travail de compilation, Linus Torvalds a inclus, en plus du Bash, le compilateur GNU/GCC permettant d’ écrire des interfaces utilisateurs plus accessibles, des outils et réaliser des portages d’autres programmes GNU et cela dès sa première diffusion (il faut comprendre que diffuser un noyau sans compilateur n’aurait pas été très utile).

Qu’ est-ce que le Noyau ?

Regardons de plus près cette belle mécanique. Le noyau se trouve dans le /boot de votre machine. Lorsqu’on liste le contenu de ce répertoire on y trouve bien le noyau (souvent vmlinuz-2.X.X-X-... ) mais aussi d’autres fichiers...

(Mais par ou commencer pour que ce soit claire... Par l’initialisation tiens !)

Le initrd est un petit fichier qui sert à créer un RAMDisk... ouais bon Ok, c’est pas clair. En fait, imaginons que votre machine ait un disque dur exotique. Le lancement de Linux ne pourra se faire que lorsque l’accès à ce disque sera possible mais l’accès à celui-ci ne sera possible que lorsque le système aura commencé à démarrer. Le serpent qui se mort la queue ! Du coup, il faudrait avoir un petit espace pour démarrer le noyau et après on prendra le relais avec le disque dur exotique (ex. SCSI sans Bios) car il sera alors accessible. Voilà ce que fait le initrd : il initialise une petite surface sur la mémoire pour permettre le démarrage de votre Linux.

Le config-2.X.X-X-i386 ou 686, etc... revêt un aspect pratique indéniable pour nous les utilisateurs ! Imaginez qu’il ne vous manque qu’un module qui n’aurait pas été fourni sur le noyau que vous utilisez. Vous démarrez la configuration et, n’étant pas professionnel, vous ne savez pas si vous avez besoin d’une gestion NFS native ou d’autres options incompréhensibles. Du coup, vous vous perdez dans les options lors de la configuration et vous abandonnez. STOP ! Il suffit tout simplement d’utiliser le fichier /boot/config pour présélectionner les options. En effet, celui-ci contient toutes les options actuellement sélectionnées dans votre noyau. Par exemple, lorsque vous taperez make menuconfig vous n’aurez qu’à choisir l’option tout en bas de la liste « Load an Alternate Configuration File » et spécifier le fichier /boot/config2.X.X-X-... de votre installation et il ne vous restera plus qu’à compléter avec l’option qui vous manquait. Pensez néanmoins à sauvegarder la configuration dans le répertoire des sources du noyau que vous souhaitez compiler (dans le fichier .config).

System.map est un peu plus compliqué, il se peut que vous ne compreniez d’ailleurs pas si vous n’avez pas de bonnes notions en programmation. En réalité, il pourrait être considéré comme utile uniquement au programmeur qui debug. Il est créé lors de la compilation du noyau et fait le lien entre une adresse mémoire et un symbole donné. Mais pourquoi faire ? Et bien pour expliquer cela, il vous faut comprendre que lorsque le noyau est compilé, il enregistre des fonctions, des variables et bien d’autre informations à des adresses mémoires changeantes selon les ordinateurs. Du coup, lorsque celui-ci indique un “Oops” à l’adresse 0x0c54b48c, il est impossible de savoir d’où vient l’erreur. Ce que permet le System.map est de faire le lien entre l’adresse du bug et son symbole. Par exemple si l’adresse données par le “Oops” était :

32b89232

, en fouillant dans mon system.map j’y trouverais :

...
32723469 A __crc_qdisc_new_estimator
328a05f1 A __crc_strncpy
32b89232 A __crc_create_empty_buffers
32e60cde A __crc_get_sb_nodev
...

, cela voudrait dire qu’il y aurait un problème avec l’allocation d’une zone de mémoire tampon vide.

NB. : Les “Oops” pourraient être considérés comme des indications de petits bugs dans le noyau, comme un pilote audio qui plante.

Un noyau c’est bien... modulaire c’est mieux

C’est vrai, il y a trois options lors du choix de la configuration du noyau. Soit on intègre au noyau l’option, soit on ne la compile même pas, soit on la compile sous forme de module. Dans le cas ou elle est intégrée au noyau la fonctionnalité sera toujours disponible et/ou active. Dans le cas de module, elle est laissée à disposition pour être chargée si nécessaire. Sur des systèmes fixes (ex. serveur Web), les modules seront peu nombreux (voir absent) car ils ne seront jamais utilisés, mais sur des configurations personnelles, soumises aux changements (insertion de clef USB, changement de système son...) cette modularité permet de ne pas surcharger le noyau et de lui conserver toute sa diversité. Voilà, on peut définir un module comme un greffon de fonctionnalité au noyau même.

Comment savoir quand il me faut compiler mon noyau ?

Nous voilà dans l’un des points qui rend Linux si impressionnant !

Dans les cas complexes (très souvent réseau car c’est son domaine de prédilection) vous aurez à créer un noyau qui s’adapte à vos besoin, sans options superflues (les serveurs Web ne chargent pas le module joystick... si si, je vous jure ) fiable et efficace. C’est là que réside toute la force du noyau Linux, là ou les autres système sont immuables, Linux se comporte en... pâte à modeler !

Imaginons que vous soyez un producteur de téléphone ou encore un concepteur automobile. Rien ne vous sert d’avoir une gestion de disque dur. Sans perte de stabilité, vous pouvez tout simplement retirer cette gestion au noyau lors de la configuration pour vous retrouver avec un noyau rapide, léger, robuste et surtout adapté à son environnement.

Mais en ce qui concerne l’utilisateur dont le joystick refuse de se configurer, ou encore lorsque celui-ci lance le démon de son (ESD, ARTs...) et qu’il lui répond un bon vieux “/dev/dsp not found !” et bien là encore c’est le moment de compiler votre noyau. Vous lui rajouterez l’option qu’il lui manquait (la gestion de joystick par exemple) et vous vous lancerez dans sa (longue) compilation.

La procédure

Afin de savoir quel module est nécessaire, il faudra utiliser les commandes lspci (liste les composants utilisant le bus PCI - pas forcément des cartes) ou lsusb (liste des composants USB) afin de déterminer le matériel présent dans votre machine. Une fois cela fait, tentez d’identifier le matériel qui est en défaut. Dans le cas de problème de carte son, vous devrez chercher quelques chose ressemblant à cela :

Multimedia audio controller: ...

Aujourd’hui, Linux détecte automatiquement votre matériel à l’installation et active les modules correspondants. Mais si votre matériel n’est pas reconnu à l’installation ou encore que vous en rajoutiez après, il vous sera nécessaire de l’activer. Avant de vous lancer dans la compilation, il est possible que le pilote correspondant à ce matériel soit existant sous forme de module. Dès lors vous n’aurez qu’à le charger et ajouter une ligne avec le nom du module (sans l’extension .o ou .ko) au fichier /etc/modules pour qu’il se lance au démarrage. Afin de lister les modules disponibles il vous suffit de taper la commande suivante :

/sbin/modprobe -l | grep sound

modprobe -l listant tous les modules disponibles (des dizaines et des dizaines de ligne), le supplément | grep sound limite l’affichage aux seules lignes contenants sound, ce qui vous permet de voir la liste des modules ayant un lien étroit avec l’audio. Lorsque vous aurez trouvé le module correspondant, chargez le (en root) en avec la ligne de commande ci-dessous :

modprobe nom_du_module_sans_lextension_ko_ou_o

Et votre matériel se mettra en marche (sans avoir à redémarrer d’ailleurs). Dans le cas où le module ne conviendrait pas, vous pouvez le décharger avec l’option -r :

modprobe -r nom_du_module_sans_lextension_ko_ou_o

Dans le cas où vous ne trouvez pas le module que vous recherchez, alors vous pouvez vous lancer dans la compilation de votre noyau. Pensez à reconstruire la sélection de module en chargeant le /boot/config-2.X.X... de votre noyau actuel.

Et nous simple mortel dans tout ça ?

Bien sûr, le fonctionnement, la compilation, la sélection des différents modules du noyau peuvent vous sembler quelques peu complexe. C’est vrai ; très peu d’utilisateur Linux développeront pour le système GNU, encore moins s’attaqueront à la “science” du noyau Linux même. Et bien justement, les développeurs Linux le savent et à force d’amélioration, il est maintenant (très) simple de compiler un noyau Linux car, en déformant un vieux slogan oublié : “la technologie ne vaut que si elle est partagé par tous”.

« Linux n’a pas été commencé comme une rebellion contre “l’empire du mal Microsoft”. Je ne l’ai pas sorti pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire. »

Linus Torvalds, The New York Times

sources :

Peter’s Linux Notes


Signatures: 0
Date Nom Message

Forum

Vous pouvez participer à la vie de ce site et proposer vos propres articles en vous inscrivant ci-dessous. Vous recevrez immédiatement un email vous indiquant vos codes d'accès à l'espace privé du site.

Identifiants personnels

Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.

Des mêmes auteurs