présente...

 

LéaBook, Chapitre :
Noyau & modules

par tous les amis de Léa

 

 

Le copyright de chaque article est détenu par son auteur.
Le copyright du livre lui-même est détenu par Léa (Association Loi 1901).
Les articles de ce livre sont diffusés selon la license GPL (GNU General Public License), sauf mention explicite dans l'article.

Copyright (c) 2003 Association Léa.
This documentation is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This documentation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
For the purpose of applying the GPL to this document, I consider "source code" to refer to the html source.


Table des matières


Configurer et compiler son noyau

Où vous allez voir que la compilation du noyau (ou kernel) n'est pas si compliquée...
 

Haut


Le noyau (kernel) de Linux : le compiler

par Jean-Christophe

Où vous apprendrez à compiler votre noyau Linux sans soucis.


Si vous ne savez pas ce qu'est le noyau, allez voir le glossaire !

D'abord, quelle est la version actuelle du noyau ?

C'est facile, il suffit de lancer uname -sr pour avoir la réponse.

Note sur la numérotation des noyaux :
Les noyaux sont numérotés sur 3 nombres x.y.z.


Vous avez besoin d'un nouveau noyau si :

La plupart du temps, vous n'avez pas réellement besoin de nouveau noyau.
 
Vous pouvez récupérer la dernière version du noyau (ainsi que toutes les autres) sur kernel.org, ou  plutôt depuis le miroir le plus proche de vous.


Installation d'un noyau précompilé

Lorsque votre distribution vous propose un package de mise à jour du noyau précompilé, vous pouvez l'installer. C'est souvent recommandé, car ces mises à jour concernent soit des bugs, soit des trous de sécurité importants.
On reconnaît les packages RPM de tels noyaux à leur nom, en général de la forme : kernel-2.*.*.i?86.rpm.

Je vous conseille, pour le noyau précompilé, de ne pas mettre à jour votre distribution avec le package d'une autre distribution. Si la version que vous désirez n'est pas disponible pour votre distribution, passez plutôt par la compilation des sources (voir ci-dessous).

