Cosa succede quando si collega un'unità USB?


21

Qual è il flusso di eventi USB dallo spazio del kernel allo spazio dell'utente? Viene visualizzato un popup sul desktop quando si collega un'unità USB: qual è la sequenza di eventi che porta dal rilevamento della nuova unità USB al montaggio e alla visualizzazione di quel popup?

Risposte:


6

Questo è gestito da udevmoderni sistemi Linux. Il udevdemone di iniziare con il sistema cercherà in /etc/udev/rules.de /lib/udev/rules.d, e si svolgerà regole di corrispondenza per gli eventi del kernel. L'inserimento di un'unità USB attiverà un evento, udevcercherà una regola corrispondente e la eseguirà.

Le regole stesse determineranno ciò che fa il tuo sistema. Negli ultimi anni, udevha comunicato ad HAL, che avvisa applicazioni tramite DBUS. Questo approccio è ormai obsoleto a favore di una udevsoluzione unificata , che presumo implicherà la udevdcomunicazione dbusdiretta o tramite dbus-send .

È possibile monitorare le attività di udevvia udevadm monitor.


2

Non sono ancora completamente sicuro di questo, quindi prendilo con un granello di sale e più ricerca.

Inizia con il sottosistema hotplug del kernel. Dopo aver configurato un dispositivo, chiama qualsiasi programma di userspace sia configurato per gestire gli eventi hotplug (se ne è stato impostato uno echo hotplug_handler > /proc/sys/kernel/hotplug) o invia un pacchetto di dati sul socket netlink kobject_uevent. Quando il kernel avvia il gestore hotplug, imposta alcune variabili di ambiente. Quando il kernel invia un datapacket, include coppie chiave = valore. Se lo desideri, puoi impostare uno script che registra semplicemente l'ambiente e configurarlo come gestore (non sul tuo sistema di produzione, ovviamente - un'installazione di prova).

Di solito, udev è impostato come gestore e disporrà di diverse regole su come gestire gli eventi. Da lì, può avviare altri programmi che fanno altre cose (come emettere messaggi dbus). Queste regole udev dipendono fortemente dalla particolare distribuzione degli interessi.

Ci sono molte informazioni in questo thread in cui qualcuno sta cercando di scrivere della documentazione - nota che il primo messaggio non è accurato; continua a leggere.


2
Una volta questo era accurato, ma non per molto tempo: il moderno udevascolta gli eventi su un socket netlink. (Il vecchio modo aveva problemi di serializzazione / concorrenza.)
effimero

Dato che sono nuovo in questa parte di Linux ( udev , hotplug ), vorrei avere un'idea su ogni linea che hai descritto qui. Quindi, per favore, potresti iniziare con il sottosistema hotplug del kernel .
Sen

@ephemient: grazie per la risposta. Potresti per favore spiegare la sequenza degli eventi.
Sen
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.