O que acontece quando uma unidade USB é conectada?

21

Qual é o fluxo de eventos USB do espaço do kernel para o espaço do usuário? Recebo um pop-up na área de trabalho quando conecto uma unidade USB - qual é a sequência de eventos que leva da detecção da nova unidade USB à montagem e exibição desse pop-up?

Sen
fonte

Respostas:

6

Isso é entregue udevem sistemas Linux modernos. O udevdaemon começou com o sistema irá procurar no /etc/udev/rules.de /lib/udev/rules.de será executado regras de correspondência para eventos do kernel. A inserção de uma unidade USB acionará um evento, udevprocurará uma regra correspondente e a executará.

As próprias regras determinarão o que seu sistema faz. Nos últimos anos, udevcomunicou-se à HAL, o que alertaria os aplicativos via DBUS. Essa abordagem agora está obsoleta em favor de uma udevsolução unificada , que eu presumo que envolverá a udevdcomunicação via dbusdiretamente ou via dbus-send .

Você pode monitorar as atividades de udevvia udevadm monitor.

ewindisch
fonte
2

Ainda não estou completamente confiante com isso, então leve-o com um pouco de sal e mais pesquisas.

Começa com o subsistema de hotplug do kernel. Depois que um dispositivo é configurado, ele chama o programa de espaço do usuário configurado para manipular eventos de hotplug (se um tiver sido definido por echo hotplug_handler > /proc/sys/kernel/hotplug) ou envia um pacote de dados pelo soquete netlink kobject_uevent. Quando o kernel inicia o manipulador de hotplug, ele configura algumas variáveis ​​de ambiente. Quando o kernel envia um pacote de dados, ele inclui pares chave = valor. Se desejar, você pode configurar um script que apenas registre o ambiente e configurá-lo como manipulador (não no seu sistema de produção, é claro - uma configuração de teste).

Normalmente, o udev é configurado como manipulador e terá várias regras de configuração sobre como lidar com eventos. A partir daí, ele pode iniciar outros programas que fazem outras coisas (como emitir mensagens dbus). Essas regras do udev são altamente dependentes da distribuição específica de interesse.

Há muitas informações neste tópico em que alguém está tentando escrever alguma documentação - observe que a primeira mensagem não é precisa; continue lendo.

Shawn J. Goff
fonte
2
Era uma vez preciso, mas não faz muito tempo: os modernos udevouvem eventos em um soquete de netlink. (A maneira antiga tinha problemas de serialização / simultaneidade.)
ephemient
Como eu sou novo nesta parte do Linux ( udev , hotplug ), gostaria de ter uma idéia de todas as linhas que você descreveu aqui. Então, você poderia, por favor, elaborar sobre as partidas com o subsistema de hotplug do kernel .
Sen
@hemhemient: Obrigado pela resposta. Você poderia explicar a sequência de eventos.
Sen