Attention, si vous installez un package RPM : il ne faut jamais mettre à jour un noyau par l'intermédiaire de la commande "rpm -U" (upgrade). Cette commande supprimera votre noyau actuel. Si le nouveau noyau ne fonctionne pas, il ne vous restera plus qu'à réinstaller votre système :-(
En fait, il faut installer (et non mettre à jour) le nouveau noyau par l'intermédiaire de la commande "rpm -i kernel-2.x.x.i586.rpm".


Aide-mémoire rapide

Voici en quelques lignes les étapes à réaliser pour configurer, compiler et installer un noyau. Connectez-vous en tant que root et réalisez les étapes suivantes :


And last, but not least...

Comment compiler mon propre noyau ?

pré requis : Vous devez être root pour faire tout ce qui suit. Dans cet exemple, nous installerons le noyau 2.2.13.

Une contribution : compiler un noyau à la sauce Debian. à lire si vous utilisez cette distribution.


Installation des sources du noyau

Archive au format rpm
Si vous avez installé le noyau avec le rpm de votre distribution, vous devez également installer le rpm des sources ainsi que celui des en-têtes (headers).

Archive au format .tar.bz2 ou .tar.gz
Tant que vous y êtes, récupérez l'archive contenant la dernière version du noyau si vous le souhaitez (attention, ces fichiers sont volumineux, dans les 14 Mo pour les derniers noyaux), puis décompressez là au bon endroit en suivant les indications suivantes :
[root@taz root]# cd /usr/src/
[root@taz src]# ls -l
total 4 
lrwxrwxrwx   1 root   root       12 Jun 20 22:23 linux -> linux-2.2.10/
drwxr-xr-x  15 root   root     1024 Jun 20 22:38 linux-2.2.10/
drwxr-xr-x  15 root   root     2048 Jun 16 19:52 linux-2.2.9/
drwxr-xr-x   7 root   root     1024 Jul  7 16:57 RPM/

En général, /usr/src/linux représente un lien vers le répertoire courant contenant les sources, ici linux-2.2.10. Dans ce cas, faites :
[root@taz src]# rm -f linux
Dans le cas où linux est un répertoire (pas un lien), renommez le : mv linux linux-2.x.x, où 2.x.x est la version de votre noyau.

Puis faites :
[root@taz src]# tar yxvf /chemin/de/linux-2.2.13.tar.bz2 ou
[root@taz src]# tar zxvf /chemin/de/linux-2.2.13.tar.gz

A ce moment là, un répertoire linux a été créé, qui contient les sources de Linux 2.2.13. Afin de recréer un environnement propre, je vous suggère de renommer ce répertoire en linux-2.2.13 et de créer un lien linux qui pointe dessus :
[root@taz src]# mv linux linux-2.2.13
[root@taz src]# ln -s linux-2.2.13 linux

Remarque : Le lien /usr/src/linux est nécessaire à la compilation du noyau et afin que les fichier d'entêtes (les "includes") du noyau soient disponibles pour des compilations futures d'applications.


Phase de configuration du noyau

Placez vous dans le répertoire des sources /usr/src, puis lancez les commandes suivantes :

[root@taz src]# cd linux

[root@taz linux]# make mrproper (ça nettoie l'arborescence des sources)

pour une configuration en mode graphique :

[root@taz linux]# make xconfig

ou pour une configuration en mode texte avec menus (ncurses) :

[root@taz linux]# make menuconfig

ou pour une configuration en mode texte pur (longue suite de questions/réponses) :

[root@taz linux]# make config

(voir les annexes pour la manipulation de menuconfig et de xconfig).

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. Pour en savoir plus, vous pouvez demander de l'aide pour chaque option (touche [H] dans la console ou bouton [Help] sous X). Reportez vous aussi à l'annexe sur les options pour avoir une aide afin de les choisir.

Je vous conseille de sauvegarder votre config dans un fichier pour la réutiliser plus tard. Par exemple, sauvegardez là dans /root/kernel.config-2.2.13. Ainsi vous pourrez recompiler le noyau en rechargeant cette config, et n'ajuster que les paramètres nécessaires. De plus, même en cas de montée de version du noyau, vous pourrez réutiliser ce fichier de config qui reste compatible (et vérifier les nouvelles options, bien sûr).


Phase de compilation du noyau et des modules

Sauvez et quittez, puis lancez les commandes qui vont vraiment compiler le noyau :
[root@taz linux]# make dep clean bzImage modules modules_install
pour tout compiler en une fois et installer.

ou :
[root@taz linux]# make dep
[root@taz linux]# make clean
[root@taz linux]# make bzImage

pour compiler le noyau lui-même, et pour compiler et installer les modules (i.e. les drivers) :
[root@taz linux]# make modules
[root@taz linux]# make modules_install
Les modules seront installés dans le répertoire /lib/modules/2.2.13/.

Remarque : Si vous voulez juste recompiler le noyau, sans monter de version, je vous conseille de déplacer le répertoire /lib/modules/2.x.x (remplacez par votre version) vers /lib/modules/old-2.x.x par exemple, avant la phase de compilation, afin que l'installation des modules recrée ce répertoire et y place les nouveaux modules : cela vous épargnera des problèmes si la nouvelle configuration du noyau a modifié celle des modules.
Si tout fonctionne correctement après le redémarrage, vous pourrez supprimer /lib/modules/old-2.x.x.


Installation du nouveau noyau

Remarque sur initrd :

Installation avec LILO

Nous allons modifier /etc/lilo.conf pour bouter sur votre nouveau noyau en tapant "linux" et sur l'ancien en tapant "old". Nous conserverons l'ancien noyau, ce qui permet de revenir à l'ancienne configuration si quelque chose se passe mal en boutant le nouveau noyau.

Voici un exemple de ce à quoi nous aboutissons :
boot=/dev/hda
# remplacez hda par le disque
# où vous installez LILO
map=/boot/map
install=/boot/boot.b
prompt
timeout=15
image=/boot/vmlinuz-2.2.13
        label=linux
        root=/dev/hdb1
         # remplacez hdb1 par
         # votre partition racine
        read-only
image=/boot/vmlinuz-2.2.10
        label=old
        root=/dev/hdb1
        read-only

Ensuite, placez vous dans /usr/src/linux, et installez le nouveau noyau par la commande suivante : [root@taz linux]# make install

Cela copie le noyau et le fichier System.map dans le répertoire /boot, puis lance lilo afin de prendre en compte les changements que nous avons apporté à /etc/lilo.conf.

Si tout s'est bien passé, vous n'avez plus qu'à rebouter :
[root@taz linux]# reboot

Au prompt LILO, tapez 'linux' pour démarrer le nouveau noyau, et si cela ne fonctionne pas 'old' pour démarrer l'ancien noyau et aller corriger ce qui ne va pas (c'est à ce moment que vous serez content d'avoir sauvegardé les informations de configuration du noyau dans un fichier :).

Installation avec GRUB

Note : le fichier de configuration de Grub est /boot/grub.lst
Vous devez copier le noyau et System.map dans /boot comme décrit plus haut (voir aide mémoire rapide) :

Déterminez le nom de l'image noyau (ici vmlinuz) dans le fichier de configuration de Grub. Puis copiez le noyau :
mv /boot/vmlinuz-2.4.18 /boot/vmlinuz-2.4.18.old
cp arch/<architecture>/boot/bzImage /boot/vmlinuz-2.4.18

avec <architecture> étant égal à i386 pour un PC compatible Intel, ppc pour un Macintosh PowerPC, etc.
mv /boot/System.map-2.4.18 /boot/System.map-2.4.18.old cp System.map /boot/System.map-2.4.18

Remarque : ces instructions sont valables quelque soit le chargeur de démarrage...

Enfin, pour faire prendre en compte la nouvelle image noyau à Grub, tapez :
grub root (hdC,P) setup (hd0)
En remplaçant C par le numéro du disque dur, selon la correspondance suivante : hda:C=0, hdb:C=1, hdc:C=2, etc. et P par le numéro de partition sur le disque, c'est à dire hdx1:P=0, hdx2:P=1, hdx3:P=2, etc.

Installation avec LOADLIN

Placez vous dans /usr/src/linux, et copiez System.map dans /boot sous le nom System.map-2.2.13, effacez le lien /boot/System.map, puis recréez le sur System.map-2.2.13 :
[root@taz linux]# cp System.map /boot/System.map-2.2.13
[root@taz linux]# rm -f /boot/System.map
[root@taz linux]# ln -s /boot/System.map-2.2.13 /boot/System.map

Copiez le noyau vers l'endroit ou vous avez l'habitude de le faire (en général dans le premier disque DOS, par exemple dans C:\LINUX), monté par exemple dans /mnt/dosc :
[root@taz linux]# cp arch/i386/boot/bzImage /mnt/dosc/linux/vmlinuz2

Si vous utiliser initrd, regénérez-le :
[root@taz linux]# mkinitrd
[root@taz linux]# cp /boot/initrd /mnt/dosc/linux/initrd2

Reboutez sous DOS, et démarrez Linux par :
C:\>LOADLIN vmlinuz2 root=/dev/hdb1 ro
(remplacez /dev/hdb1 par votre partition racine).

Ou si vous utilisez initrd : C:\>LOADLIN c:\linux\vmlinuz2 initrd=c:\linux\initrd2

The end...

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 :

copie d'écran: make xconfig

Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration :
 
copie d'écran: make xconfig, sous menu 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.


Annexe : quelles options choisir

Je ne vais bien sûr pas pouvoir vous donner ici toutes les options dont vous allez avoir besoin, néanmoins celles qui sont nécessaires en général, ainsi que les options permettant de résoudre un cas particulier seront citées ci-dessous.

Afin de choisir vous-même vos options, passez les en revue l'une après l'autre dans l'ordre, en consultant si besoin l'aide disponible pour chacune d'entre elles. Si vous ne comprenez pas l'anglais, une traduction de l'aide existe en français à l'adresse http://www.linux-kheops.com/traduc/kernels/. Remplacez le fichier /usr/src/linux/Documentation/Configure.help par le fichier traduit.

Aller plus loin : si vous désirez comprendre un peu mieux "comment ça marche", lisez les documents présents dans le répertoire /usr/src/linux/Documentation. Ils sont souvent très intéressants.

Options "générales"

Résumé :

Il faut répondre Y à la question du support des modules, ainsi qu'à celle du chargement automatique des modules par le kernel (kerneld Y), sinon vous devrez les monter en mémoire à la main !

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 port parallèle, le support ppp (pour internet par modem), le CD-ROM, etc.
Si vous avez du matériel PnP et que vous voulez utiliser le support PnP de Linux,  passez tous les drivers pour ces cartes en modules aussi et configurez votre PNP (voir la rubrique Plug'n Play afin de configurer ensuite les modules dans /etc/conf.modules).

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.

Code maturity level options
Prompt for development and/or incomplete code/drivers : Y Ca n'engage à rien :)
Processor type and features
définissez ici votre type de processeur, la quantité de mémoire vive maxi que vous voulez gérer Math emulation                         N
  Si vous avez un processeur x86
MTRR                                   Y
  une chtite optimisation
Symmetric multi-processing support     N
  c'est l'option pour les multi processeurs !
Loadable module support
Enable loadable module support         Y
Set version information on all symbols for modules : Y
Kernel module loader                   Y

General setup
Networking support                     Y
  même si vous ne faites ni réseau ni internet
PCI support                            Y
  évidemment
Advanced Power Management BIOS support Y
  si vous avez un portable ca peut être utile
Remarque (merci Fred !) : le support du BIOS APM n'est pas utile qu'au portable ! Si en plus vous cochez "Make CPU Idle when IDLE" : quand votre PC ne fait rien, il refroidit. Ca permet d'overclocker un CPU sans acheter de ventilateur plus gros ! (en fait sur les sites d'overclockeur on trouve des programmes en shareware qui font la même chose !) Ca n'a aucun impact (notable) sur le PC sinon que chaque fois qu'il ne fait rien, Linux le dit au processeur qui fait ce qu'il faut !

Sinon pour les autres options, laissez la valeur par défaut ou bien lisez l'aide jointe.

Plug and Play support
Plug and Play support                  Y
  si vous souhaitez utilisez le PnP de Linux
Auto-probe for parallel devices        M
  permet de tester les perifs sur le port //

Block devices
Normal PC floppy disk support          Y
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support  Y
   Include IDE/ATA-2 DISK support      Y
   Include IDE/ATAPI CDROM support     Y
        à moins que vous ayez un CD non IDE

Et si vous connaissez le chipset qui est sur votre carte mère, vous pouvez choisir les options correspondantes. Dans le doute, si l'option corrige un bug, choisissez Y, sinon choisissez N.
Additional block devices
Loopback device support                M
  utile pour voir ce que contient une image ISO
RAM disk support (CONFIG_BLK_DEV_RAM)  Y
  si vous utilisez un ramdisk pour booter (N sinon) 
Parallel port IDE device support       M
  si vous avez un CD, disque dur... sur le port //
  dans ce cas, prenez tous les protocoles en module
  pour être sûr que ça marche, et prenez aussi
  l'autoprobe (voir plus haut)

Networking options
Les networking options peuvent être laissées telles quelles si vous ne faites rien de spécial.
SCSI support
Même si vous n'avez rien de SCSI, cette section peut vous intéresser (graveur IDE, CD, disque dur ou ZIP sur port parallèle, etc.). SCSI support (CONFIG_SCSI)             Y
  si partition racine sur disque SCSI
                                    ou M
  si CD SCSI ou graveur (même IDE : voir plus bas)
SCSI disk, tape, CD-ROM support        Y
  si vous avez ce périphérique
Enable vendor-specific extensions    Y
  ca peut pas faire de mal :) + indisp. graveur IDE

