Debian logo [inetdoc.LINUX]

4. Compilation du noyau LINUX

La construction d'un noyau adapté à ses besoins passe par plusieurs étapes.

  1. Création d'une nouvelle arborescence de sources que l'on pourra modifier à volonté en préservant les sources «originaux».

  2. Configuration du noyau en choisissant le matériel et les fonctions utiles.

4.1. Où placer les sources ?

Dans l'arborescence usuelle du système GNU/Linux, le répertoire de stockage des sources est : /usr/src. À partir d'une connexion super-utilisateur (su ou login root), voici la liste des commandes rituelles après le télechargement des sources du noyau :

# mv linux-2.6.xx.tar.bz2 /usr/src 1
# cd /usr/src
# tar xf linux-2.6.xx.tar.bz2 2
# ln -sf linux-2.6.xx linux 3
# cd linux

1

Copie du fichier tarball dans le répertoire usuel de dépôt des sources de noyau : /usr/src.

2

Extraction de l'arborescence des sources du noyau.

3

Il est possible de conserver plusieurs arborescences de sources de noyaux LINUX. On utilise alors un lien symbolique linux sur le répertoire de l'arborescence de travail.

4.2. Comment configurer le noyau ?

On dispose de trois interfaces utilisateur différentes pour configurer un noyau : mode texte, mode texte avec menus et mode graphique.

  • Le mode texte est réservé aux configurations matérielles minimales et aux nostalgiques des consoles VT100. Il n'est pas très commode à utiliser.

    # cd /usr/src/linux
    # make config
    
  • Le mode texte avec menu est très pratique pour les manipulations à distance sur des serveurs sans interface graphique ni écran ni clavier. Généralement, les opérations de configuration se font via une console sécurisée avec l'outil ssh.

    Il est nécessaire que le paquet des bibliothèques de développement ncurses soit installé sur le système sur lequel on réalise la configuration. On s'assure de l'installation du paquet avec une commande du type : dpkg -l libncurses*-dev |grep ^ii.

    # cd /usr/src/linux
    # make menuconfig
    
  • Le mode graphique n'est pas forcément le plus pratique. Il est nécessaire d'avoir une interface graphique en état de marche ainsi que le paquet des bibliothèques de développement de cette interface. Comme dans le cas précédent, on s'assure de l'installation du paquet avec une commande du type : dpkg -l libqt3*-dev |grep ^ii.

    # cd /usr/src/linux
    # make xconfig
    

Une fois la commande make menuconfig lancée, on accède à la liste principale des options de configuration du noyau LINUX. On s'intéresse plus particulièrement aux options réseau :

Voir la Section 6, « Fonctions réseau du noyau LINUX » pour obtenir les informations nécessaires à l'utilisation des nombreuses options de configuration réseau.

La répartition des fonctions entre les espaces mémoire «noyau» (kernelspace) et «utilisateur» (userspace) une question très importante.

Avec les toutes premières version du noyau LINUX, ajouter de nouvelles fonctionnalités impliquait d'étendre le noyau lui-même. Il fallait, recompiler l'ensemble du noyau à chaque ajout d'un nouveau pilote de matériel. Si ce mode de conception monolithique convient toujours aux systèmes spécialisés avec une faible puissance de calcul, il est de moins en moins utilisé.

La notion de module est apparue avec la série 2.x et cette fonctionnalité permet de corriger ce défaut. Ces modules correspondent à des pilotes que l'on peut charger et décharger dynamiquement en mémoire. Pour pouvoir bénéficier des modules, les fonctions du noyau doivent être compilées avec l'option «module» notée M dans les menus de configuration.

Une fois compilés, les modules sont placés dans un répertoire /lib/modules/2.6.xx grâce à la commande make modules_install. D'autres sous-répertoires seront créés en fonction du choix des catégories. Par exemple, le chemin complet du module de pilotage de la carte RNIS est : /lib/modules/2.6.17-2-686/kernel/drivers/isdn/hisax/hisax.ko.

4.3. Comment compiler le noyau ?

Une fois la phase de configuration terminée, on passe à la compilation proprement dite. Voici une nouvelle liste de commandes rituelles :

# make ; make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.xx
# cp System.map /boot/System.map-2.6.xx

Les caractères 'xx' correspondent à la version courante du noyau LINUX.