Duplicata possible:
Que contient une arborescence des sources du noyau? Est-ce lié aux en-têtes du noyau Linux?
Je sais que si je veux compiler mon propre noyau Linux, j'ai besoin des en-têtes du noyau Linux, mais à quoi servent-ils exactement?
J'ai découvert que sous /usr/src/
il semble y avoir des dizaines de fichiers d'en-tête C. Mais quel est leur but, ne sont-ils pas directement inclus dans les sources du noyau?
Les fichiers d'en-tête définissent une interface: ils spécifient comment les fonctions du fichier source sont définies.
Ils sont utilisés pour qu'un compilateur puisse vérifier si l'utilisation d'une fonction est correcte car la signature de la fonction (valeur de retour et paramètres) est présente dans le fichier d'en-tête. Pour cette tâche, l'implémentation réelle de la fonction n'est pas nécessaire.
Vous pouvez faire de même avec les sources complètes du noyau mais vous installerez beaucoup de fichiers inutiles.
Exemple: si je veux utiliser la fonction
int foo(double param);
dans un programme, je n'ai pas besoin de savoir comment est l'implémentation de foo
, j'ai juste besoin de savoir qu'il accepte un seul paramètre (double
) et retourne un entier.
Comme indiqué, les fichiers d'en-tête définissent les interfaces avec les fonctions ainsi que les structures utilisées par les programmes.
Dans le cas des fichiers d'en-tête du noyau, ces fonctions et structures se trouvent dans le noyau lui-même.
Si vous construisez un noyau complet, alors, évidemment, vous avez besoin des fichiers source complets, pas seulement des en-têtes. Cependant, si vous compilez un pilote de périphérique ou un autre module chargeable qui se connecte au noyau, vous n'avez besoin que des fichiers d'en-tête, vous pouvez donc économiser de l'espace en n'installant pas les sources complètes.
La séparation des packages pour que vous puissiez installer uniquement les fichiers d'en-tête est en partie historique, car la différence d'utilisation du disque était une considération importante lorsque les disques étaient plus petits. De nos jours, avoir la source entière sur le disque (inutilement) ne serait pas une considération majeure d'espace disque.
Le terme fichiers d'en-tête provient du langage de programmation C utilisé pour écrire le noyau Linux.
Pour l'expliquer à un très haut niveau ...
En C, vous devez avoir une déclaration avant d'une fonction avant de l'utiliser. En d'autres termes, une description de la fonction, de ses paramètres et du type de données qu'elle renvoie. Il est courant de placer toutes les déclarations avancées dans un seul fichier appelé en-tête . Les fichiers de code source pour d'autres programmes peuvent alors include
cet en-tête et avoir accès à toutes les fonctions de l'exécutable du programme résultant une fois qu'il a été compilé.
Les fichiers d'en-tête Linux sont tous les .h
fichiers contenant les fonctions fournies par le noyau Linux pouvant être appelées à partir d'autres programmes.