SCSI low level drivers
Pour les SCSI low-level drivers, choisissez seulement celui de votre carte SCSI, Y ou M selon votre partition racine, et N pour les autres. (graveur IDE : M pour n'importe lequel). Si vous avez un ZIP sur le port parallèle, choisissez (dans les SCSI low-level drivers) : IOMEGA parallel port (ppa - older drives)  M
IOMEGA parallel port (imm - newer drives)  M
Network device support
Si vous avez une carte réseau ou si vous utilisez un modem en ppp pour aller sur internet, soit dans la plupart des cas : Network device support (CONFIG_NETDEVICES) Y
ARCnet devices
Dummy net driver support (CONFIG_DUMMY)  Y ou M
et vous pouvez raisonnablement mettre les autres options à N.
Ethernet (10 or 100Mbit)
Choisissez le driver pour votre carte réseau, Y ou M, et mettez les autres à N.
Appletalk devices
Vous pouvez tout mettre à N ici, sauf bien sûr si vous voulez faire de l'Appletalk. Mais si vous vous connectez à internet avec un modem : PPP (point-to-point) support (CONFIG_PPP)  Y ou M
Token Ring, Wan interfaces, Amateur Radio support
A moins d'une configuration spécifique, vous pouvez tout mettre à N dans ces trois rubriques.
IrDA subsystem support
Configurez IrDA suivant votre utilisation, je ne connais pas :) voir http://www.cs.uit.no/~dagb/irda/.
Infrared-port device drivers
Si vous utilisez IrDA, configurez ici votre "low level driver".
ISDN subsystem
si vous avez un modem Numéris(tm) choisissez : ISDN support : M
ainsi que le driver pour votre modem à M.
Old CD-ROM drivers (not SCSI, not IDE)
si vous avez un vieux lecteur de CD-ROM, ni IDE ni SCSI, c'est à dire connecté à une carte propriétaire ou une carte son en général, vous pouvez essayer de le faire fonctionner avec ces drivers.
Character devices
Virtual terminal                        Y
Support for console on virtual terminal Y
Standard/generic (dumb) serial support  Y
Parallel printer support                M

