Come comprendere il flusso del rilevamento USB?


14

Mi piacerebbe capire il flusso degli eventi USB dallo spazio del kernel allo spazio dell'utente (solo per mia curiosità, nel sapere come vengono implementate le cose).

Per essere più chiari, vorrei sapere come viene visualizzato quel popup sul desktop quando collego un'unità USB al mio sistema e come viene montata l'unità.

Vorrei anche sapere come scoprire se alcune immagini sono presenti nella mia USB e se "sì", come mi chiede se devo aprirlo in GIMP o in qualche altro software?

So che è una domanda molto grande e ampia, ma per favore guidami con alcuni suggerimenti su come capire l'idea alla base.

Non ho fatto ricerche di codice di grandi dimensioni, ma ti assicuro che non ho problemi a farlo se posso essere guidato correttamente.

Risposte:


16
  1. Il dispositivo è collegato e il software che gestisce il bus hardware per quel dispositivo riceve un interrupt (o altra notifica a livello hardware) e il driver del bus enumera i dispositivi collegati o esegue altre azioni hardware specifiche del bus per identificare il dispositivo.
  2. Il kernel richiede di caricare un driver per il nuovo hardware chiamando / sbin / modprobe con l'identificatore bus / dispositivo / etc dell'hardware.
  3. Nello spazio utente, modprobe tenta di trovare un alias specificato dal driver corrispondente. (Vedi /lib/modules/$(uname -r)/modules.aliasl'elenco completo.) Appariranno diversi in base all'interfaccia hardware. Ad esempio, pci:v0000102Bd00002527sv*sd*bc*sc*i*per un dispositivo PCI vendor 102B, dispositivo 2527, e qualsiasi cosa per subforniture, ecc, o USB: usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*.
  4. una volta caricato il driver del dispositivo (o inizializzato un nuovo dispositivo che aveva già un driver), il driver nel kernel invia una notifica del dispositivo caricato udevnello spazio utente.
  5. udevcorrisponde alla notifica rispetto al suo elenco di regole in /lib/udev/rules.d/e /etc/udev/rules.d. Da qui, il comportamento è estremamente specializzato, basato sulle regole.
  6. Nel caso di un disco USB, il 80-udisks.rulesfile è probabilmente il posto migliore da cui lavorare. Queste regole useranno cose come blkid e altri helper per sondare il tipo e il contenuto di un disco, popolando tutti i tipi di valori di configurazione incluso cose come ENV{UDISKS_PRESENTATION_HIDE}="1"ignorare un disco per qualche motivo. Vedi "man 7 udisks" per i dettagli.
  7. Il demone udisks controlla la presenza dei dispositivi nel database udev e li presenta come un elenco rilevabile di dispositivi su DBus. (Vedi "udisks --enumerate".)
  8. Diverse azioni sono configurate in udisks e la politica per consentire quelle azioni può essere vista nel file delle politiche /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (Chi può montare, smontare, ecc.)
  9. I servizi che sono interessati ai dispositivi ascolteranno gli eventi DBus da udisks e intraprenderanno azioni quando vedranno determinate condizioni. Ad esempio, il Nautilus di GNOME (tramite gvfs volume-monitor) richiederà il montaggio automatico per i dispositivi (tramite udisks , che controllerà la sua politica, menzionata sopra).
  10. Una volta montato un filesystem, quegli stessi servizi di ascolto prenderanno più azioni. Ad esempio, Nautilus chiederà se si desidera aprire F-Spot quando la directory di archiviazione delle foto comune DCIMviene trovata su un filesystem.

1
Forse sai come questo differisce durante l'avvio (suppongo che solo il passaggio 1 sia diverso)? Perché un dispositivo non può essere rilevato durante l'avvio, ma può essere caricato correttamente dopo la sostituzione manuale?
naktinis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.