Il y a deux façons de construire les modules du noyau Linux : 1. en tant que partie du binaire exécutable du noyau (image compressée), c'est-à-dire avec CONFIG_*=y
au moment de la construction, ou 2. en tant qu'objet distinct du noyau ( .ko
) qui peuvent être chargées et déchargées sous certaines conditions, c'est-à-dire construites avec CONFIG_*=m
options.
Dans le second cas, le .ko
Les fichiers sont placés à un ou plusieurs endroits standard, généralement à l'adresse suivante /lib/modules/
sous Linux et son équivalent sous Android /system/lib/modules/
o /vendor/lib/modules/
. Ces chemins sont codés en dur dans les binaires qui les chargent, par ex. insmod
, modprobe
.
Sur les versions pré-Pie ( 1 ) Par défaut, le noyau Android est construit sans option. CONFIG_MODULES=y
Il n'y a donc pas de module de noyau construit en tant que .ko
qui peuvent être chargées ou déchargées avec insmod
, modprobe
o rmmod
comme c'est le cas avec les distros Linux standard. Ils ne sont pas non plus exposés à travers /proc/modules
d'où lsmod
lit l'information. Cependant, chaque composant du noyau qui peut être construit en tant que module possède une entrée dans le fichier /sys/module
.
Maintenant, ces modules qui sont compilés et chargés en tant que .ko
a un fichier correspondant /sys/module/<module>/initstate
que d'autres n'ont pas. Vous pouvez confirmer de cette façon s'il y a des modules chargés :
~$ ls /sys/module/*/initstate