Quels pilotes de périphérique sont intégrés dans le noyau?

14

J'ai récemment installé un fournisseur Linux intégré sur un périphérique matériel. Lorsque j'ai exécuté lsmodsur la ligne de commande du périphérique, la réponse était vide. J'étais amené à croire que cela signifie que les pilotes du matériel fonctionnant sur le périphérique avaient été intégrés dans le noyau plutôt que sous forme de fichiers .ko. Ma question est la suivante: comment se déroule ce processus?

La prise en charge du matériel populaire est-elle progressivement intégrée au noyau dans les versions ultérieures, remplaçant ainsi les fichiers .ko? Le fichier .ko est-il simplement utilisé pour prendre en charge un nouveau matériel qui ne prend pas en charge les pilotes intégrés au noyau au moment de la publication? Dans ma connaissance limitée, je pensais que tous les pilotes matériels étaient de la forme de fichiers .ko mais clairement c'est faux.

Je suis légèrement confus par l'ensemble du processus et je vous serais reconnaissant de clarifier car j'ai le sentiment que je peux considérer la situation de la mauvaise façon.

mathématicien1975
la source
superuser.com/questions/287371/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

10

Les pilotes de base qui sont considérés comme essentiels au chargement du noyau sont généralement intégrés au noyau, tandis que les autres pilotes matériels, etc. sont construits sous forme de modules ou de fichiers .ko .

Les modules .ko sont généralement stockés dans le /librépertoire de votre partition racine. Pour utiliser l'un de ces éléments, le noyau doit d'abord pouvoir détecter et accéder au périphérique de stockage sous-jacent, puis accéder à son système de fichiers. Il est donc sûr de supposer qu'un noyau sans SATA / SCSI et support ext2 / 3/4 intégré ne démarrera pas vraiment;)

Vous pouvez choisir de basculer la plupart des pilotes de noyau intégrés sous forme de module. L'équipe du noyau Ubuntu décide de modifier la configuration par défaut de l'équipe du noyau Linux et d'inclure / exclure des pilotes intégrés supplémentaires pour les images du noyau stock que vous téléchargez.

Si vous construisez votre propre noyau, vous pouvez faire de même:

entrez la description de l'image ici

  • Dans la capture d'écran ci-dessus, le *indique un pilote intégré, tandis que Mindique un module.
  • La prise en charge des périphériques de bouclage, qui est souvent essentielle au démarrage d'un système, est intégrée par défaut.
  • Le pilote USB à faible vitesse (USB 1.0) est également intégré par défaut pour vous permettre de démarrer à partir d'une clé USB, mais ici je l'ai changé en module.
ish
la source
Merci qui aide beaucoup. Je suppose que j'aurai une meilleure compréhension de cela quand je finirai par faire moi-même une construction du noyau.
mathématicien1975
3

Lors de la compilation d'un noyau , vous pouvez configurer les composants installés. Non seulement cela, mais vous pouvez choisir s'ils sont intégrés dans le noyau ou s'ils sont un module .

Par exemple, de nombreuses personnes utilisent le système de fichiers ext2 sur leur partition / boot . Pour cette raison, le noyau doit être capable de lire les systèmes de fichiers ext2 au démarrage. Pour ce faire, le module ext2 est intégré au noyau lui-même.

Imaginez maintenant la quantité de modules disponibles. Cela n'aurait aucun sens de les avoir tous intégrés à votre noyau, n'est-ce pas? C'est pourquoi vous pouvez les construire en tant que modules .ko séparés et les charger à volonté.

EarthmeLon
la source
1
Oui, votre dernier paragraphe est ce qui a motivé ma question pour être honnête. Merci pour la réponse
mathématicien1975
1

Cela dépend de la façon dont vous avez configuré votre build du noyau Linux.

Dans un processus de compilation, vous pouvez généralement:

  • compiler le noyau avec ou sans support de module (il est souvent livré avec le support de module)
  • compiler un pilote sous forme de module ou de logiciel intégré directement dans le noyau

pour comprendre ce qu'est un fichier .ko pour /programming/10476990/difference-between-o-and-ko-file

La raison pour laquelle vous avez une sortie vide lsmodest parce que vous avez un noyau monolithique.

Un moyen rapide pour lister tous vos modules (s'ils sont présents) est d'exécuter cette commande

find /lib/modules/*/ -type f -iname '*.ko' | less

remarquez l'utilisation de less, vous pouvez utiliser chaque pager que vous souhaitez ou rediriger la sortie où vous le souhaitez.

user827992
la source
Donc, sur un noyau configuré sans support de module (comme le mien semble l'être), je ne pourrais pas installer de pilotes sous forme de fichiers .ko pour utiliser du matériel supplémentaire?
mathématicien1975
oui, fondamentalement, vous devez le recompiler à partir de la source, si vous souhaitez modifier et / ou ajouter des pilotes, vous devez le reconstruire, peut-être simplement utiliser le même .configfichier et le modifier selon vos besoins.
user827992
Donc, pour ce faire, j'aurais besoin d'obtenir la source du noyau auprès du fournisseur, de la compiler moi-même avec les modifications correctes du fichier .config, puis-je être prêt à installer d'autres pilotes?
mathématicien1975
dépend, s'il a utilisé un noyau vanille (sans rien de plus que le code source d'origine) vous êtes d'accord avec juste le .config et vous pouvez reproduire le même noyau juste avec votre pc, cependant s'il a utilisé un noyau vanille + quelques correctifs ou modifications vous avez besoin de ces informations supplémentaires, un Makefile personnalisé peut également être considéré comme une variable pertinente comme toute autre modification de la chaîne d'outils standard et en général du processus de construction standard.
user827992
D'après mon expérience, les modules sont désactivés pour Linux embarqué, pour des raisons de vitesse et de taille, et les noyaux de ces périphériques contiennent souvent des pilotes hors arborescence et sont construits sur le PC d'un employé aléatoire sans bénéficier du contrôle de source. Bonne chance avec ça.
Stephen M. Webb du
0

Voir le contenu du fichier / lib / modules / $ (uname -r) /modules.builtin

par exemple pour rechercher un module spécifique

grep <module> /lib/modules/$(uname -r)/modules.builtin

Documentation / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
Andrew
la source
??? Je ne sais pas ce que l'OP est censé faire. Est-il censé exécuter la première ligne du terminal? Cela pourrait être la réponse, mais pourriez-vous développer un peu?
anonymous2
0
ls /sys/module

semble contenir tous les modules intégrés et externes.

Mais il semble également contenir des entrées qui ne sont pas réellement des modules: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules

TODO: lisez la source et comprenez plus précisément ce qui y est mis.

L'avantage de cette méthode est que vous ne comptez pas sur la possibilité de trouver la configuration du noyau sous /bootou /proc/config.gz.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source