O que acontece quando uma unidade USB está conectada?

20

Qual é o fluxo de eventos USB do espaço do kernel para o espaço do usuário? Eu recebo um pop-up na minha área de trabalho quando eu conecto uma unidade USB - qual é a sequência de eventos que leva de detectar a nova unidade USB para montá-la e mostrar esse pop-up?

(Eu sei que é uma questão muito ampla, mas por favor me guie com algumas dicas sobre como entender a idéia por trás disso. Eu não tenho nenhum problema em navegar grandes blocos de código se eu puder ser guiado corretamente.)

    
por Sen 10.01.2011 / 15:29

2 respostas

5

Isso é fornecido por udev nos sistemas Linux modernos. O daemon udev iniciado com o sistema pesquisará em /etc/udev/rules.d e /lib/udev/rules.d e executará regras de correspondência para eventos do kernel. Inserir uma unidade USB acionará um evento, udev procurará uma regra correspondente e a executará.

As próprias regras determinarão o que seu sistema faz. Nos últimos anos, udev se comunicou com a HAL, o que alertaria os aplicativos via DBUS. Essa abordagem agora está obsoleta em favor de uma solução udev unificada, que eu presumo envolverá udevd comunicando via dbus diretamente, ou via dbus-send .

Você pode monitorar as atividades de udev via udevadm monitor .

    
por 12.01.2011 / 22:45
2

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

Começa com o subsistema "hotplug" do kernel. Depois que um dispositivo é configurado, ele chama qualquer programa de espaço de usuário configurado para manipular eventos de hotplug (se um foi 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 datapacket, ele inclui pares chave = valor. Se você quiser, pode configurar um script que apenas registre o ambiente e o configure como o manipulador (não em seu sistema de produção, é claro - uma configuração de teste).

Normalmente, o udev é configurado como o manipulador e terá várias configurações de regras 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 particular de interesse.

Existe muita informação em este tópico onde alguém está tentando escrever alguma documentação - note a primeira mensagem não é precisa; continue lendo.

    
por 10.01.2011 / 18:22

Tags