Vous êtes sur la page 1sur 21

Administration avancée

des systèmes et réseaux


sous Linux

Chapitre 1. Le noyau Linux

Prof. M. RIDOUANI
Objectifs
• Composants du noyau
• Compilation d'un noyau
• Mise à jour d'un noyau
• Personnalisation, construction et installation
d'un noyau et des modules noyau
• Gestion/interrogation du noyau et des
modules noyau en exécution

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 2


Plan
Histoire du Noyau Linux
1. Les versions du noyau Linux
2. Modification et configuration du noyau
3. La modification dynamique des paramètres du
noyau
4. Construction d'un noyau Linux
5. Mise à jour d’un noyau
6. Chargement dynamique des modules du noyau

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 3


Histoire du Noyau Linux
• Initiateur : Linus Torvalds en 1991
Linus Torvalds : un étudiant finlandais de l'université d'Helsinki
• Apprentissage sur Minix
Minix : un S.E. écrit dans un but pédagogique par Andrew Tanenbaum
• 5 oct. 1991 : Linus Torvalds annonce la disponibilité de son S.E. en
version 0.02
• De Freax à Linux
– Initialement appelé Freax = free + freak + Unix (par Linus Torvalds)
– Nom définitif : Linux = Linus + Unix (grâce à Ari Lenk)
• Le noyau Linux = kernel
• Les noyaux sont téléchargeables sur le site kernel.org (notamment la
dernière version stable). Par exemple pour un noyau 3.18 :
http://www.kernel.org/pub/linux/kernel/v3.x/
https://mirrors.edge.kernel.org/pub/linux/kernel/
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 4
1. Les versions du noyau Linux
Jusqu’à la version 2.6, les différentes versions du noyau Linux sont
désignées par un numéro composé de trois séquences de chiffres
délimitées par un point :
• la première séquence est le numéro de la version majeure. Ce numéro a
été modifié uniquement pour des changements majeurs dans le code et
le concept du noyau, en 1994 (version 1.0) et en 1996 (version 2.0) ;
• la deuxième séquence est le numéro de la version mineure. Avant
l'apparition des versions 2.6.x, les numéros mineurs pairs indiquaient une
version stable et les numéros mineurs impairs une version de
développement. Ainsi, les versions 2.2, 2.4 sont stables, les versions 2.3 et
2.5 sont des versions de développement. Cependant, depuis la version 2.6
du noyau, ce modèle de numérotation stable/développement a été
abandonne et il n'y a donc plus de signification particulière aux numéros
mineurs pairs ou impairs.
• la troisième séquence est le numéro de révision. Ce numéro est
incrémenté chaque fois qu’une nouvelle version du noyau est diffusée,
que ce soit pour des correctifs de sécurité, des corrections de bogues,
l’ajout de nouvelles fonctionnalités ou de nouveaux pilotes.

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 5


1. Les versions du noyau Linux

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 6


2. Modification et configuration du noyau
• Pourquoi modifier ou configurer le noyau?
– Adapter le noyau à des besoins spécifiques, augmenter les performances,
renforcer la sécurité.
– Ajouter de nouveaux pilotes de périphériques
• Comment modifier la configuration d’un noyau Linux?
– modification dynamique des paramètres de configuration du noyau ;
– construction d'un noyau à partir de zéro (compilation du code source, avec
éventuellement des modifications et des ajouts) ;
– chargement de modules dans un noyau existant, à la volée ;
– passage de paramètres en utilisant le chargeur de démarrage : LILO ou
GRUB.

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 7


3. La modification dynamique des paramètres du
noyau
• Le noyau peut être ajusté dynamiquement à travers des
paramètres du système. Ces paramètres sont accessibles et
modifiables à partir des fichiers du répertoire /proc/sys.

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 8


3. La modification dynamique des paramètres du
noyau
• EXEMPLE: pour activer le relayage (forwarding) entre les cartes
réseaux, on peut modifier le fichier /proc/sys/net/ipv4/ip_forward de
la façon suivante :
# echo 1 > /proc/sys/net/ipv4/ip_forward
pour désactiver le relayage :
# echo 0 > /proc/sys/net/ipv4/ip_forward
• On peut définir/modifier ces paramètres (ces variables) soit à partir de
la ligne de commande, soit en lisant une liste de paires variable = valeur
(exemple: net.ipv4.ip_forward = 0 )dans le fichier /etc/sysctl.conf.
• Par défaut, le fichier /etc/sysctl.conf est lu au moment du démarrage et
son contenu est utilisé pour définir les valeurs de paramètre initiales.
• En cours d’exécution, les paramètres du noyau peuvent aussi être
modifiés par la commande sysctl.
(exemple: sysctl –w net.ipv4.ip_forward=1)
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 9
4. Construction d'un noyau Linux
• On peut être amené à compiler et installer un nouveau noyau
Linux pour intégrer des correctifs (patchs), des pilotes de
périphériques ou de nouvelles fonctionnalités. Le code source et
les correctifs des noyaux Linux sont disponibles sur le site
www.kernel.org.

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 10


