3 votes

Comment Linux choisit-il les modules à charger ?

J'utilise Ubuntu 12.04.3 LTS.

uname -a
Linux guru 3.8.0-34-generic #49~precise1 [...] x86_64 [...]

Lorsque je redémarre, je vois ce qui suit dans le syslog :

Dec 29 06:30:22 guru kernel: [...] e1000e: Intel PRO/1000 Network Driver - 2.1.4-k

Cependant :

cd /lib/modules/3.8.0-34-generic/kernel/drivers/net/ethernet/intel/e1000e
strings e1000e.ko | grep -i version
version=2.5.4-NAPI

modinfo e1000e me donne la même version ( 2.5.4-NAPI )

Au démarrage, je croyais que le noyau traversait /lib/modules/{version string}/kernel/drivers et a chargé ce dont il avait besoin...

mais il est clair que je me trompe

Il y a deux autres versions de e1000e.ko sur ce disque de démarrage :

/lib/modules/3.8.0-29-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
/lib/modules/3.8.0-33-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

Et les deux sont en version 2.1.4-k ... est-ce que le noyau récupère d'une manière ou d'une autre les modules de ces anciens emplacements ?

Exclure :

grep -r e1000e /etc/*
/etc/udev/rules.d/70-persistent-net.rules:# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:19.0 (e1000e)

en d'autres termes, aucune mention de ce module en /etc/modprobe.d/blacklist* o /etc/init/module-init-tools.conf etc.

Je le constate : /lib/modules/3.8.0-34-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko used to be version 2.1.4-k ... mais ensuite j'ai mis à niveau par http://www.intel.com/support/network/sb/CS-032514.html et j'ai redémarré ... ce qui m'a amené là où je suis maintenant.

Existe-t-il un moyen d'interroger un module en cours d'exécution pour demander à partir de quel endroit du disque il a été chargé ?

--sk

Stuart Kendrick

0voto

user.dz Points 45060

AFAIK, modprobe charge uniquement les modules de la même version du noyau, c'est-à-dire de :

/lib/modules/<kerne-version>/

modinfo montre le chemin complet du module SUPPOSÉ à être exécuté par le noyau actuel (pas celui qui est actuellement exécuté). Vous ne pouvez donc pas vous appuyer dessus. J'utilise Ubuntu 14.04, Exemple :

$ modinfo e1000e
filename:       /lib/modules/3.13.0-38-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        2.3.2-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     FAFC167239309C03F11F440
alias:          pci:v00008086d000015A3sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A2sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A1sv*sd*bc*sc*i*
[...]
alias:          pci:v00008086d000010A4sv*sd*bc*sc*i*
alias:          pci:v00008086d0000105Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000105Esv*sd*bc*sc*i*
depends:        ptp
intree:         Y
vermagic:       3.13.0-38-generic SMP mod_unload modversions 
signer:         Magrathea: Glacier signing key
sig_key:        2A:DE:ED:EA:6C:BA:0B:95:A6:22:22:40:71:1F:49:C8:72:07:BB:F6
sig_hashalgo:   sha512
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
parm:           TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
parm:           RxIntDelay:Receive Interrupt Delay (array of int)
parm:           RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
parm:           IntMode:Interrupt Mode (array of int)
parm:           SmartPowerDownEnable:Enable PHY smart power down (array of int)
parm:           KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
parm:           WriteProtectNVM:Write-protect NVM [WARNING: disabling this can lead to corrupted NVM] (array of int)
parm:           CrcStripping:Enable CRC Stripping, disable if your BMC needs the CRC (array of int)

Si elle ne s'affiche pas, essayez : modinfo -n e1000e o modinfo --filename e1000e

/lib/modules/3.13.0-38-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

Il est possible d'utiliser insmod pour charger un module spécifique par le chemin complet. Mais cela peut être dangereux et endommager le matériel. Cependant, dans la plupart des cas, le noyau appliquera des vérifications strictes, soulevant certaines erreurs comme (remarque 3.13.0-37-generic chargé avec succès) :

$ sudo insmod /lib/modules/3.11.0-24-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
insmod: ERROR: could not insert module /lib/modules/3.11.0-24-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko: Invalid module format
$ sudo insmod /lib/modules/3.13.0-30-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
insmod: ERROR: could not insert module /lib/modules/3.13.0-30-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko: Invalid module format
$ sudo insmod /lib/modules/3.13.0-36-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
insmod: ERROR: could not insert module /lib/modules/3.13.0-36-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko: Invalid parameters
$ sudo insmod /lib/modules/3.13.0-37-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
$ sudo rmmod /lib/modules/3.13.0-37-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
$ sudo insmod /lib/modules/3.13.0-38-lowlatency/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
insmod: ERROR: could not insert module /lib/modules/3.13.0-38-lowlatency/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko: Invalid module format

Je pense sysfs montre le module actuellement chargé :

$ more /sys/module/e1000e/version 
2.3.2-k
$ more /sys/module/e1000e/srcversion 
FAFC167239309C03F11F440

Je ne pouvais pas le vérifier comme 3.13.0-37-generic & 3.13.0-38-generic dans mon cas ont les mêmes versions.

Note :

Pour être complet, les modules du noyau chargés dynamiquement sont gérés par dkms chargé à partir de :

/var/lib/dkms/<driver-name>/<driver-last-version>/<kernel-version>/<kernel-arch>/module/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X