Linux - Compilazione del nodo (Kernel) Linux -Compilação do núcleo (Kernel)) Linux - Kompilierung des Kerns (Kernel) Linux - Recopilación del núcleo (Kernel) Linux - Compiling the kernel

Compilation du Kernel

Cet article a pour but de présenter la compilation du noyau (ou kernel) sous Linux.
Les explications suivantes sont basées sur la version 2.4.20 du kernel, la dernière en date au moment de l'écriture de l'article (mars 2003). Les sources de la dernière version sont disponibles au téléchargement sur http://www.kernel.org.

Les sources "pèsent" entre 25 et 30 Mo.

Décompresser les sources

Une fois les sources récupérées, vous vous retrouvez avec un fichier tar.bz2 ou tar.gz suivant le cas. Copiez-le dans le répertoire /usr/src/ de votre machine Linux, mais ne le décompressez pas tout de suite.
Dans ce répertoire en question, tapez la commande suivante:

castor@linuxbox:/usr/src$ ls -al
total 8
drwxrwsr-x	2 root	 src		  4096 Feb  8  2002 .
drwxr-xr-x   13 root	 root		 4096 May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:39 linux -> linux-2.4.18
drwxr-sr-x	2 root	 src		  4096 Feb 25 15:38 linux-2.4.18
-rw-r--r--	1 root	 root	 27421046 Feb 25 15:37 linux-2.4.20.tar.bz2
castor@linuxbox:/usr/src$

Le résultat peut différer sur votre machine. La première chose à faire est de supprimer le lien symbolique linux avec la commande rm linux.
Ensuite il s'agit de décompresser le tarball récupéré précédemment. Prévoyez de la place, les sources décompréssées avoisinent les 200 Mo !!
Puis nous créons un lien symbolique linux pointant vers le nouveau répertoire. Suivant le cas, le répertoire dans lequel se trouvent les sources décompréssées s'appelle déjà linux, il convient donc de le renommer avec la commande mv linux linux-2.4.20.

root@linuxbox:/usr/src# rm linux
rm: remove `linux'? y
root@linuxbox:/usr/src# tar -xjf linux-2.4.20.tar.bz2
root@linuxbox:/usr/src# ln -s linux-2.4.20 linux
root@linuxbox:/usr/src# ls -hal
total 27M
drwxrwsr-x	4 root	 src		  4.0k Feb 25 15:49 .
drwxr-xr-x   13 root	 root		 4.0k May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:49 linux -> linux-2.4.20
drwxr-sr-x	2 root	 src		  4.0k Feb 15 15:38 linux-2.4.18
drwxr-xr-x   14 root	 src		  4.0k Nov 29 00:53 linux-2.4.20
-rw-r--r--	1 root	 src		   26M Feb 25 15:37 linux-2.4.20.tar.bz2
root@linuxbox:/usr/src#

Particularité du noyau Linux : Les modules

Le noyau Linux est "modulaire", c'est-à-dire que certaines options, définies comme "modules", ne seront chargées qu'au moment voulu par le noyau. Cela permet d'économiser de la mémoire, au détriment de la rapidité de chargement. Par exemple, si vous imprimez une page tous les six mois, il est inutile de garder en permanence dans la mémoire les pilotes d'impression (port parrallèle, imprimante, etc.). Ceux-ci ne seront chargés que lorsque l'utilisateur voudra imprimer.

Il est donc important avant de s'attaquer à la configuration du kernel de bien connaître l'utilisation que l'on désire faire de la machine sous Linux.

Configuration des options

Il existe trois commandes pour configurer les sources: make config, make menuconfig et make xconfig.

Les deux premières sont en mode texte, la troisième nécessite le système X-window. Le choix vous appartient, les trois sont totalement équivalentes. Seule la première est un peu plus contraignante car elle oblige à passer en revue l'intégralité des options.

En ce qui me concerne, ma préférence se porte sur make menuconfig.

root@linuxbox:/usr/src/linux# make menuconfig
( cd include ; ln -sf asm-i386 asm)
make -C scripts/lxdialog all
make[1]: Entering directory `/usr/src/linux-2.4.20/scripts/lxdialog'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o checklist.o checklist.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o menubox.o menubox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o textbox.o textbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o yesno.o yesno.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o inputbox.o inputbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o util.o util.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o lxdialog.o lxdialog.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o msgbox.o msgbox.c
gcc -o lxdialog checklist.o menubox.o textbox.o yesno.o inputbox.o util.o lxdialog.o msgbox.o -lncurses
...

A ce moment là nous nous trouvons dans l'interface de configuration.
Elle se décompose en divers menus, chacun pouvant à nouveau contenir des sous-menus, etc.

