Il est généralement utilisé pour prendre en charge le branchement à chaud, en chargeant/insérant le pilote d'un périphérique s'il n'est pas déjà chargé.
Il y a une question similaire ici :Détecter la présence d'un périphérique lorsqu'il est branché à chaud sous Linux
(D'après mes réponses)
Cela fonctionne comme suit :
-
Chaque pilote dans le code expose son identifiant de fournisseur/périphérique en utilisant :
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
-
Au moment de la compilation, le processus de construction extrait ces informations de tous les pilotes et prépare une table de périphériques.
-
Lorsque vous insérez le périphérique, la table des périphériques est référencée par le noyau et si une entrée correspondant à l'identifiant périphérique/fournisseur du périphérique ajouté est trouvée, son module est alors chargé et initialisé.
Selon les pilotes de périphériques Linux :
MODULE_DEVICE_TABLE
est utilisé pour générer des fichiers de carte pardepmod
programme ;- Lorsque l'appareil est branché à chaud, le pilote de bus génère un événement hotplug. Le noyau appelle
/sbin/hotplug
avec un ensemble de variables environnementales appropriées ; - Étant donné les fichiers cartographiques et les informations de l'environnement,
/sbin/hotplug
décide quel module charger et le charge réellement. Si le module est déjà chargé, c'est OK.
Je dois mentionner à nouveau que ce mécanisme garantit simplement que le module nécessaire est en place lorsque l'appareil est branché. Cela ne relie pas le module à cet appareil ou à quoi que ce soit d'autre. Charge juste le module.
Pour vérifier si le pilote est OK pour un périphérique spécifique, match()
fonction de bus_type
est utilisé.
Voici comment je comprends les choses [compatible Xbuntu 14.04].
Une fois que nous avons écrit un module, nous pouvons soit le charger manuellement, soit automatiquement.
- Manuellement ->
insmod
nomdumodule.ko oumodprob
nomdumodule.ko -
Automatiquement-> Il existe plusieurs façons.
-
copier dans /lib/modules/`uname -r`/kernel/modulename.ko et mettre à jour
/etc/modules
. Le système chargera le module lors du démarrage. -
Ecrire un script/commande pour charger le module.ko pour un matériel spécifique
add
/change
/remove
événement dans unudev
règle/etc/udev/rules.d/10-local.rules
. Vous pouvez effectuer à la fois le chargement/déchargement en utilisant cette méthode. - Codez votre module avec
MODULE_DEVICE_TABLE
enregistrement. Ensuite, chargez votre modulename.ko une fois et exécutezdepmod
commande [sudo depmod -a
] pour ajouter le nouveau module à/lib/modules/3.16.0-34-generic/modules.alias
/lib/modules/3.16.0-34-generic/modules.dep
des dossiers. Comme je le sais, le système ne se chargera que si le module n'est pas chargé.
-
Vous pouvez surveiller le chargement/déchargement du module à l'aide d'événements udev en utilisant :
moniteur udevadm
commande.