Le système d'exploitation GNU-Linux/Le noyau Linux et les modules

Un livre de Wikibooks.

Dans certains cas, on peut être amené à recompiler un noyau Linux :

  • support d'un périphérique (driver)
  • activation d'une option
  • ...

Les sources du noyau Linux sont disponibles sur kernel.org dans le répertoire /pub/linux/kernel/v2.6/.

Les sources doivent être installées dans le répertoire /usr/src et il faut un lien linux vers la version du noyau que l'on désire compiler :

 # cd /usr/src
 # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.9.tar.bz2
 ...
 # tar xjf linux-2.6.23.9.tar.bz2
 # ln -s linux-2.6.23.9 linux
 # cd linux

Si on désire utiliser les mêmes options de compilation du noyau actuel, on copie le fichier /boot/config-2.6.18-5-686 dans le répertoire /usr/src/linux sous le nom .config :

 # cp /boot/config-2.6.18-5-686 .config

Pour lancer la configuration (en mode texte) du noyau, on tape ensuite make menuconfig. Il faut avoir précédement installé la librairie de développement ncurses et de la commande make :

 # apt-get install libncurses5-dev make
 ...
 # make menuconfig

On configure le noyau, on quitte en enregistrant la configuration.

Debian fournit une méthode particulière pour lancer la compilation du noyau. il faut auparavant installer les packet kernel-package. Il faut aussi disposer du compilateur gcc :

 # apt-get install kernel-package gcc
 ...

La procédure Debian consiste à fabriquer un fichier .DEB contenant le noyau et les modules compilés. L'avantage de cette méthode est de faciliter la mise à jour du noyau. De même, elle va automatiquement mettre à jour GRUB ou LILO pour démarrer sur le nouveau noyau.

Si on veut que Debian fabrique le fichier initrd automatiquement, il suffit de l'indiquer dans le fichier de configuration de make-kpkg :

 # echo "do_initrd = YES" >> /etc/kernel-img.conf
Nuvola apps korganizer.png
À faire...
^^^ FAUX A CORRIGER

On lance ensuite la compilation du noyau et des modules :

 # make-kpkg clean
 # make-kpkg -rev custom.1 kernel_image
 ...
 # dpkg -i ../linux-image-2.6.23.9_custom.1_i386.deb

On peut également fabriquer un initrd manuellement, voici la procédure :

 # mkinitramfs -o /boot/initrd.img-2.6.23.9 2.6.23.9

On le rajoute dans /boot/grub/menu.lst :

 title           Debian GNU/Linux, kernel 2.6.23.9
 root            (hd1,0)
 kernel          /vmlinuz-2.6.23.9 root=/dev/hdd2 ro
 initrd          /initrd.img-2.6.23.9
 savedefault


Il ne reste plus qu'à rebooter pour démarrer sur le nouveau noyau.

Si tout c'est bien passé, le système va démarrer sur le nouveau noyau. Sinon, le noyau va s'arrêter sur un kernel panic et il faudra rebooter sur le noyau précédent, reprendre la configuration du noyau, le recompiler (avec un numéro de version différent, comme par exemple custom.2).

On vérifie que l'on a bien démarré sur notre nouveau noyau avec la commande uname :

 # uname -r
 2.6.23.9

Pour plus d'informations sur la compilation d'un noyau selon Debian, on peut consulter le Debian Linux Kernel Handbook.

Sections

[modifier] Modules

[modifier] lsmod

Cette commande permet de visualiser les modules chargés en mémoire.

Syntaxe:

lsmod

[modifier] modinfo

Cette commande permet de visualiser les informations du module comme le nom du créateur, et les options de chargements.

Syntaxe:

modinfo chemin_du_module
Nuvola apps korganizer.png
À faire...

mettre un exemple

[modifier] insmod et modprobe

Bien que ces deux commandes permettent de charger un module, la différence tient du fait que certains modules ont besoins que d'autres modules soient chargés.

insmod tente de charger le module demandé et si celui-ci a besoin d'un autre module pour se charger et que ce dernier ne l'est pas, insmod renvoie un message d'erreur et ne charge pas le module.

Syntaxe:

insmod chemin_du_module

modprobe, lui, charge les modules dépendant au modules avant de lancer celui-ci.

Syntaxe:

modprobe chemin_du_module

[modifier] rmmod

Cette commande décharge le module dont le nom est indiqué. Contrairement aux autres commandes, il ne faut pas lui indiquer le chemin du module, mais son nom tel qu'il apparaît listé par la commande lsmod.

Syntaxe:

rmmod nom_du_module

rmmod décharge le module nom_du_module

[modifier] depmod

Nuvola apps korganizer.png
À faire...

À faire...

Nuvola apps korganizer.png
À faire...

/etc/modules