Dur de temps dans la compréhension de MODULE_DEVICE_TABLE(usb, id_table) utilisation
J'ai du mal à comprendre la nature de l'utilisation de MODULE_DEVICE_TABLE(usb, id_table)
Autant que je sache, cela va générer les fichiers de carte qui sera utilisé plus tard par modprobe
chaque fois qu'un nouveau dispositif est inséré, il correspondra à l'encontre de ces fichiers de mappage et de charger le module si elle correspond.
Mais mon incompréhension est "n'est pas le module chargé de toute façon?"
Je veux dire, j'ai déjà chargé quand je n'ai insmod module-name
. ou ai-je raté quelque chose?
OriginalL'auteur silentnights | 2014-04-06
Vous devez vous connecter pour publier un commentaire.
Il est généralement utilisé à l'appui de branchement à chaud, par le chargement, l'insertion, le pilote d'un périphérique si ce n'est déjà chargé.
Il y a une question similaire ici: Détecter la présence d'un appareil lorsqu'il est chaud branché Linux
(À partir de mon sna)
Il fonctionne comme suit:
Chaque pilote dans le code expose son vendor/id de l'appareil à l'aide de:
Au moment de la compilation le processus de construction des extraits de ces informations à partir de tous les pilotes et prépare un appareil de table.
Lorsque vous insérez l'appareil, ce tableau est visé par le noyau, et si une entrée correspondant à l'appareil/vendor id du périphérique ajouté, alors que son module est chargé et initialisé.
Si le pilote a déjà été
insmod
d puis lemodule_init
ne serait pas appelé lorsque vous insérez le périphérique, le noyau insmod pilote si le pilote n'est pas déjàinsmod
d. En d'autres termes, lakernel
a également fait un appel àinsmod driver.ko
lorsque l'appareil est branché à chaud.Insmod
ing déjàinsmod
pilote ne cause pas de problème, il indique juste un avertissement disant pilote déjà inséré.Donc, juste pour faire sûr que je vous comprends bien, il y a une différence entre l'insertion d'un module de chargement et... Quand j'insère le module, il signifie que le noyau est au courant de son existence et le module enregistre ce que la fonctionnalité qu'il peut gérer. Lorsqu'un noyau détecte un périphérique correspondant à mon cas, il va charger le module pour gérer le dispositif.
Non il n'y en a pas. Chargement=insertion. Il y a deux façons d'insérer le module: 1. Manuellement à l'aide de (insmod/modprobe), 2. Automatiquement par le noyau de "hot-plug" (noyau après avoir trouvé le pilote de périphérique à partir de l'appareil de table fait un insmod/modprobe).
Donc, dans mon premier insmod, le module est bien chargé et lié à aucun dispositif correspondant. Si un autre appareil qui correspond à mon chauffeur est inséré, le noyau se charge à nouveau à gérer le nouveau dispositif. Désolé pour mes nombreuses question, mais je veux m'assurer que je comprends bien.
OriginalL'auteur brokenfoot
Selon Linux Pilotes de Périphérique:
MODULE_DEVICE_TABLE
est utilisé pour générer les fichiers de mappage pardepmod
programme;/sbin/hotplug
environnementale appropriée variables;/sbin/hotplug
qui décide du module de charge et de la charge réellement. Si le module est déjà chargé, c'est OK.Je dois mentionner encore une fois que ce mécanisme s'assure juste que nécessaire, le module est en place lorsque l'appareil est branché. Qui n'a pas de module de liaison avec cet appareil ou de tout autre chose. Juste des charges du module.
Pour vérifier si le pilote est OK pour un périphérique spécifique,
match()
fonction debus_type
est utilisé.OriginalL'auteur Alexey Shmalko
Ici est de savoir comment je comprend bien les choses [Xbuntu 14.04 compatible].
Une fois que nous avons écrit un module, on peut soit charger manuellement ou automatiquement.
insmod
modulename.ko oumodprob
modulename.koAutomatiquement-> Il y a de multiples façons.
copie de /lib/modules/`uname -r`/kernel/modulename.ko et mise à jour
/etc/modules
. Le système va charger le module lors de l'amorçage.Écrire 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 faire les deux de chargement/déchargement à l'aide de cette méthode.MODULE_DEVICE_TABLE
enregistrement. Chargez ensuite votre nom de module.ko une fois et exécuterdepmod
commande [sudo depmod -a
] pour ajouter le nouveau module de/lib/modules/3.16.0-34-generic/modules.alias
/lib/modules/3.16.0-34-generic/modules.dep
fichiers. Que je sache, le système va charger uniquement si le module n'est pas chargé.Vous pouvez surveiller module de chargement/déchargement à l'aide de udev événements à l'aide de :
commande.
/lib/module/`uname -r`/kernel
avant d'exécuterdepmod -a
OriginalL'auteur Chand Priyankara