Il est fortement conseillé de lire l'aide en ligne pour chaque option.
Les indications qui suivent peuvent varier suivant la version du kernel et les options choisies précédement.

  • Code maturity level options : Inutile sauf pour les développeurs.
  • Loadable module support : Indispensable. Permet l'utilisation des fonctionnalités modulaires du kernel. Répondez OUI à toutes les options.
  • Processor type and features : Ensemble d'options relatives au processeur. La première ligne contient le type de votre processeur. Il y a compatibilité ascendante, c'est-à-dire que si vous entrez "Pentium-Classic" tous les processeurs de type pentium et supérieur pourront fonctionner. Il est conseillé de mettre le type le plus proche de votre processeur.
  • Machine Check Exception : Permet au processeur d'alerter le kernel en cas de problème. Répondez OUI.
  • Toshiba Laptop support et Dell laptop support : Répondez OUI si vous possédez un portable Toshiba ou Dell.
  • /dev/cpu/microcode - Intel IA32 CPU microcode support
    /dev/cpu/*/msr - Model-specific register support
    /dev/cpu/*/cpuid - CPU information support 
    Ces trois options peuvent être mises sans danger, elles peuvent optimiser la gestion du processeur.
  • High Memory Support : Gestion de plus de 1 Go de RAM. Si votre machine ne possède pas plus de 960 Mo de RAM, laissez "off".
  • Math emulation : Emulation de coprocesseur. Utile uniquement pour un 386 ou 486SX.
  • MTRR (Memory Type Range Register) support : Utile sauf pour les 386, 486 et Pentium premiere génération (avant le PII).
  • Symetric multi-processing support : Utile pour les machines multi-processeurs. A enlever sur les machines mono-processeur.
  • Local APIC support on uniprocessors (NEW) : Permet d'utiliser des interruptions "virtuelles" générées par le processeur. Dans le doute, répondez OUI IO-APIC support on uniprocessors : Idem mais pour les I/O (entrées/sorties). Dans le doute, répondez OUI
  • Unsynced TSC support : gestion des TSC asynchrone. En cas de doute, répondez NON.
  • General setup
  • Networking support : Support du réseau. Répondez OUI car certains programmes utilisent cette fonction même sur une machine isolée.
  • PCI support : Support du BUS PCI. Répondez OUI car vous avez 99% de chances d'avoir au moins une carte sur ce bus, sauf pour de très vieilles machines.
  • PCI access mode : Type d'accès au bus PCI. Les options sont "BIOS", "direct" ou "any". Choisissez "any" et le kernel tentera l'accès par les deux méthodes (conseillé).
  • ISA bus support : Suport pour le bus ISA. Sur les machines récentes il est inutile. Dnas le doute, répondez OUI.
  • PCI device name database : Base de noms de périphériques PCI. Ne répondez NON que pour les systèmes embarqués, qui nécessitent des kernels de taille très réduite.
  • EISA support : Support du bus EISA. Même chose que pour le bus ISA
  • MCA support : Support du BUS MCA (MicroChannel). Uniquement pour les IBM PS/2.
  • Support for hot-pluggable devices : Support pour les périphériques hot-plugs (PCMCIA, USB, etc...).
  • PCMCIA/CardBus support : Support pour les cartes PCMCIA. Activez le en cas de besoin.
  • PCI Hotplug Support : Support pour périphériques hotplugs du port PCI. Idem.
  • System V IPC : Inter Process Communication, librairies utilisée par certains programmes. Répondez OUI.
  • BSD Process Accounting : Permet d'avoir des informations sur les processus au niveau utilisateur. Peut-être utile a des fins de surveillance par exemple. Répondez OUI.
  • Sysctl support : Permet de modifier certains flags "à la volée". Répondez OUI.
  • Kernel core (/proc/kcore) format : type de binaire généré (ELF/A.OUT). Laissez la valeur ELF.
  • Kernel support for xxxx binaries : les divers types de binaires que le kernel pourra exécuter. Mettez les en inclus ou en module, au choix.
  • Power Management support : Gestion APM et ACPI. Il faut répondre OUI ici puis choisir en dessous le type de support (les choix dépendent de votre type de processeur).
  • Ignore USER SUSPEND (NEW) : Sur les machines avec un BIOS APM, NON est un bon choix. Sur certains portables un BIOS buggé vous obligera a répondre OUI.i
  • Enable PM at boot time (NEW) : Ne répondez NON que si votre machine plante au démarrage.
  • Make CPU Idle calls when idle (NEW) : Sur certaines machine, permets de ralentir le processeur en cas de non activité. OUI est un bon choix.
  • Enable console blanking using APM (NEW) : Permet d'éteindre l'écran lors des sessions sous consoles.
  • RTC stores time in GMT (NEW) : Si vous utilisez un autre OS sur la même machine, répondez NON. Dans le cas contraire, OUI est un bon choix.
  • Allow interrupts during APM BIOS calls (NEW) : Ne mettez OUI que si votre linuxbox plante pendant les mises en veille.
  • Use real mode APM BIOS call to power off (NEW) : Répondez OUI si au lieu de s'éteindre votre PC plante.
    Memory Technology Devices (MTD) : N'activez cette option que si vous utilisez des périphériques tels que les mémoires FLASH. Cela permet au kernel de les identifier correctement..
  • Parallel port support : Permet la prise en charge du port parallèle.
  • PC-style hardware (NEW) : Option pour tous les PC.
  • Support foreign hardware (NEW) : Permet d'activer la prise en charge de périphériques "exotiques".
  • IEEE 1284 transfer modes (NEW) : Gestion des modes de transferts évolués (EPP et ECP).
  • Plug and Play configuration : Il s'agit du support pour les périphériques "plug and play". Il est décomposé en Plug and Play support et ISA Plug and Play support, le deuxième choix n'étant possile que si le premier est activé.
  • Block devices : On arrive dans une section importante. Les "bloc devices" ou périphériques en mode bloc représentent la majorité des périphériques de stockages, tels les disques durs et autres disquettes. Les données sont stockées par blocs dont la taille peut varier suivant le support mais qui est fixe pour un support donné.
  • Normal floppy disk support : Support pour le lecteur de disquettes.
  • XT hard disk support : Support pour les vieux disques durs 8 bits.
  • Loopback device support : support pour le périphérique de loopback, utile par exemple pour "monter" une image ISO9660 avant de la graver, pour la vérifier.
  • Network block device support : Permet d'utiliser des périphériques réseau comme si ils étaient locaux.
  • RAM disk support : Permet de créer un RAMdisk, qui est un disque virtuel en RAM, de taille Default RAM disk size. Utile principalement pour les machines n'ayant pas de périphérique de stockage (thin client).
  • Per partition statistics in /proc/partitions : Permet de sauvegarder des statistiques sur vos partitions. Utile uniquement à des fins d'optimisation de votre système. Les autres options sont spécifiques à un type de matériel. Voir l'aide en ligne pour de plus amples informations.
  • Multi-device support (RAID and LVM) : Support pour le RAID et le LVM (Logical Volume Manager). Chaque option peut être sélectionnée séparément (RAID Lineaire, RAID-0 (striping), RAID-1 (mirroring), RAID-4/RAID-5). Il est inutile de les activer, sauf bien entendu si votre matériel utilise du RAID. ################################### FIN DE MISE EN PAGE CORRECTE #################################
  • Networking Options : On arrive ici dans le domaine de prédilection du système GNU/Linux, c'est-à-dire le réseau.Dans cette section, il va être possible d'inclure de nombreux outils plus ou moins utiles.
  • Packet Socket: Cette option permet à certains programmes de discuter directement avec les différents périphériques réseau installés sur le système. Par exemple, l'utilitaire TCPDump nécessite cette option.
  • Packet socket: mmapped IO : Cette option permet au Packet Socket d'utiliser une méthode d'entrée/sortie beaucoup plus rapide. Cette option n'est pas essentielle.
  • Netlink device emulation : Cette option n'est là qu'à des fins de rétrocompatibilité avec des programmes devant utiliser certains périphériques bien spéciaux. Elle est amenée à disparaître dans un futur plus ou moins proche. Il vaut mieux l'activer, ne serait-ce qu'en module.
  • Network packet filtering : Cette option est très importante. Elle remplace l'ancienne option ipchains des noyaux 2.2 et antérieurs. Il s'agit du coeur des fonctions de filtrage de paquet de Linux, utilisées à l'aide de l'utilitaire iptables. Cette option est à cocher sans aucune hésitation.
  • Network packet filtering debugging : Celle-ci en revanche n'interressera que les personnes souhaitant s'investir dans le développement du module NetFilter.
  • Socket Filtering : Permet de filtrer tout type de sockets, hormis les sockets TCP. Cette option est obligatoire pour pouvoir utiliser l'option de filtrage ppp. Dans tous les autres cas, NON est un bon choix.
  • Unix domain sockets : Cette option active le support pour les sockets, qui sont un moyen de connection réseau. De très nombreux programmes les utilisent, même si votre machine est isolée. On peut éventuellement la compiler en tant que module, mais c'est fortement déconseillé. Répondez OUI.
  • TCP/IP networking : Prise en charge du protocole TCP/IP. Répondez OUI même si votre machine est totalement isolée.