Linux_Kernel - Kasimashi/Systemes-embarques GitHub Wiki
Le noyau Linux
Le code source du noyau linux est disponible sur Github
Arborescence du projet Linux Kernel
L'arborescence du projet Linux Kernel (ou noyau Linux) fait référence à la structure des répertoires et fichiers qui composent le code source du noyau. Voici une vue d'ensemble de cette arborescence :
1. Répertoires principaux
-
/arch/
: Contient le code spécifique à chaque architecture matérielle supportée par Linux (par exemple x86, ARM, MIPS, etc.). Chaque architecture a son propre sous-répertoire, comme/arch/x86/
pour l'architecture x86. -
/block/
: Contient le code lié à la gestion des périphériques de bloc (disques durs, SSDs, etc.). Ce répertoire gère les opérations sur ces périphériques et la communication entre le noyau et ces dispositifs de stockage. -
/crypto/
: Regroupe tout le code relatif à la cryptographie dans le noyau, y compris les algorithmes de chiffrement et de hachage. -
/drivers/
: Contient les pilotes de périphériques pour divers matériels comme les cartes réseau, les cartes graphiques, les périphériques USB, etc. C'est un des répertoires les plus volumineux du noyau. -
/fs/
: Contient le code relatif aux systèmes de fichiers, comme ext4, XFS, Btrfs, etc. Il gère la façon dont les données sont organisées, stockées et accédées sur les disques. -
/include/
: Contient des fichiers d'en-tête (headers) utilisés par le noyau. Il y a des fichiers d'en-tête pour l'API du noyau, les structures de données, et les prototypes de fonctions. Ce répertoire est crucial pour la construction du noyau, car il définit les interfaces de programmation. -
/init/
: Contient le code d'initialisation du noyau, qui s'exécute lors du démarrage de la machine. Ce répertoire configure les différents aspects du noyau pour que le système fonctionne correctement après le boot. -
/ipc/
: Contient le code relatif à la gestion de la communication inter-processus (IPC), y compris les sémaphores, les files de messages, et la mémoire partagée. -
/kernel/
: Contient le code principal du noyau Linux. Il gère les aspects cruciaux du système, comme le planificateur (scheduler), la gestion de la mémoire, et le mécanisme d'interruption. -
/lib/
: Contient des fonctions utilitaires du noyau qui sont utilisées dans tout le projet. Par exemple, des fonctions pour la manipulation de chaînes de caractères, des algorithmes mathématiques, etc. -
/mm/
: Contient le code qui gère la mémoire du noyau. Cela inclut la gestion de la mémoire virtuelle, la pagination, et la gestion de la mémoire physique. -
/net/
: Contient le code pour la gestion du réseau, y compris les protocoles de communication (TCP, UDP, etc.) et la gestion des interfaces réseau. -
/samples/
: Fournit des exemples de code pour illustrer certaines fonctionnalités du noyau, comme l'utilisation des appels système ou des fonctionnalités spécifiques. -
/scripts/
: Contient des scripts utiles pour la construction du noyau et des outils associés, tels que la génération de configurations, la gestion des dépendances, et la compilation. -
/sound/
: Contient le code relatif à la gestion des périphériques audio et à la pile audio du noyau. -
/tools/
: Contient des outils utilitaires pour le noyau, notamment pour l’analyse des performances et le diagnostic. -
/usr/
: Ce répertoire contient des fichiers partagés pour l'utilisateur, comme des modules du noyau et des binaires nécessaires au système. -
/vmlinux/
: C'est le binaire final du noyau compilé. Il s'agit de l'image du noyau complète, prête à être utilisée par le chargeur d'amorçage pour démarrer le système.
2. Fichiers importants
-
Makefile
: Le fichier de construction principal du noyau. Il contient les instructions pour compiler le noyau et ses modules, ainsi que pour gérer les différentes configurations et cibles de compilation. -
Kconfig
: Des fichiers utilisés pour configurer la compilation du noyau à l'aide de menus interactifs (par exemple avecmake menuconfig
). Ils définissent quelles fonctionnalités du noyau doivent être activées ou désactivées. -
Config
: Le fichier de configuration du noyau. Il contient toutes les options de configuration qui déterminent les fonctionnalités activées ou désactivées dans le noyau (généralement généré à partir demake menuconfig
). -
CMakeLists.txt
: Un fichier utilisé dans certains cas pour la construction de certains modules ou parties du noyau en utilisant CMake (une alternative à Make). -
README
: Fournit une vue d'ensemble du projet, des instructions pour la compilation, et des informations sur l'état du projet.
3. Modules du noyau
Le noyau Linux est modulaire, ce qui signifie que de nombreuses fonctionnalités peuvent être ajoutées ou retirées du noyau via des modules. Ces modules sont stockés dans le répertoire /lib/modules/
et peuvent être chargés ou déchargés dynamiquement.
Conclusion
L'arborescence du projet Linux est conçue pour organiser les composants du noyau de manière logique, afin de faciliter le développement, la maintenance et la compréhension du système. Chaque répertoire a une fonction spécifique, et la structure permet aux développeurs de naviguer facilement dans le code source.
Génération d'un nouveau noyau Linux
La génération d’un nouveau noyau passe par les phases suivantes :
- la configuration des options du noyau ;
- la génération des dépendances (uniquement en 2.4) ;
- la compilation du noyau statique ;
- la compilation des modules, si nécessaire.
Toutes les phases de génération du noyau passent par l’utilisation de la commande make, largement utilisée dans tous les développements Unix et même sur d’autres systèmes d’exploitation. Le principe de cet utilitaire est de comparer la date des fichiers résultats par rapport à celle des fichiers sources en fonction de règles définies dans un fichier de commande nommé par défaut Makefile. Cela permet de générer uniquement les fichiers résultats dont les sources ont été modifiées depuis la dernière génération.