J'ai récemment installé un fournisseur Linux intégré sur un périphérique matériel. Lorsque j'ai exécuté lsmod
sur 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.
Réponses:
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
/lib
ré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:
*
indique un pilote intégré, tandis queM
indique un module.la source
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é.
la source
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:
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
lsmod
est 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
remarquez l'utilisation de
less
, vous pouvez utiliser chaque pager que vous souhaitez ou rediriger la sortie où vous le souhaitez.la source
.config
fichier et le modifier selon vos besoins.Voir le contenu du fichier / lib / modules / $ (uname -r) /modules.builtin
par exemple pour rechercher un module spécifique
Documentation / kbuild / kbuild.txt
la source
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
/boot
ou/proc/config.gz
.la source