Mise à jour : Debian 10.6
Les modules externes, par opposition aux modules internes, ne sont pas inclus dans le noyau vmlinuz, mais sont présents dans le système de fichier racine. Ils doivent être chargés pour être utilisés.
Sommaire
$ dpkg -L linux-image-$(uname -r) |grep .ko |head
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/aegis128-aesni.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/aesni-intel.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/blake2s-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/blowfish-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/camellia-aesni-avx-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/camellia-aesni-avx2.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/camellia-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/cast5-avx-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/cast6-avx-x86_64.ko
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/arch/x86/crypto/chacha-x86_64.ko
$ ls -l /lib/modules/5.8.0-0.bpo.2-amd64/kernel/
total 40
drwxr-xr-x 3 root root 4096 oct. 10 11:52 arch
drwxr-xr-x 2 root root 4096 oct. 10 11:52 block
drwxr-xr-x 4 root root 4096 oct. 10 11:52 crypto
drwxr-xr-x 74 root root 4096 oct. 10 11:52 drivers
drwxr-xr-x 59 root root 4096 oct. 10 11:52 fs
drwxr-xr-x 8 root root 4096 oct. 10 11:52 lib
drwxr-xr-x 2 root root 4096 oct. 10 11:52 mm
drwxr-xr-x 52 root root 4096 oct. 10 11:52 net
drwxr-xr-x 15 root root 4096 oct. 10 11:52 sound
drwxr-xr-x 3 root root 4096 oct. 10 11:52 virt
La commande modinfo permet d'obtenir des informations sur un module qu'il soit chargé ou non
$ sudo modinfo -F filename btusb
/lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btusb.ko
$ sudo modinfo -a btusb
Marcel Holtmann <marcel@holtmann.org>
$ sudo modinfo -d btusb
Generic Bluetooth USB driver ver 0.8
$ sudo modinfo -p btusb
disable_scofix:Disable fixup of wrong SCO buffer size (bool)
force_scofix:Force fixup of wrong SCO buffers size (bool)
enable_autosuspend:Enable USB autosuspend by default (bool)
reset:Send HCI reset command on initialization (bool)
$ sudo modinfo -F version btusb
0.8
$ sudo modinfo -F depends btusb
usbcore,btbcm,btrtl,bluetooth,btintel
Cette liste ne comprend pas les dépendances des dépendances : voir modprobe -D
$ sudo modinfo -F firmware btusb
mediatek/mt7668pr2h.bin
mediatek/mt7663pr2h.bin
$ sudo modinfo -F alias btusb |head
usb:v8087p0A5Ad*dc*dsc*dp*ic*isc*ip*in*
usb:v0930p*d*dc*dsc*dp*icFFisc01ip01in*
usb:v413Cp*d*dc*dsc*dp*icFFisc01ip01in*
usb:v13D3p*d*dc*dsc*dp*icFFisc01ip01in*
usb:v050Dp*d*dc*dsc*dp*icFFisc01ip01in*
usb:v0B05p*d*dc*dsc*dp*icFFisc01ip01in*
usb:v0A5Cp*d*dc*dsc*dp*icFFisc01ip01in*
usb:v04CAp*d*dc*dsc*dp*icFFisc01ip01in*
usb:v0489p*d*dc*dsc*dp*icFFisc01ip01in*
usb:v0BB4p*d*dc*dsc*dp*icFFisc01ip01in*
$ sudo modinfo -F alias iwlwifi |head
pci:v00008086d00007AF0sv*sd00000A10bc*sc*i*
pci:v00008086d00007AF0sv*sd00000510bc*sc*i*
pci:v00008086d00007AF0sv*sd00000310bc*sc*i*
pci:v00008086d00007AF0sv*sd000000B0bc*sc*i*
pci:v00008086d00007AF0sv*sd00000090bc*sc*i*
pci:v00008086d00007A70sv*sd00000A10bc*sc*i*
pci:v00008086d00007A70sv*sd00000510bc*sc*i*
pci:v00008086d00007A70sv*sd00000310bc*sc*i*
pci:v00008086d00007A70sv*sd000000B0bc*sc*i*
pci:v00008086d00007A70sv*sd00000090bc*sc*i*
Chaque ligne ci-dessus correspond à un alias et indique
les lettres d (device) et sv dans le cas d'un composant sur le bus pci -
d00007A70
La commande modprobe, avec l'option -D, fournit la liste complète des dépendances et de leurs dépendances
$ sudo modprobe -D btusb
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/lib/crypto/libaes.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/lib/crc16.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/usb/common/usb-common.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/usb/core/usbcore.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/net/rfkill/rfkill.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/crypto/ecc.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/crypto/ecdh_generic.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/net/bluetooth/bluetooth.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btintel.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btbcm.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btrtl.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btusb.ko
lsmod fournit la liste des modules chargés :
La colonne "Used " indique combien de fois le module est utilisé
La colonne "by" indique qui utilise le module (généralement un nom de module, ..)
$ lsmod |head
Module Size Used by
ctr 16384 1
ccm 20480 3
rfcomm 90112 12
fuse 139264 3
cmac 16384 1
bnep 28672 2
intel_rapl_msr 20480 0
intel_rapl_common 32768 1 intel_rapl_msr
snd_hda_codec_hdmi 73728 1
La commande suivante charge un module avec ses dépendances
$ sudo modprobe btusub
Pour charger un module en spécifiant un ou des paramètres :
$ sudo modprobe btusb reset="N"
Le déchargement d'un module s'effectue avec la commande
$ sudo modprobe -r btusb
$ sudo modprobe -r usbcore
modprobe: FATAL: Module usbcore is in use.
$ sudo modprobe -D btusb
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/lib/crypto/libaes.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/lib/crc16.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/usb/common/usb-common.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/usb/core/usbcore.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/net/rfkill/rfkill.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/crypto/ecc.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/crypto/ecdh_generic.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/net/bluetooth/bluetooth.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btintel.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btbcm.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btrtl.ko
insmod /lib/modules/5.8.0-0.bpo.2-amd64/kernel/drivers/bluetooth/btusb.ko
Lorsqu'un module est chargé, le répertoire /sys/module/nom_module fournit des informations relatives à ce module et l'exploration du répertoire donne accès aux valeurs des paramètres :
$ ls /sys/module/btusb
coresize holders initstate parameters sections taint version
drivers initsize notes refcnt srcversion uevent
$ ls /sys/module/btusb/parameters/
disable_scofix force_scofix reset
$ cat /sys/module/btusb/parameters/disable_scofix
N
La commande systool du paquet sysfsutils peut également être utilisée pour afficher les caractéristiques d'un module :
$ systool -v -m btusb
Module = "btusb"
-v
Attributes:
coresize = "45056"
initsize = "0"
initstate = "live"
refcnt = "0"
srcversion = "AB62B47F0B3954E3AE1370B"
taint = "E"
uevent = <store method only>
version = "0.8"
Parameters:
disable_scofix = "N"
force_scofix = "N"
reset = "Y"
.......
Pour modifier un paramètre :
# echo "N" > /sys/module/btusb/parameters/reset
Il peut-être nécessaire de décharger, recharger le module pour que la modification du paramètre soit acceptée ou prise en compte.
Utiliser le fichier modules.alias, pour rechercher le module correspondant à un composant dont on connaît
le code fabriquant (8086 dans l'exemple)
et le code composant (100e dans l'exemple)
$ cat /lib/modules/$(uname -r)/modules.alias | grep -i 8086| grep -i 100E alias pci:v00008086d0000100Esv*sd*bc*sc*i* e1000
Le module recherché a pour nom e1000.
Les modules externes sont disponibles dans les répertoires de /lib/modules/$(uname -r)/kernel/
$ ls /lib/modules/4.8.0-0.bpo.2-686-pae/kernel/
arch crypto drivers fs lib mm net security sound virt
et la liste des modules est donnée par :
$ find /lib/modules/$(uname -r) -name *.ko
Cette liste peut-être utilisée pour vérifier la présence ou rechercher un module dont on connaît le nom ou une partie du nom :
$ find /lib/modules/$(uname -r) -name *.ko |grep asus
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/hid/hid-asus.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/media/rc/keymaps/rc-asus-ps3-100.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/media/rc/keymaps/rc-asus-pc39.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/net/usb/pegasus.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/platform/x86/asus-wmi.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/platform/x86/asus-wireless.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/platform/x86/asus-laptop.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/platform/x86/asus-nb-wmi.ko
/lib/modules/4.8.0-0.bpo.2-686-pae/kernel/drivers/hwmon/asus_atk0110.ko
# find /sys/bus/*/drivers/* -maxdepth 1 -lname '*devices*'
/sys/bus/acpi/drivers/ac/ACPI0003:00
/sys/bus/acpi/drivers/battery/PNP0C0A:00
/sys/bus/acpi/drivers/button/PNP0C0E:00
/sys/bus/acpi/drivers/button/PNP0C0D:00
/sys/bus/acpi/drivers/button/PNP0C0C:00
......
Pour afficher les périphériques utilisant un module (chargé) dont on connaît le nom :
# find /sys/bus/*/drivers/* -maxdepth 1 -lname '*devices*' -ls |grep atl1c
9865 0 lrwxrwxrwx 1 root root 0 janv. 29 19:34 /sys/bus/pci/drivers/atl1c/0000:05:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.5/0000:05:00.0
# lspci -s 00:05:00.0
05:00.0 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet (rev c0)
Le module atl1c est utilisé par le contrôleur ethernet Qualcomm Atheros
Généralement, la trace du chargement ou du chargement apparaît dans les logs du noyau. Exemple : chargement du module usb_storage lors de la connexion d'une clé usb :
$ sudo dmesg |grep usb-storage
[ 4725.039088] usb-storage 5-2:1.0: USB Mass Storage device detected
[ 4725.041009] scsi host2: usb-storage 5-2:1.0
[ 4725.041330] usbcore: registered new interface driver usb-storage
Elle apparaît également dans la surveillance des événements par udev. Exemple : déchargement du module iwlwifi :
$ sudo udevadm monitor & sudo modprobe -r iwlmvm iwlwifi
[5] 4389
KERNEL[2211.763603] change /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763627] change /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763636] change /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763636] change /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763968] remove /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763970] remove /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763972] remove /devices/pci0000:00/0000:00:14.3/leds/phy0-led (leds)
KERNEL[2211.763994] remove /devices/virtual/thermal/thermal_zone4/hwmon6 (hwmon)
......
# exit