Alors que je peux utiliser lsmod
pour afficher les modules du noyau actuellement actifs, comment puis-je voir quels pilotes sont intégrés statiquement dans le noyau ET actuellement actifs ?
Réponses
Trop de publicités?Vous pourriez faire un cat /lib/modules/$(uname -r)/modules.builtin
Depuis le Documentaton du Kernel
modules.builtin
Ce fichier répertorie tous les modules qui sont intégrés au noyau. Cela est utilisé par modprobe pour ne pas échouer lors de la tentative de chargement de quelque chose d'intégré.
Si votre système linux a un /proc/config.gz
Qui contient tous les modules construits. Copiez-le ailleurs et décompressez-le. Ouvrez le fichier, tout ce qui est suivi de "=M" est construit en tant que module. Tout ce qui est suivi de "=Y" est construit de manière statique.
hwinfo listera le "Pilote:". Vérifiez le fichier ci-dessus pour voir s'il est construit de manière statique.
À noter : Tous les pilotes construits de manière statique sont toujours chargés en mémoire et prêts à être utilisés. Sans le matériel correspondant, ils ne feront rien, mais utiliseront de la mémoire.
La zone du module sysfs /sys/module
est une vue sur tous les modules visibles par le noyau en cours d'exécution. Chaque répertoire de module a un ensemble de fichiers d'interface sysfs pour visualiser et gérer le module via l'espace utilisateur. En général, les LKMs ont un fichier refcnt
, qui sera supérieur à 0 s'il est utilisé en conjonction avec un répertoire holder
des modules l'utilisant. Les modules intégrés n'ont pas ce fichier (ou beaucoup d'autres comme initstate
et taint
.)
Essayez find /sys/module -name refcnt -printf '\n%p: ' -exec cat {} \;
pour voir lesquels sont utilisés.
Sous de nombreux modules se trouve un répertoire parameters
contenant les paramètres qui peuvent être visualisés et modifiés depuis l'espace utilisateur. Dans le code source, cela correspond généralement à un appel à une macro module_param
. Par exemple, consultez kernel/printk.c
et le module /sys/module/printk/parameters
pour des réglages utiles de printk.
Toutes les entités sous /sys/module
sont définies dans le framework du module de noyau. Certains sont des pilotes matériels, certains sont netfilter, certains sont des systèmes de fichiers, certains sont des outils de débogage, etc.
ls /sys/module
semble contenir tous les modules intégrés et externes.
Mais il semble également contenir quelques entrées qui ne sont pas réellement des modules : https://unix.stackexchange.com/questions/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
TODO: lire la source et comprendre plus précisément ce qui y est placé.
L'avantage de cette méthode est que vous ne dépendez pas de la possibilité de trouver la configuration du noyau sous /boot
ou /proc/config.gz
.
J'allais commenter la réponse de cybernard, mais sans réputation sur ce service StackExchange spécifique, je ne peux pas.
Pour vérifier rapidement /proc/config.gz
par rapport à un module spécifique, vous n'avez pas besoin de le décompresser quelque part (utile lorsque vous ne voulez pas écrire sur une partition de votre appareil) :
$ gunzip -c /proc/config.gz | grep 8021Q
CONFIG_VLAN_8021Q=y