4. Construction d'un noyau Linux
Etape 0: télécharger le code source du noyau
Etape 1: décompresser les archives de code source linux
Etape 2: configuration du noyau
Les informations sur la configuration du noyau sont stockées dans le fichier
.config situé à la racine du répertoire source du noyau /usr/src/linux-version
• make config = Pose une question a chaque fonction (module) si elle doit ou non
être activée, en proposant quatre choix possibles sous la forme [Y / m / n /?]
– Y (« yes ») pour intégrer la fonction directement dans le noyau. C’est le choix par défaut, il
peut être sélectionné en appuyant simplement sur la touche [Entrée] ;
– m (« module ») pour construire un module qui va être chargé de façon dynamique ;
– n (« no ») pour ne pas activer la fonction ;
– ? pour afficher un message décrivant la fonction.
• make oldconfig = S'appuie sur un fichier .config déjà utilisé et récupéré d'une
ancienne version
• make defconfig = S'appuie sur toutes les valeurs par défaut
Autre possibilités avec :
• make menuconfig = la commande permet de configurer les options du noyau dans
le fichier de réponse .config
• make xconfig ou make gconfig = Avec une interface graphique

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 11


4. Construction d'un noyau Linux
Etape 2: configuration du noyau

make menuconfig

make gconfig

make xconfig

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 12


4. Construction d'un noyau Linux
Etape 3: Compilation du noyau
• La commande make permet de compiler le noyau avec la configuration
définie dans l'étape précédente, ainsi que tous les modules nécessaires à cette
configuration.
• Si la compilation du noyau se termine sans erreur, le résultat est un
fichier binaire : le fichier image du noyau (kernel image) sous
arch/i386/boot/bzImage et les modules que le noyau va utiliser de
façon dynamique

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 13


4. Construction d'un noyau Linux
Etape 4: Installation et démarrage du nouveau noyau
• Dans cette étape, à la différence des étapes précédentes, toutes les commandes
doivent être exécutées avec les droits root.
• L'installation du nouveau noyau peut être réalisée soit en utilisant des scripts
offerts par la distribution installée, soit de façon manuelle
• La plupart des distributions Linux sont livrées avec un script appelé installkernel qui
peut être utilisé lors de l'installation d’un nouveau noyau compilé.
• Ce script permet de copier le nouveau noyau dans le répertoire approprié et de
modifier le chargeur de démarrage afin que ce nouveau noyau puisse être
sélectionné lors du démarrage du système.
• make modules_install = Installe les modules qui sont copiées dans un
répertoire /lib/modules/version
• make install = Cette commande déclenche le processus suivant :
1. Vérification de la bonne construction du nouveau noyau.
2. Copie le noyau (bzImage) sous /boot/vmlinuz-version
3. Création de toutes les images RAM Disk nécessaires, en utilisant les modules installés lors
de l’exécution de la commande make modules_install.
4. Ajout d’une entrée dans le fichier de configuration du chargeur de démarrage pour le
nouveau noyau.

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 14


4. Construction d'un noyau Linux (toutes les étapes)

• cd to the top level of the kernel source directory.