et pour le reste, laissez la valeur par défaut et supprimez (N) les périphériques qui ne vous concernent pas.
Mice
Si vous avez une souris série, vous n'avez rien à faire.
Si vous avez une souris PS/2 : PS/2 mouse (aka "auxiliary device") support    Y
Dans la majorité des cas (qui n'a pas une souris série
ou PS/2 ?) vous pouvez répondre N aux autres options.

Watchdog Cards
Vraisemblablement vous n'en avez pas : mettez tout à N, sinon vous savez certainement ce que vous faites :)
Video For Linux
Cela concerne les personnes qui ont une carte tuner TV ou radio ou une web cam supportée (voir la rubrique TV). Si c'est votre cas, choisissez : Video For Linux          M
puis mettez en module les drivers nécessaires. Par exemple, si vous possédez une carte Miro PCTV (ou compatible BT8xx), choisissez : BT848 Video For Linux    M
Joystick support
Si vous en avez un ou plusieurs, choisissez : Joystick support : M puis mettez en module les drivers pour les joysticks qui vous intéressent.
Attention, les drivers pour joysticks NES, SNES, PSX, Sega, etc. (Multisystem) nécessitent que vous fabriquiez une interface spéciale pour les connecter au port parallèle... à vos fers à souder !
Ftape, the floppy tape device driver
Vous avez un lecteur de bande branché avec le lecteur de disquettes ? Cette rubrique vous concerne.
Filesystems
Les systèmes de fichiers. Choisissez ceux dont vous avez besoin : minix, ext2 (second extended), /proc, /dev/pts sont indispensables.
Plus en général : DOS FAT + VFAT, ISO 9660 (pour les CD-ROMS) et les extensions Joliet (noms longs sur les CD),
plus romfs qui peut être utile pour ceux qui utilisent initrd.
Network File Systems
Choisissez les options NFS si vous souhaitez monter des disques partagés en NFS,
choisissez les options SMB afin de monter les répertoires partagés Windows par réseau. (si vous ne voulez pas monter de répertoire partagé, mais plutôt en partager avec Samba, vous n'avez pas besoin de répondre Y ou M ici).
Partition Types
Vous pouvez sûrement répondre N partout ici, sauf si vous en avez besoin, mais si c'est le cas, vous le savez :)
Native Language Support
Linux est localisé, c'est à dire qu'il peut être utilisé dans tous les pays avec les caractères spécifiques au pays. A priori en France il suffit de choisir en module : Codepage 850 et NLS ISO 8859-1. Les autres peuvent être mis à N.
Console drivers
Vous pouvez laisser les options par défaut, sauf si vous voulez utiliser la console en mode frame buffer, avec le serveur X pour frame buffer (pratique si votre carte, récente, n'est pas encore supportée par XFree).
Dans ce cas, choisissez : Support for frame buffer devices     Y
et configurez les options qui en dépendent.
Sound
Nous allons ici configurer la carte son. Si vous en avez une, choisissez : Sound card support            M
Vous pouvez aussi utiliser le PC Speaker : Internal PC speaker support   M
Ensuite, choisissez le "low level driver" de votre carte. Si vous le mettez en module (conseillé), ce n'est pas la peine de mettre ici les paramètres de la carte (irq, dma, etc.)
Ouf... c'est fini :-)
Après ça, vous comprenez pourquoi je n'arrête pas de vous dire de sauvegarder votre config de noyau dans un fichier !!!


Cas particuliers

Permettre le gravage sur des graveurs IDE

Les graveurs IDE sont reconnus sans problème en tant que lecteur de CD-ROM, mais pour ce qui est de s'en servir comme d'un graveur, vous allez devoir utiliser "l'émulation SCSI", comme sous Windows d'ailleurs (ASPI, ca vous dit quelquechose ?). Pour ce faire, il faut choisir les options suivantes dans le noyau : Enhanced IDE/MFM/RLL...         Y
IDE/ATAPI CDROM                 M
SCSI hostadaptor emulation      M
Loopback device                 M
SCSI support                    Y ou M
SCSI CD-ROM support             Y ou M
Enable vendor-specific          Y
SCSI generic support            Y ou M
   (choisir un driver SCSI, n'importe lequel)
ISO 9660 CDROM filesystem       Y
Microsoft Joliet cdrom...       M

Pour le reste de la configuration, celle-ci ne concerne pas le noyau. Allez la consulter dans la rubrique trucs.
Remarque : les distributions récentes ont souvent le support de l'émulation SCSI déjà inclus, il suffit alors de le configurer selon ce qui est indiqué dans la rubrique trucs.

Activer le support Frame buffer dans le noyau

Menu Code maturity level options
Prompt for development and/or incomplete code/drivers : Y

Menu Console drivers
Video mode selection support : Y

Support for frame buffer devices : Y

VESA VGA graphic console : Y

Pour le reste de la configuration du frame buffer, par exemple le serveur X, voir la rubrique correspondante.

Options spécifiques à un modem ADSL USB

Pour les utilisateurs d'un modem adsl USB, voici les options que vous devriez choisir :

- Menu [Network Device Support]
PPP (point-to-point protocol) support (CONFIG_PPP) [M]
PPP support for sync tty ports (CONFIG_PPP_SYNC_TTY) [M]


- Menu [Character devices]
[*] Non-standard serial port support
HDLC line discipline support
[*] Unix98 PTY support


- Menu [USB support]
Support for USB (CONFIG_USB) [M]
Preliminary USB device filesystem (CONFIG_USB_DEVICEFS) [Y]
UHCI (Intel PIIX4, VIA, ...) support (CONFIG_USB_UHCI) [M]
UHCI Alternate Driver (JE) support (CONFIG_USB_UHCI_ALT) [M]
OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support (CONFIG_USB_OHCI) [M]

Haut


Compilation du noyau 'à la façon Debian'

par Sébastien Kalt

Même sur une Debian ;) on peut compiler son noyau sans pépin.


La distribution Debian met à notre disposition des outils spécifiques pour 'faciliter' la compilation et la mise en place d'un nouveau noyau. On crée en fait un paquet Debian contenant le noyau et ses modules qu'il suffit ensuite d'installer comme n'importe quel paquet !

pré requis:

Prévoir également si vous voulez compiler les modules PCMCIA de la même façon: Il faut ensuite installer et configurer le noyau comme décrit précédemment.
Normalement les sources PCMCIA se décompressent dans le répertoire /usr/src/modules/pcmcia-cs . Si ce n'est pas le cas alors vous ne pourrez pas faire de compilation 'à la Debian'.

Compilation du noyau

C'est seulement là que les choses changent :
[root@localhost linux]# make-kpkg clean
[root@localhost linux]# make-kpkg --revision=CUSTOM.1.0 kernel_image
C'est la phase de compilation proprement dite. Elle vous laissera un paquet kernel-image-2.0.36_CUSTOM.1.0_i386.deb dans le répertoire '/usr/src'.
Vous pouvez remplacer 'CUSTOM' par ce que vous voulez, les seules restrictions sont de n'utiliser que des caractères alphanumériques surtout sans '_', '-' et espaces.
Le numéro de version permet à 'dpkg', au cours de l'installation, de vous avertir si jamais vous tentez d'utiliser un noyau plus ancien que celui qui tourne actuellement. C'est plus une sécurité qu'autre chose, mais bien pratique quand même. Alors n'oubliez pas de faire évoluer ce numéro à chaque recompilation.
 
 

Installation du nouveau noyau

La première chose à faire, c'est de sauvegarder les modules de votre noyau actuel. En effet, étant donné que vous avez changé des options du noyau, vous avez sûrement ajouté et/ou enlevé des modules par rapport au noyau que vous utiliser. Comme le paquet va installer les nouveaux modules dans le même répertoire il vaut mieux supprimer le-dit répertoire pour éviter les conflits. Et a cas où il y aurait un problème c'est encore mieux de sauvegarder ce répertoire. C'est ce que nous faisons avec la commande suivante:

[root@localhost linux]# mv /lib/modules/2.0.36 /lib/modules/2.0.36.old

Pensez à remplacer '2.0.36' par la version actuelle de votre noyau. Vous pouvez par la suite, quand vous êtes sûr que votre noyau marche parfaitement, supprimer ce répertoire.

Viens ensuite la phase d'installation proprement dite :

[root@localhost linux]# dpkg -i ../kernel-image-2.0.36_CUSTOM.1.0_i386.deb
Si vous tentez d'installer un noyau plus ancien que celui qui tourne actuellement 'dpkg' vous affichera le message d'avertissement suivant :
dpkg - avertissement: kernel-image-2.0.36 mis à jour de CUSTOM.1.4 vers l'ancienne CUSTOM.1.0.
Ensuite on vous proposera de créer une disquette de boot. Je ne saurais que trop vous conseiller de faire cette disquette. En effet suite à quelques problèmes avec ma table de partition, ma disquette de boot Linux est la seule chose qui m'a permis de réparer les dégâts en m'évitant de réinstaller tout mon disque dur.

Si vous utilisez 'lilo', l'installation vous proposera d'utiliser votre fichier de configuration actuel pour ré-installer le chargeur. Si vous recompilez le même noyau vous n'avez rien à changer. Par contre si vous compilez un autre noyau il faut modifier votre '/etc/lilo.conf' pour qu'il boote bien sur '/boot/vmlinuz-2.X.XX' et non sur '/boot/vmlinuz-2.0.36' par exemple.

Enfin, si vous êtes sûr que tout s'est bien déroulé, il ne vous reste plus qu'à rebooter :

[root@localhost linux]# shutdown -r now

Et voilà, vous venez de compiler et d'installer un noyau aux petits oignons ! Félicitations.
 

Compilation et installation des modules PCMCIA

Il est fortement conseillé de configurer ces modules avant de les compiler. Je vous conseille d'installer le noyau que vous venez de compiler et de vérifier qu'il marche bien avant de compiler et d'installer les modules PCMCIA. Moi je compile tout et j'installe tout d'un coup, et j'ai pas de problèmes.
[root@localhost linux]# cd ../modules/pcmcia-cs
[root@localhost pcmcia-cs]# make clean
[root@localhost pcmcia-cs]# make config
Voici une petite aide pour répondre au questionnaire proposé:

Linux source directory [/usr/src/linux]: si vous avez fait comme on vous a dit le répertoire proposé est le bon,

Alternate target install directory []:  ça c'est si vous voulez compiler pour une autre machine, non compatible avec la compilation Debian,

Module install directory [/lib/modules/2.0.36]:  répertoire normal, rien à changer,

Build 'trusting' versions of card utilities (y/n) [n]:  ça permet de ne pas recompiler les modules PCMCIA à chaque recompilation du noyau. Je vous conseille de répondre 'non',

Include 32-bit (CardBus) card support (y/n) [n]:  ben là ça dépend de vous, et surtout des cartes que vous comptez utiliser,

How would you like to set kernel-specific options?
    1 - Read from the currently running kernel
    2 - Read from the Linux source tree
    3 - Set each option by hand (experts only!)
Enter option (1-3) [2]: 1  Si vous avez déjà installé le noyau alors prenez l'option 1. Si vous venez de le compiler mais qu'il n'est pas installé, prenez l'option 2. Une petite remarque pour dire que le paquet pcmcia-source de la Potato ne propose plus l'option 3.

Et voilà, vos modules PCMCIA sont maintenant configurés. Il ne reste plus qu'à les compiler et les installer.
 

[root@localhost pcmcia-cs]# cd ../../linux
[root@localhost linux]# make-kpkg --revision=CUSTOM.1.0 modules_image
Attention, ici il faut mettre la même révision que le noyau que vous venez de compiler, sinon vous ne vous y retrouverez plus.
[root@localhost linux]# dpkg -i ../modules-image-2.0.36-3.1.4-2+CUSTOM.1.0_i386.deb
Et voilà, maintenant il ne vous reste plus qu'à rebooter, et normalement tout marche comme sur des roulettes.

Retourner à la rubrique compilation du noyau.

Haut


Les packages nécessaires pour compiler

par Jean-Christophe

Que faut-il installer pour pouvoir compiler un programme.


Afin de compiler le noyau (voir rubrique noyau) ou une autre application, vous avez besoin d'un certain nombre de packages, sans quoi vous aurez tout un tas d'erreurs qui conduirons vos compilations à l'échec. Nous allons voir ci-dessous quels packages sont nécessaires dans quel cas (bien sûr, les versions des packages ne sont pas indiquées ici, utilisez les packages livrés avec votre distribution).

Pour voir si un tel package est installé sur votre ordinateur, utilisez les utilitaires graphiques comme kackage ou gnorpm, ou utilisez rpm en ligne de commande. Pour rechercher un package avec rpm, tapez :

[jice@taz jice]$ rpm -qa | grep make
Cette commande vous renverra tous les packages dont le nom contient "make".

Packages nécessaires pour compiler le noyau

Pour les distributions basées sur les packages RPM (Red Hat, Mandrake...), la commande ci-dessous donne la liste des packages et des fichiers dont dépend le package des sources du noyau (kernel-source).
Voyons parmi l'information que retourne cette commande les packages nécessaires à la compilation du noyau.
[jice@taz jice]$ rpm -qR kernel-source
kernel-headers = 2.2.13-7mdk
glibc-devel
ncurses-devel
/bin/sh
ld-linux.so.2
libc.so.6
libm.so.6
/usr/bin/perl
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libm.so.6(GLIBC_2.0)
libm.so.6(GLIBC_2.1)
 -> pkg kernel-headers
 -> pkg glibc-devel
 -> pkg ncurses-devel
Afin de compiler le noyau, vous aurez besoin d'autres packages :

Résumé des packages pour compiler le noyau :
(si j'en ai oublié, dites-le moi :)

Packages nécessaires pour compiler une application

Dans ce cas la réponse est moins simple, car les packages nécessaires dépendent de chaque logiciel qu'on compile (suivant le langage utilisé, les bibliothèques utilisées, etc.).
Lorsque vous installez votre nouvelle distribution, choisissez tout ce qui ressemble à "C development", "Development libraries", "C++ development", etc.

Dans quasiment tous les cas, il faut au moins un compilateur, les utilitaire standard (make et binutils) et les librairies standard, soit :

Compilateurs

Librairies standard

Make

Utilitaires

Ca fait déjà pas mal, je vous l'accorde, mais ce n'est pas fini !

En effet, chaque programme particulier utilisant une ou plusieurs bibliothèques, vous avez besoin de la version de développement de la librairie (nommée en général librairie-devel) afin de compiler votre programme. Si vous voulez être tranquilles, je vous conseille d'installer tous les packages de votre distribution qui se terminent par "devel". Cela suffit dans la plupart des cas, mais vous verrez parfois qu'il faut encore installer une librairie particulière.
De toute façon, tout ceci est normalement expliqué dans le fichier README livré avec l'archive du programme à compiler. Comme disent les anglophones : RTFM (Read The Fucking Manual !).

Bon, je ne résiste pas à l'envie de placer ici toutes les librairies que j'ai installées chez moi (Mandrake 6.1 avec ajouts perso) :

[jice@taz jice]$ rpm -qa|grep -i "-devel"
faces-devel-1.6.1-11
libtermcap-devel-2.0.8-15mdk
libjpeg-devel-6b-10mdk
libpng-devel-1.0.3-4mdk
gdbm-devel-1.8.0-2mdk
xpm-devel-3.4k-6mdk
Mesa-devel-3.0.99-4mdk
zlib-devel-1.1.3-7mdk
newt-devel-0.40-10mdk
readline-devel-4.0-3mdk
rpm-devel-3.0.3-31mdk
libgr-devel-2.0.13-9mdk
glibc-devel-2.1.1-16mdk
libungif-devel-4.1.0-4mdk
libstdc++-devel-1.1.3-3mdk
ClanLib-devel-0.1.15-1
gtk+-devel-1.2.3-15mdk
imlib-devel-1.9.5-6mdk
kmp3-devel-19990829-1mdk
libmikmod-devel-3.1.6-2mdk
libtiff-devel-3.4-8mdk
ncurses-devel-5.0_990703-4mdk
qt-devel-1.44-12mdk
slang-devel-1.3.8-1mdk
svgalib-devel-1.4.0-10mdk
XFree86-devel-3.3.5-3mdk
Plus...
Glide2x_SDK-2.1-3
Hermes-1.2.5-1
lesstif-0.87.0-1
OpenPTC-x11-1.0.0-2

Haut


Les modules de Linux

par Jean-Christophe

Comment fonctionnent ces mystérieux modules ?


Si vous ne savez pas ce que sont les modules, allez voir le glossaire !

A quoi ça sert ?

Bon, puissque vous avez pas été lire le glosssaire, voici la définition qui en est donnée :
Les modules sont une façon qui a été trouvée pour rendre Linux (le noyau) plus modulaire (!) et plus léger. En effet, ce sont le plus souvent des drivers qui ont été "sortis" du noyau dans des fichiers séparés, et qui sont chargés en mémoire, soit automatiquement lorsqu'on se sert du périphérique concerné, soit manuellement. Ils permettent de réduire la taille mémoire utilisée par le noyau lui-même. Le concept de modules permet aussi d'ajouter des drivers de périphériques au système sans devoir recompiler le noyau.
Bon, c'est clair il me semble (normal, c'est moi qui ai écrit ça ;). Les modules permettent aussi d'ajouter des drivers distribués uniquement sous forme binaire ; on ne peut pas les recompiler, mais on peut s'en servir (ce qui est assez intéressant finalement ;) Les modules ne sont pas que des drivers, d'une façon générale, ca peut être tout morceau de code qu'on a décidé d'externaliser par rapport au noyau, comme bien sûr un driver, mais aussi un protocole de communication (par ex. ppp) ou n'importe quoi d'autre.

Où se trouvent-ils ?

Ils résident dans /lib/modules/version_du_noyau. exemple : /lib/modules/2.2.15.

Ce répertoire contient les dossiers suivants qui permettent de séparer les modules selon leur type :
 

block/ périphériques de type bloc
fs/ systèmes de fichier (FAT, ext2, etc.)
misc/ périphériques divers (carte tuner TV, port parallèle, carte son, joystick, etc.)
net/ drivers des cartes réseaux et protocoles
scsi/ périphériques SCSI
cdrom/ drivers CDROM non IDE (anciens CD-ROMs)
ipv4/
ipv6/
protocole IP v4 et v6(protocole réseau)
pcmcia/ modules pour gérer les cartes PCMCIA
video/ gestion des cartes video en console, framebuffer

Ce répertoire peut contenir d'autres dossiers, plus un fichier nommé modules.dep, qui contient les dépendances entre modules (le module parport_ide à besoin du module parport, etc.). Ce fichier est généralement regénéré à chaque boot par la commande "depmod -a" placée dans les scripts de démarrage.

Comment les manipuler ?

Avec les programmes lsmod, insmod, rmmod et modprobe qui se situent dans /sbin.

Comment les recompiler / en ajouter ?

Modules livrés avec le noyau

Voir la rubrique noyau. Pour ajouter un module, il faut éditer la configuration du noyau, cocher l'option 'M' voulue dans la config du noyau, puis enregistrer la configuration noyau, faire :
# make dep ; make modules ; make modules_install
(Si vous modifiez également la configuration du noyau lui-même, par exemple en supprimant ou ajoutant des options qui sont incluses dans le noyau, vous devez aussi recompiler/réinstaller le noyau comme indiqué dans la rubrique noyau.)

Modules livrés en dehors du noyau

Parfois, des modules peuvent être trouvés en dehors de l'arborescence des sources du noyau. Par exemple, vous pouvez télécharger un driver pour certains winmodems (hé oui ça arrive !!!) sur cette page.
Certains de ces modules sont livrés sous forme binaire, on peut alors s'en servir tel quels (insmod -f ./le_module). D'autres sont livrés sous forme source sous license GPL ou non ; il faut d'abord les compiler (lisez la doc fournie avec ; cela nécessite en général d'avoir installé les sources du noyau).

Prise en compte des nouveaux modules

Pour que les modules nouvellement installés soient pris en compte, si ce sont des modules "hors noyau", il est bon de les copier dans /lib/modules/version_du_noyau/misc (pour les modules "noyau", la commande "make modules_install" fait ça)
Il faut aussi faire un :
# depmod -a
Cette commande remet à jour le fichier modules.dep, en fonction du ou des nouveaux modules.
Ainsi, vous pourrez charger le module par "modprobe le_module".

Comment faire pour les charger automatiquement ?

ou : le chargeur de modules et /etc/conf.modules

Tout ça c'est bien beau, mais si à chaque fois avant de regarder la télé, il faut faire "modprobe bttv", ou si à chaque fois qu'on veut lancer Xracer il faut faire "modprobe 3dfx", ça va vite devenir fastidieux.

Ce qu'on veut, c'est que le bon module se charge lorsqu'on utilise le périphérique (/dev/le_periph) correspondant. C'est simple. Il faut indiquer au chargeur de modules que pour acceder à ce périphérique il doit charger le module le_module. Cela se fait via son fichier de configuration : /etc/conf.modules.

Pour qu'un module soit chargé automatiquement, faire :
# ls -l /dev/le_periph
qui affiche une ligne ressemblant à :
crw-------   1 user     group 144, 12 May 25  2000 /dev/le_periph
Dans la ligne qui s'affiche, noter le numéro dit "majeur",  c'est à dire le premier numéro qui suit le groupe, ici "144". Notez ce numéro.

Remarque :
Le numéro majeur (ici 144) sert à déterminer quel driver est nécessaire pour piloter ce périphérique, le numéro mineur (ici 12) sert à différencier les périphériques utilisant un même driver.
Editez le fichier /etc/conf.modules dans votre éditeur de texte préféré et ajoutez une ligne :
alias char-major-144 le_module
en remplaçant bien sûr 144 par votre numéro, et le_module par votre module.
Par exemple, pour charger le module gérant la carte 3dfx, j'ai dans mon conf.modules la ligne suivante :
alias char-major-107 3dfx
Remarque :
Il existe des aliases prédéfinis pour remplacer char-major-xxx pour les périphériques courants : eth0 pour la première carte ethernet (eth1 pour la suivante, etc.), parport_lowlevel pour le port parallèle, sound pour la carte son, midi pour la partie midi de la carte son, etc.
Si votre module a besoin d'options, par exemple pour connaître une adresse ou une interruption, vous pouvez aussi ajouter une ligne du type :
options le_module irq=5 dma=0 dma2=1 mpu_io=0x388 io=0x370
Chaque module a ses propres options, reportez-vous à la documentation de votre module afin de les connaître.

Enfin, si vous voulez lancer une commande avant ou après que le module soit chargé en mémoire, vous pouvez ajouter une ligne du type :
pre-install le_module la_commande , ou :
post-install le_module la_commande

Voilà, c'est tout, maintenant lorsqu'un programme utilisera le periphérique, plus besoin de charger le module à la main, cela se fera automatiquement.

Pour plus d'infos, regardez la page man de depmod, et des autres programmes (insmod, lsmod, etc.).

Remarque : on peut faire des tas de choses "intéressantes" avec les modules, allez voir cette page par exemple... En résumé, si vous êtes un paranoïaque de la sécurité, n'utilisez pas les modules et compilez-vous un noyau complètement monolithique sans chargeur de modules (merci à BooK pour l'info).

Haut


Fin du chapitre