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



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 tous les outils de compilation :

 # apt-get install libncurses5-dev build-essential

On installe ensuite kernel-package qui contient les outils Debian permettant de fabriquer un packet .deb contenant le noyau Linux, les modules, le initrd et un script configurant Grub pour booter sur le nouveau noyau (cf explications ci-dessous) :

 # apt-get install kernel-package

On lance ensuite la configuration du noyau via make menuconfig :

 # 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 le packet kernel-package.

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 avec l'option --initrd de make-kpkg.

On lance la compilation du noyau et des modules avec la commande make-kpkg :

 # make-kpkg clean

 # make-kpkg --initrd --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.

Modules modifier

lsmod modifier

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

Syntaxe:

lsmod

modinfo modifier

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
À faire... 

mettre un exemple

insmod et modprobe modifier

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

rmmod modifier

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

depmod modifier

À faire... 

À faire...

À faire... 

/etc/modules