• Run make config, make oldconfig, or make menuconfig , ….
• Run make clean. (nettoie tous les éléments déjà compilés mais
garde le fichier .config)
• Run make mrproper. (Nettoyage complet : Les fichiers compiles et
le fichier .config)
• Run make.
• Run make modules_install.
• Run make install
– Copy arch/i386/boot/bzImage to /boot/vmlinuz.
– Copy arch/i386/boot/System.map to /boot/System.map.
– Edit /etc/lilo.conf (LILO) or /boot/grub/grub.conf (GRUB) to add a
configuration line for the new kernel.
– If you are using LILO, run /sbin/lilo to install the reconfigured boot loader.
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 15
5. Mise à jour d’un noyau
• Motivation:
– correction de quelques bugs dans la dernière version du noyau, un
problème de sécurité a corrigé, ou autre. Sans perdre le temps déjà
déployé pour la personnalisation et la compilation du noyau.
– facilité de mettre à jour un noyau d'une version ancienne tout en
conservant toutes les options de la configuration précédente.
• Cinq étapes sont nécessaires pour mettre à niveau un noyau déjà
compilé et installé :
– 1. Obtenir le nouveau code source.
– 2. Appliquer les modifications sur l'ancienne arborescence du code source
du noyau pour le mettre à niveau.
– 3. Reconfigurer le nouveau noyau en se basant sur la configuration
précédente.
– 4. Compiler le nouveau noyau.
– 5. Installer le nouveau noyau.
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 16
5. Mise à jour d’un noyau
• Quel correctif s'applique à quelle version? (Which Patch Applies to
Which Release?)
• Un fichier de patch, est appliqué sur l’arborescence du code source
existant, créant ainsi une nouvelle arborescence. Le patch contient les
changements à apporter aux anciens fichiers, et de nouveaux fichiers.
• Voici comment les patchs peuvent être appliqués :
– les patchs du noyau stable peuvent être appliqués sur une version de base du
noyau, par exemple le patch 2.6.35.6 peut être appliqué seulement sur la
version 2.6.35 du noyau. Ainsi, il ne peut pas être appliqué sur la précédente
version du noyau (version 2.6.35.5) ;
– un patch d'une version de base ne peut être appliqué que sur un noyau de la
version de base précédente. Cela signifie que le patch 2.6.36 ne s'applique qu'à
la version 2.6.35 du noyau. Il ne s'appliquera pas à la dernière version stable du
noyau 2.6.35.y ni à toute autre version ;
– les patchs incrémentaux permettent la mise à niveau d’une version donnée
vers la version qui la suit immédiatement. Ainsi les développeurs ne sont pas
obligés de télécharger un noyau, puis de le mettre à jour, juste pour passer
d’une version stable à la suivante (on rappelle que les patchs d'une version
stable ne s'appliquent que sur une version de base du noyau, et non sur la
précédente version stable).
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 17
5. Mise à jour d’un noyau
• Quel correctif s'applique à quelle version? (Which Patch Applies
to Which Release?)
• Exemple:
version de base 2.6.17 2.6.17.9

Oui? Oui?
Patch stable 2.6.17.10 Non?
Patch stable 2.6.17.10 Non?

2.6.17.10 2.6.17.10

2.6.17.9
version de base 2.6.17 Oui?
Patch incrémental 2.6.17.9-10 Non?
Oui?
Patch de base:2.6.18 Non?
2.6.17.10
Oui?
Patch incrémental 2.6.17.10-11 Non?
version de base 2.6.18
2.6.17.11
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 18
5. Mise à jour d’un noyau
Patcher un noyau et supprimer le patch
• # bunzip2 patch-2.x.y.bz2 = décompresse le patch s'il est fourni
compressé
• # cd /usr/src/linux = on se place dans le répertoire
• # patch -p1 le_chemin_vers_le/patch-2.x.y =
# patch -p1 < patch-nouvelle_version = Patcher le noyau
(appliquer le patch), sous le niveau hiérarchique ≪ -1 ≫ a
modifier (sans espace entre ≪ -p ≫ et le niveau hiérarchique a
modifier
• # patch -R -p1 < patch-nouvelle_version = Supprime (= ≪ -R ≫ =
remove)

Pr. RIDOUANI: Chapitre 1. Le noyau Linux 19


6. Chargement dynamique des modules du noyau
• Le noyau Linux supporte un chargement dynamique des modules : il est
possible de les charger ou de les supprimer quand le noyau est en cours
d’exécution.
• Les modules sont situes sous : /lib/modules/version/ kernel/drivers
Informations sur les modules
• lsmod = Affiche les modules chargés en mémoire
• modprobe -l = Liste tous les modules disponible dans le système
• modinfo msdos = Informe sur le module ≪ msdos.ko≫
Installation
• insmod module = Insère un module en mémoire
• modprobe module = Charge un module en mémoire (elle peut déterminer les
dépendances entre les modules et installer automatiquement les modules
nécessaires)
Suppression
• rmmod module = Supprime un module en mémoire = Le décharge
• modprobe -r module = Supprime un module en mémoire (≪ r ≫ = remove), et
tente de supprimer les modules non-utilises lies a ce module
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 20
6. Chargement dynamique des modules du noyau

Fichier /etc/modules.conf et /etc/modprobe.conf


• modules.conf = noyau 2.4, et modprobe.conf = noyau ≥ 2.6.xxx
Ce fichier permet de configurer certains modules et de définir des
associations entre module et périphérique
– Par exemple: alias eth0 3c59x = Associe la carte réseau "eth0" avec le
driver ou pilote (module) "3c59x".
Fichier modules.dep
• Ce fichier est génère par la commande depmod (étape 3:
compillation ) et liste les dépendances de chaque module dans le
répertoire /lib/modules/version, ou se situe modules.dep
• Les lignes dans le fichier modules.dep sont sous la forme :
– nom_module.ko : dependance1 dependance2 ….
– Par exemple: $ grep msdos /lib/modules/2.6.35.5/modules.dep
kernel/fs/fat/msdos.ko: kernel/fs/fat/fat.ko
Pr. RIDOUANI: Chapitre 1. Le noyau Linux 21

Vous aimerez peut-être aussi