Chapitre 10. Compiler le noyau

Table des matières
1. La compilation du noyau
1.1. Compilation sans modules externes
1.2. Compilation avec modules externes
2. L'installation du noyau
3. Préparer le chargement automatique des modules
3.1. La carte réseau
3.2. Modem câble USB
3.3. La carte son
4. Redémarrer

Il existe deux méthodes pour compiler un noyau Linux :

La méthode Debian est expliquée ci-dessous, et je vous conseille de l'utiliser car cela permet de garder le coté pratique de la manipulation des paquets.

1. La compilation du noyau

1.1. Compilation sans modules externes

Par "compilation sans modules externes", on entend la compilation d'un noyau sans sources externes aux sources officielles du noyau Linux (i.e. sans sources autres que celles fournies dans l'archive linux-2.6.16.2.tar.bz2).

Maintenant, vous allez donner un nom à votre noyau. Par exemple, vous pouvez adopter la convention suivante : kernel-image-version_du_noyau-nom_de_la_machine_numéro_de_révision, ce qui donne par exemple kernel-image-2.6.16.2-camel_1. Cette notation donnera un paquet Debian nommé kernel-image-2.6.16.2-camel_1_i386.deb.

Lançons la compilation du noyau Linux :


% cd ~/kernel/linux
% fakeroot make-kpkg --append-to-version -camel --revision 1 kernel-image

1 est le numéro de version du noyau (i.e. si c'est la 3ème fois que vous compilez un noyau 2.6.16.2, mettez 3) et où camel est le nom de votre machine.

Il faut alors s'armer de patience, surtout si vous avez un ordinateur peu puissant ! Sur un ordinateur récent, cela prend plusieurs minutes.

1.2. Compilation avec modules externes

Pour des fonctionnalités très particulières ou des drivers de matériels peu répandus, vous aurez peut-être besoin de compiler votre noyau avec des modules externes. On aura alors à ajouter une option à make-kpkg.

On commence par installer les modules externes dans ~/kernel/modules/. On va prendre comme exemple l'installation des modules de SHFS, qui permettent de monter une partition d'une autre machine via SSH.


# apt-get install shfs-source


% cd ~/kernel/
% tar jxvf /usr/src/shfs.tar.bz2
% export MODULE_LOC=~/kernel/modules
% cd linux/
% fakeroot make-kpkg --append-to-version -camel --revision 1 kernel-image
% fakeroot make-kpkg --append-to-version -camel modules-image

1 est le numéro de version du noyau (i.e. si c'est la 3ème fois que vous compilez un noyau 2.6.16.2, mettez 3) et où camel est le nom de votre machine.

2. L'installation du noyau

S'il y a eu aucune erreur, on trouvera un noyau compilé sous la forme d'un paquet Debian dans le répertoire parent. Déplaçez-vous dans le répertoire parent et installez le paquet Debian en root :


% cd ..
# dpkg -i kernel-image-2.6.16.2-camel_1_i386.deb 

kernel-image-2.6.16.2-camel_1_i386.deb est le paquet Debian contenant votre noyau.

Si vous avez compilé un paquet pour des modules externes, il faut alors installer aussi le(s) paquet(s) additionnel(s). Par exemple, pour le module SHFS de l'exemple ci-dessus, il suffit d'installer le paquet additionnel contenant les modules SHFS externes :


# dpkg -i shfs-module-2.6.16.2-camel_0.35-2+1_i386.deb 

3. Préparer le chargement automatique des modules

L'idéal est que les modules du noyau se chargent tout seuls quand on a besoin d'eux. Pour cela, il faut dire au système que quand il veut accéder au périphérique machin il doit charger le module truc. La procédure est d'écrire un fichier de configuration dans le répertoire /etc/modprobe.d/, puis d'exécuter le script update-modules qui va concaténer tous les fichiers de ce répertoire et mettre à jour le fichier de configuration des modules /etc/modprobe.conf.

3.1. La carte réseau

Si vous avez bien suivi mes instructions pour la configuration du noyau, vous avez noté le nom du module de votre carte réseau. Créez un fichier /etc/modprobe.d/reseau et écrivez dans ce fichier la ligne suivante :


alias eth0 nom_du_module

nom_du_module est le nom du module de votre carte réseau, sans l'extension ".ko".

Si le nom n'était pas indiqué dans l'aide associée à l'option de votre carte réseau lors de la configuration du noyau, allez dans le répertoire /lib/modules/numero_de_version_du_noyau/kernel/drivers/net/et regardez les fichiers qui se trouvent dans ce répertoire et dans ses sous-répertoires. Essayez de deviner le module contenant le driver de votre carte réseau (Indice : ce ne sont ni les fichiers mii.ko, slhc.ko et bsd_comp.ko, ni les fichiers dont le nom commence par ppp). Une fois que vous pensez avoir trouvé le module, utilisez la commande modinfo pour avoir des informations sur le module et lisez le champ description.

Note

Exemple :


% modinfo e100.ko

Le champ description confirme que c'est bien le module que l'on cherche :


description:    Intel(R) PRO/100 Network Driver

Le fichier /etc/modprobe.d/reseau devra donc contenir :


alias eth0 e100

Cette ligne signifie tout simplement que quand le système veut accéder au device eth0 (qui correspond à la première carte réseau Ethernet), il doit charger le module e100.

Attention

Si vous avez plusieurs cartes réseau, il faut répéter cette ligne plusieurs fois :


alias eth0 nom_du_module_de_la_carte_réseau_n°1
alias eth1 nom_du_module_de_la_carte_réseau_n°2
alias eth2 nom_du_module_de_la_carte_réseau_n°3

3.2. Modem câble USB

[TODO : Normalement, ça marche tout seul grâce à hotplug... à confirmer !]

3.3. La carte son

Installez les deux packages nécessaires au bon fonctionnement d'ALSA :


# apt-get install alsa-base alsa-utils

4. Redémarrer

Redémarrez sur le nouveau noyau :


# reboot