Que se passe-t-il lorsqu'un lecteur USB est branché?

21

Quel est le flux d'événements USB de l'espace noyau vers l'espace utilisateur? Je reçois une fenêtre contextuelle sur mon bureau lorsque je branche une clé USB - quelle est la séquence d'événements qui mène de la détection de la nouvelle clé USB au montage et à l'affichage de cette fenêtre contextuelle?

Sen
la source

Réponses:

6

Ceci est transmis par udevles systèmes Linux modernes. Le udevdémon a commencé avec le système de recherche dans /etc/udev/rules.det /lib/udev/rules.det exécuter des règles de correspondance pour les événements du noyau. L'insertion d'une clé USB déclenchera un événement, udevrecherchera une règle de correspondance et l'exécutera.

Les règles elles-mêmes détermineront ce que fait votre système. Ces dernières années, udeva communiqué à HAL, qui alerterait les applications via DBUS. Cette approche est désormais obsolète au profit d'une udevsolution unifiée qui impliquera, je suppose, une udevdcommunication via dbusdirectement ou via dbus-send .

Vous pouvez surveiller les activités de udevvia udevadm monitor.

ewindisch
la source
2

Je ne suis pas encore complètement confiant avec cela, alors prenez-le avec un grain de sel et plus de recherche.

Cela commence par le sous-système hotplug du noyau. Une fois qu'un périphérique est configuré, il appelle le programme d'espace utilisateur configuré pour gérer les événements hotplug (s'il en a été défini par un echo hotplug_handler > /proc/sys/kernel/hotplug) ou envoie un paquet de données sur la socket netlink kobject_uevent. Lorsque le noyau lance le gestionnaire hotplug, il configure certaines variables d'environnement. Lorsque le noyau envoie un paquet de données, il inclut des paires clé = valeur. Si vous le souhaitez, vous pouvez configurer un script qui enregistre simplement l'environnement et le configurer en tant que gestionnaire (pas sur votre système de production, bien sûr - une configuration de test).

Généralement, udev est configuré en tant que gestionnaire et plusieurs règles seront définies pour gérer les événements. De là, il peut lancer d'autres programmes qui font d'autres choses (comme émettre des messages dbus). Ces règles udev dépendent fortement de la distribution particulière des intérêts.

Il y a beaucoup d'informations dans ce fil où quelqu'un essaie d'écrire de la documentation - notez que le premier message n'est pas précis; continue de lire.

Shawn J. Goff
la source
2
Il était une fois cela était exact, mais pas depuis longtemps: moderne udevécoute les uevents sur une socket netlink. (L'ancienne méthode avait des problèmes de sérialisation / simultanéité.)
ephemient
Puisque je suis nouveau dans cette partie de Linux ( udev , hotplug ), je voudrais avoir une idée sur chaque ligne que vous avez décrite ici. Pourriez-vous, s'il vous plaît, élaborer sur les démarrages avec le sous-système de connexion à chaud du noyau .
Sen
@ephemient: Merci pour la réponse. Pourriez-vous expliquer la séquence des événements.
Sen