« Compiler le noyau » : différence entre les versions
m (maj des liens vers doc lilo, grub et loadlin) |
|||
Ligne 142 : | Ligne 142 : | ||
Comme d'habitude, on ne garde, pour les pilotes, que ceux du matériel (ARCnet, TokenRing peuvent être désactivés. Ne garder dans l'ethernet que ce qui concerne la carte réseau,...) | Comme d'habitude, on ne garde, pour les pilotes, que ceux du matériel (ARCnet, TokenRing peuvent être désactivés. Ne garder dans l'ethernet que ce qui concerne la carte réseau,...) | ||
Si vous ne comptez pas | Si vous ne comptez pas utiliser l'IPv6 (ou si vous vous demandez ce que c'est), vous pouvez le supprimer.<br/> | ||
L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.<br/> | L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.<br/> |
Version du 25 octobre 2005 à 18:04
Le noyau (kernel) de Linux : le compiler
Quelques rappels
Le noyau est le coeur du système. C'est lui qui, entre autres, gère la mémoire, contient les pilotes du matériel, ordonne les différentes tâches, gère le support des différents protocoles,...
Le noyau, ou kernel, est composé d'une partie statique, à laquelle on peut greffer des modules. La partie statique sera toujours chargée en mémoire, tandis que les module ne le seront qu'en cas de besoin.
Vous avez besoin d'un nouveau noyau si :
- vous avez un matériel dont le support a été ajouté dans une nouvelle version du noyau,
- un trou de sécurité a été découvert dans le noyau actuel, ce problème étant réglé dans une nouvelle version,
- vous souhaitez toujours avoir le dernier noyau possible :)
- comme tout bon Geek, vous aimez compiler votre kernel ;)
La plupart du temps, vous n'avez pas réellement besoin de nouveau noyau.
Quel noyau?
Dans un premier temps, pour savoir quel noyau on utilise, il suffit de lancer uname -sr.
Note sur la numérotation des noyaux :
Les noyaux sont numérotés sur 3 nombres x.y.z.
- Versions stables : le nombre du milieu (y) est pair. Par exemple : 2.4.31 ou 2.6.13.
- Versions de développement : le nombre du milieu (y) est impair, par exemple 2.5.75. Attention, il n'est pas recommandé d'utiliser un noyau d'une version de développement, car ces noyaux ne sont pas - a priori - stables.
De plus, on peut différencier les sources Vanilla, qui sont les sources non patchées. Les distributions peuvent proposer des noyaux légèrement modifiés, optimisés pour telle ou telle architecture, etc.
Le mieux est peut être d'installer la version du noyau via le système de paquetages de la distribution (mais rien n'empêche d'utiliser les vanilla sources)
Enfin, il faut vérifier que /usr/src/linux est un lien vers le répertoire contenant les sources du noyau à compiler:
ln -sf /usr/src/linux-x.y.z /usr/src/linux
Dis-moi qui tu es, je te dirai quoi compiler
Avant de se lancer dans l'aventure, il est important de connaître son matériel, afin de ne pas oublier par exemple le support du controleur IDE sur lequel se trouve le disque !
Pour ne rien oublier, il existe quelques petits outils bien sympathiques.
lspci, provenant des pciutils pour voir ce que l'on a sur les ports pci, lsusb, provenant des usbutils, pour savoir ce que l'on a sur les ports usb.
Il existe également hwinfo qui peut nous donner pas mal de renseignements sur notre matériel.
Ces petits softs sont disponibles en tant que paquet dans pas mal de distributions, et sont peut être déjà installés.
Une fois que l'on connaît son matériel, on va pouvoir passer à l'étape suivante.
Prérequis
Avant de passer à la suite il faut:
- avoir l'environnement de développement gcc
- si on souhaite utiliser l'interface graphique sous X, il faut autoriser l'affichage à root avec
xhost +
- devenir root (donc avoir le droit de faire des bêtises!):
su
- enfin, il faut aller dans le répertoire
cd /usr/src/linux
Configuration
Pour configurer le noyau, il y a 4 possibilités:
- modifier le .config à la main,
- lancer la commande
make config
. Dans ce cas, on devra répondre à toutes les questions une par une, - lancer la commande
make menuconfig
. Ici, on va configurer le noyau via une interface graphique en ncurses (mode semi-graphique), - lancer la commande
make xconfig
. L'interface ici sera graphique sous X
Les options
Le moment est venu de choisir vos options.
Si c'est la première fois que vous compilez le noyau, je vous conseille de les passer toutes en revue les unes après les autres, dans l'ordre, afin de voir si elles s'appliquent à vous ou non.
De manière générale, il est bon de modulariser un maximum de choses, mais tout n'est pas possible (enfin... pas simplement :)
Par exemple, vous ne devriez pas mettre en module ce qui vous permet de monter votre partition racine. Si celle-ci se situe sur un disque IDE, ne mettez pas le support IDE en module, de même si elle se situe sur un disque SCSI, ne mettez pas le support SCSI en module. Si votre partition racine est montée par le réseau et NFS (cas des stations diskless par exemple), ne mettez pas le support de la carte réseau et le support NFS en modules.
En effet, les modules sont chargés après le noyau, et si les modules IDE sont sur un disque IDE, il faut d'abord les charger avant de pouvoir accéder au disque, mais pour les charger, il faut avoir accès au disque et donc les avoir chargés avant... vous voyez le cercle vicieux ?
En fait, il est possible de contourner ce problème, mais ce document s'adresse aux débutants...
Tout le reste peut être compilé en modules, c'est à dire carte son, carte réseau (sauf si votre racine est déportée sur un serveur NFS comme dit précédemment), le support ppp (pour internet par modem), le CD-ROM, etc.
Voici ci-dessous les options classiques à utiliser pour une configuration classique. Si rien n'est dit ici à propos d'une option, regardez l'aide ou conservez la valeur par défaut ; vous pouvez aussi répondre 'N' à tous les périphériques que vous ne possédez pas, comme par exemple, IDE/ATAPI TAPE, etc.
Dans le doute, il vaut mieux laisser les options par défaut.
Attention: cette doc a été mise à jour en se basant sur la version 2.6.13 du noyau! Si la version est différente (notamment la branche), il est possible que certaines options n'existent pas ou aient été déplacées.
Code maturity level options
Ca ne coûte rien de répondre Y ici!
Prompt for development and/or incomplete code/drivers
: Y
Select only drivers expected to compile cleanly
: Y
General setup
Support for paging of anonymous memory (swap)
: Y
System V IPC
: Y
Sysctl support
: Y
Pour permettre le hotplug:
Support for hot-pluggable devices
: Y
Et enfin:
Kernel userspace events
: Y
Loadable module support
Pour que le noyau puisse charger et décharger les modules selon ses besoins:
Enable loadable module support
: Y
Module unloading
: Y
Automatic kernel module loading
: Y
Processor type and features
C'est ici que vous définissez quel est votre type de processeur.
Preemptible kernel
: Y. Grâce à cette option, le noyau devient "préemptif". Cela permet d'avoir un noyau plus réactif.
Bus options
PCI support
: Y
PCI device name database
: Y
Executable file format
Kernel support for ELF binaries
: Y
Kernel support for MISC binaries
: M ou Y
Graphics support
Support for frame buffer devices
: Y
A vous de choisir votre carte graphique!
Logo configuration
à vous de voir si vous voulez un beau logo de tux au démarrage!
Memory technologie Device
à voir selon votre matériel!
block devices
Loopback device support
: Y
RAM disk support
Y ou M si vous comptez utiliser un ramdisk
Initial RAM disk (initrd) support
si vous comptez démarrer avec un ramdisk.
Device drivers
Dans la section character devices
, il faut mettre en module la gestion de l'agp (/dev/agpart
), ainsi que celle de son chipset.
Dans la section ATA/ATAPI/MFM/RLL support
, il ne faut pas oublier de mettre Y pour la gestion de la DMA.
SCSI device support
C'est ici que vous pouvez configurer, en plus du SCSI, les lecteurs IOMEGA ZIP sur port parallèle, ainsi que le bus SATA. A partir du noyau 2.6, on n'utilise plus d'interface SCSI pour les graveurs de CD/DVD.
Networking options
Comme d'habitude, on ne garde, pour les pilotes, que ceux du matériel (ARCnet, TokenRing peuvent être désactivés. Ne garder dans l'ethernet que ce qui concerne la carte réseau,...)
Si vous ne comptez pas utiliser l'IPv6 (ou si vous vous demandez ce que c'est), vous pouvez le supprimer.
L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.
Je vous conseille quand même de garder le PPP
ISDN
Ceci concerne les connexions numéris.
Unix98 PTY
Unix98 PTY support: Y
256 est un bon nombre maximum.
Filesystems
Ici, vous choisissez les systèmes de fichiers dont vous avez besoin (ext2, ext3, éventuellement ReiserFS).
Kernel automounter version 4 support
: M
Ne pas oublier de vérifier CD-ROM/DVD Filesystems
et DOS/FAT/NT Filesystems
Dans pseudo filesystems
, mettre Y à:
/proc
Virtual memory file system support
/dev file system support
est obsolète et remplacé par udev
.
Network File systems
n'est utile que si vous montez des systèmes de fichier par le réseau.
Multimedia devices
Ici vous ajoutez vos pilotes pour les cartes radio, ainsi que l'acquisition vidéo (carte TV, webcam,...)
Sound
Ne pas utiliser OSS, mais ALSA.
USB support
Vous pouvez utiliser lsmod pour savoir quel module utiliser (entre EHCI, OHCI et UHCI). Ensuite, c'est à vous de savoir quel matériel vous avez!
Watchdog cards
Si vous vous demandez ce que c'est, c'est que vous n'en avez pas besoin!
Profiling support
Mettre N partout
Kernel hacking
Même si vous ne vous sentez pas l'âme d'un hacker, je vous conseille de mettre Y à
Kernel debugging
Magic SysRq Key
Comme cela, en cas de plantage du système, vous pourrez utiliser les touches magiques pour démonter les partitions et redémarrer "proprement" (sans appuyer sur le bouton reset)
Security options
Vous n'avez sûrement pas besoin de configurer SELinux ou d'autres méthodes de haute sécurité. Donc, un petit N suffit.
Cryptographic options
Les mettre en module ne fait pas de mal.
Library routines
Idem, en module, ça peut éventuellement servir.
La compilation
Pour lancer la compilation du noyau, rien de plus simple. Il suffit de lancer:
make && make bzImage modules_install
La compilation peut être relativement longue.
Dernière étape
Maintenant, on va préparer le système à redémarrer avec le nouveau noyau:
cp arch/architecture/boot/bzImage /boot/kernel-X.Y.Z
où architecture correspond à votre architecture (i386 pour un système 32bits, x86_64 pour un amd64)
cp System.map /boot/System.map-X.Y.Z
Si le fichier /boot/System.map est un lien, le supprimer, sinon le renommer.
Ensuite, nous allons créer le lien suivant:
ln -s /boot/System.map-X.Y.Z /boot/System.map
Autant copier le fichier de configuration du noyau, on ne sait jamais:
cp .config /boot/config-X.Y.Z
Enfin, si vous utilisez un ramdisk au boot, il faut le recréer en lançant la commande suivante:mkinitrd
, puis copier l'initrd dans /boot.
Remarque sur initrd :
La plupart des distributions récentes utilisent souvent par défaut un disque RAM initial (initrd) afin de démarrer le système. Ce n'est pas nécessaire en général, sauf si votre système de fichiers racine / a besoin de modules pour être chargé (par exemple, s'il se trouve sur un disque SCSI, et que le support SCSI est en modules). Si vous incluez les modules nécessaires au chargement de votre système de fichiers racine (en répondant Y au lieu de M), vous pouvez vous passer d'initrd.
Il ne reste plus qu'à configurer le gestionnaire de démarrage (grub, lilo ou loadlin). Pour bien le faire, le mieux est de lire la doc sur léa!
Annexe : copies d'écran
make menuconfig
donne l'écran suivant :
L'écran suivant contient la liste des sous-menus de configuration.
Déplacez vous avec les flèches, et tapez 'Entrée' pour entrer dans chaque sous-menu.
Linux Kernel v2.2.13 Configuration ------------------------------------------------------------------------------ +------------------------------- Main Menu ------------------------------- | Arrow keys navigate the menu. <Enter> selects submenus --->. | | Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, | | <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help. | | Legend: [*] built-in [ ] excluded <M> module < > module capable | | +---------------------------------------------------------------------+ | | | Code maturity level options ---> | | | | Processor type and features ---> | | | | Loadable module support ---> | | | | General setup ---> | | | | Plug and Play support ---> | | | | Block devices ---> | | | | Networking options ---> | | | | SCSI support ---> | | | | Network device support ---> | | | | Amateur Radio support ---> | | | | IrDA subsystem support ---> | | | | ISDN subsystem ---> | | | | Old CD-ROM drivers (not SCSI, not IDE) ---> | | | | Character devices ---> | | | | Filesystems ---> | | | | Console drivers ---> | | | | Sound ---> | | | | Kernel hacking ---> | | | | --- | | | | Load an Alternate Configuration File | | | | Save Configuration to an Alternate File | | | | | | | +---------------------------------------------------------------------+ | +-------------------------------------------------------------------------+ | <Select> < Exit > < Help > | +------------------------------------------------------------------------- |
Sur les écrans déplacez vous avec les flèches, tapez 'Y' pour include une fonction, 'M' pour l'inclure en tant que module. Tapez '?' ou 'H' pour avoir de l'aide sur la fonction sélectionnée (je vous recommande de lire l'aide de chaque fonction, et si vous ne comprenez pas, prenez la valeur conseillée). Tapez 'Esc' afin de sortir d'un sous-menu.
Après avoir configuré votre noyau, sélectionnez "Save Configuration to an Alternate File", afin d'enregistrer le fichier de configuration et de pouvoir le réutiliser ultérieurement. Enfin, quittez en pressant 'Esc' et enregistrez la configuration.
make xconfig
donne la fenêtre suivante :
Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration :
Pour chaque option, cliquez sur le bouton [Help] afin de lire la documentation de l'option. Après avoir configuré votre noyau, sélectionnez "Store Configuration to File", afin d'enregistrer le fichier de configuration et de pouvoir le réutiliser ultérieurement. Enfin, quittez en pressant 'Esc', et enregistrez la configuration. |
Copyright
Copyright © 06/11/1999, Jean-Christophe Cardot
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |