web-dev-qa-db-fra.com

Comment le noyau Linux traite-t-il les pilotes?

Je viens de lire sur la façon dont Linux traite les pilotes de matériel. Apparemment, la plupart des pilotes matériels sont pré-compilés dans le noyau Linux. J'ai quelques questions à ce sujet ...

Si le noyau Linux contient des pilotes matériels pour presque tous les périphériques existants. Et si un ordinateur portable fonctionnant sous Linux ne comporte qu'un certain nombre de périphériques matériels, qu’en est-il de tous les pilotes matériels redondants du noyau Linux? N’est-ce pas un gaspillage de ressources que de garder tous ces pilotes dans le noyau et de les maintenir en fonctionnement dans le système même lorsque nous ne les utilisons pas?

5
Uday Kumar

D'abord un peu d'histoire. Dans les premiers temps de Linux, les pilotes de périphérique étaient en effet directement compilés dans le noyau. En fait, il est toujours possible de compiler les pilotes directement dans le noyau et de nombreux noyaux peuvent encore inclure des pilotes très communs inclus de cette façon. La façon dont cela fonctionnait était que le noyau générique fourni avec les premières distributions comme SLS ou Slackware comprenait pratiquement tous les pilotes pris en charge, pris en charge directement par le noyau, afin de fonctionner sur la plus grande variété de matériel possible. Même à ce moment-là, il n’était pas possible de toutes les intégrer car certaines sont incompatibles. Ensuite, une fois votre système installé, vous construirez votre propre noyau, en suivant attentivement la configuration pour vous assurer que vous avez inclus les pilotes appropriés pour tout ce que votre ordinateur possède. Parfois, il fallait éditer manuellement les fichiers d'en-tête dans le pilote pour inclure la prise en charge du matériel oddball - une carte Ethernet utilisant un chipset particulier utilisait les pilotes de ce chipset, mais il y avait parfois des façons amusantes de le mettre en œuvre. Ensuite, vous compilez, installez et, espérons-le, après un redémarrage, vous disposerez d’un noyau personnalisé conçu uniquement pour votre ordinateur. Maigre et optimisé. En réalité, vous répétez généralement ce processus plusieurs fois, y compris en omettant certains éléments, en prenant en charge un système de fichiers que vous avez oublié ou en modifiant les paramètres d'une manière ou d'une autre. Rincer et répéter.

Heureusement, ces jours sont révolus. Le noyau supporte depuis très longtemps des modules chargeables. Ce sont des pilotes de noyau compilés pour devenir un type de bibliothèque partagée pouvant être chargés ou déchargés à la demande. Maintenant, la façon dont le noyau démarre est que vous avez le fichier du noyau lui-même et un petit système de fichiers compressé (regardez initramfs sur Wikipedia) qui contient tous les modules du noyau pris en charge par le noyau. Le noyau se charge, il trouve son système de fichiers initial, puis il peut commencer à charger tous les pilotes nécessaires.

Ce petit bout d’histoire demande beaucoup de travail et de sueur. Entre l'utilisation de tous les pilotes compilés dans un grand noyau monolithique et la mise en place d'un système de chargement de pilote entièrement automatisé, nous avons aujourd'hui toutes les étapes de ce chemin où nous avons eu des modules à charger explicitement, un chargement semi-automatique pour certains, etc. etc.

Ainsi, étant donné que les noyaux modernes exigent de charger la grande majorité des pilotes dont ils ont besoin, il n’existe aucun nombre important de pilotes matériels redondants utilisant les ressources du noyau d’une distribution Linux moderne.

9
Kurt Fitzner