14 votes

Comment comprendre le flux de la détection USB ?

J'aimerais comprendre le flux des événements USB de l'espace noyau à l'espace utilisateur (juste par curiosité, pour savoir comment les choses sont mises en œuvre).

Pour être plus clair, je voudrais savoir comment cette pop-up apparaît sur mon bureau lorsque je branche un lecteur USB sur mon système et comment le lecteur est monté.

J'aimerais également savoir comment il détermine si certaines images sont présentes sur ma clé USB et si oui, comment il me demande si je dois les ouvrir dans GIMP ou un autre logiciel ?

Je sais qu'il s'agit d'une question très vaste, mais je vous prie de me donner quelques indications sur la manière de comprendre l'idée générale qui se cache derrière.

Je n'ai pas fait de grandes explorations de codes, mais je vous assure que je n'ai aucun problème à le faire si je peux être guidé correctement.

16voto

Brian Childress Points 437
  1. Le périphérique est branché, et le logiciel qui gère le bus matériel pour ce périphérique reçoit une interruption (ou une autre notification au niveau matériel), et le pilote de bus énumère les périphériques connectés, ou effectue d'autres actions matérielles spécifiques au bus pour identifier le périphérique.
  2. Le noyau demande de charger un pilote pour le nouveau matériel en appelant /sbin/modprobe avec l'identifiant du bus/dispositif/etc du matériel.
  3. Dans l'espace utilisateur, modprobe essaie de trouver un alias correspondant spécifié par le pilote. (Voir /lib/modules/$(uname -r)/modules.alias pour la liste complète). Elles seront différentes selon l'interface matérielle. Par exemple, pci:v0000102Bd00002527sv*sd*bc*sc*i* pour un dispositif PCI fournisseur 102B, dispositif 2527, et tout pour sous-fournisseur, etc, ou USB : usb:v2040p4982d*dc*dsc*dp*ic*isc*ip* .
  4. une fois que le pilote de périphérique est chargé (ou qu'un nouveau périphérique qui avait déjà un pilote est initialisé), le pilote dans le noyau envoie une notification du périphérique chargé à udev dans l'espace utilisateur.
  5. udev compare la notification à sa liste de règles dans /lib/udev/rules.d/ y /etc/udev/rules.d . À partir de là, le comportement est extrêmement spécialisé, en fonction des règles.
  6. Dans le cas d'un disque USB, le 80-udisks.rules est probablement le meilleur endroit pour travailler. Ces règles utiliseront des éléments comme blkid et d'autres aides pour sonder le type et le contenu d'un disque, en remplissant toutes sortes de valeurs de configuration, y compris des choses comme ENV{UDISKS_PRESENTATION_HIDE}="1" d'ignorer un disque pour une raison quelconque. Voir "man 7 udisks" pour plus de détails.
  7. El udisks-daemon veille à ce que les appareils apparaissent dans le udev et les présente sous la forme d'une liste de périphériques découvrables via DBus. (Voir "udisks --enumerate").
  8. Diverses actions sont configurées dans udisks et la politique d'autorisation de ces actions peut être consultée dans le fichier de politique. /usr/share/polkit-1/actions/org.freedesktop.udisks.policy . (Qui peut monter, umonter, etc.)
  9. Les services qui s'intéressent aux périphériques écouteront les événements DBus provenant de udisks et prennent des mesures lorsqu'ils constatent certaines conditions. Par exemple, Nautilus de GNOME (via le moniteur de volume gvfs) demandera le montage automatique des périphériques (via le moniteur de volume gvfs). udisks qui vérifiera sa politique, mentionnée ci-dessus).
  10. Une fois qu'un système de fichiers a été monté, ces mêmes services d'écoute prendront d'autres mesures. Par exemple, Nautilus vous demandera si vous souhaitez ouvrir le fichier Point F lorsque le répertoire commun de stockage de photos DCIM est trouvé sur un système de fichiers.

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