GNU/Linux >> Tutoriels Linux >  >> Linux

Difficile de comprendre l'utilisation de MODULE_DEVICE_TABLE (usb, id_table)

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 :

  1. Chaque pilote dans le code expose son identifiant de fournisseur/périphérique en utilisant :

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
    
  2. 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.

  3. 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 :

  1. MODULE_DEVICE_TABLE est utilisé pour générer des fichiers de carte par depmod programme ;
  2. 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 ;
  3. É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 ou modprob nomdumodule.ko
  • Automatiquement-> Il existe plusieurs façons.

    1. copier dans /lib/modules/`uname -r`/kernel/modulename.ko et mettre à jour /etc/modules . Le système chargera le module lors du démarrage.

    2. Ecrire un script/commande pour charger le module.ko pour un matériel spécifique add /change /remove événement dans un udev règle /etc/udev/rules.d/10-local.rules . Vous pouvez effectuer à la fois le chargement/déchargement en utilisant cette méthode.

    3. Codez votre module avec MODULE_DEVICE_TABLE enregistrement. Ensuite, chargez votre modulename.ko une fois et exécutez depmod 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.


Linux
  1. Comment trouver le module du noyau pour un appareil donné ?

  2. Linux – Comment reconnecter un périphérique USB logiquement déconnecté ?

  3. Comprendre la persistance des appareils et Oracle ASMLib

  4. Comprendre les horodatages des fichiers Mac

  5. est-il possible de réveiller un appareil Linux à une heure précise

Comment trouver l'utilisation de la bande passante d'un périphérique USB sous Linux

Timekpr - Contrôlez l'utilisation de l'ordinateur des comptes d'utilisateurs

Contrôlez l'utilisation de la RAM et du CPU par Kodi en temps réel

Comprendre la commande time sous Linux

Comprendre les profils optimisés recommandés par RedHat

En quoi le temps CPU et l'utilisation du CPU sont-ils identiques ?