¿Qué sucede cuando se conecta una unidad USB?

21

¿Cuál es el flujo de eventos USB desde el espacio del kernel al espacio del usuario? Recibo una ventana emergente en mi escritorio cuando conecto una unidad USB: ¿cuál es la secuencia de eventos que conduce desde la detección de la nueva unidad USB hasta su montaje y muestra esa ventana emergente?

Sen
fuente

Respuestas:

6

Esto es entregado udeven los sistemas modernos de Linux. El udevdemonio de empezar con el sistema buscará en /etc/udev/rules.dy /lib/udev/rules.dy se ejecutará las reglas de coincidencia de eventos del kernel. Insertar una unidad USB activará un evento, udevbuscará una regla coincidente y la ejecutará.

Las reglas mismas determinarán lo que hace su sistema. En los últimos años, se udevha comunicado con HAL, que alertaría a las aplicaciones a través de DBUS. Este enfoque ahora es obsoleto a favor de una udevsolución unificada , que supongo que implicará la udevdcomunicación dbusdirecta o mediante dbus-send .

Puede controlar las actividades de udevvia udevadm monitor.

ewindisch
fuente
2

Todavía no estoy completamente seguro de esto, así que tómalo con un grano de sal y más investigación.

Comienza con el subsistema kernel hotplug. Después de configurar un dispositivo, llama a cualquier programa de espacio de usuario que esté configurado para manejar eventos de echo hotplug_handler > /proc/sys/kernel/hotplugconexión en caliente (si se estableció uno ) o envía un paquete de datos a través del zócalo de enlace de red kobject_uevent. Cuando el kernel inicia el controlador hotplug, configura algunas variables de entorno. Cuando el núcleo envía un paquete de datos, incluye pares clave = valor. Si lo desea, puede configurar un script que solo registre el entorno y configurarlo como el controlador (no en su sistema de producción, por supuesto, una configuración de prueba).

Por lo general, udev se configura como el controlador, y tendrá varias reglas de configuración sobre cómo manejar los eventos. A partir de ahí, puede lanzar otros programas que hacen otras cosas (como emitir mensajes dbus). Estas reglas de udev dependen en gran medida de la distribución particular de intereses.

Hay mucha información en este hilo en el que alguien está tratando de escribir alguna documentación; tenga en cuenta que el primer mensaje no es exacto; sigue leyendo.

Shawn J. Goff
fuente
2
Érase una vez esto era exacto, pero no por mucho tiempo ahora: los modernos udevescuchan eventos en un socket de enlace de red. (La antigua forma tenía problemas de serialización / concurrencia).
Ephemient
Como soy nuevo en esta parte de Linux ( udev , hotplug ), me gustaría tener una idea sobre cada línea que ha descrito aquí. Entonces, ¿podría comenzar con el subsistema de conexión en caliente del núcleo ?
Sen
@ephemient: Gracias por la respuesta. ¿Podría explicar la secuencia de eventos?
Sen