Il existe deux méthodes pour compiler un noyau Linux :
la méthode générique, qui peut être utilisée pour toutes les distributions, y compris Debian ;
la méthode spécifique à Debian, qui consiste à créer un package contenant le noyau puis à l'installer. Cette méthode a l'avantage de pouvoir facilement compiler le noyau sur une machine pour l'installer sur une autre et de pouvoir gérer le noyau comme n'importe quel paquet Debian, sans créer une exception.
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.
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 |
où 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.
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 |
où 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.
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 |
où 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 |
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.
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 |
où 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.
Exemple :
Le champ description confirme que c'est bien le module que l'on cherche :
Le fichier /etc/modprobe.d/reseau devra donc contenir :
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. |
Si vous avez plusieurs cartes réseau, il faut répéter cette ligne plusieurs fois :
|
[TODO : Normalement, ça marche tout seul grâce à hotplug... à confirmer !]
Installez les deux packages nécessaires au bon fonctionnement d'ALSA :
# apt-get install alsa-base alsa-utils |
Redémarrez sur le nouveau noyau :
# reboot |
Si le redémarrage sur le nouveau noyau se passe mal et que votre Linux se bloque au démarrage, il va falloir redémarrer sur votre ancien noyau. Pour cela, faites Ctrl-Alt-Suppr, puis quand le menu de Grub s'affiche, sélectionnez votre ancien noyau. Vous n'avez plus qu'à recompiler un nouveau noyau... en vous aidant des dernières lignes qu'il vous a affiché avant de se bloquer au démarrage pour essayer de trouver l'origine du problème et changer la configuration du noyau en conséquence. Bonne chance !
Si le redémarrage s'est bien passé... félicitation, vous avez réussi l'une des étapes les plus difficiles !
Précédent | Sommaire | Suivant |
Configuration du noyau Linux | Niveau supérieur | Tirer parti du nouveau noyau - 1 |