Como entender o fluxo de detecção de USB?

14

Eu gostaria de entender o fluxo dos eventos USB do espaço Kernel para o espaço User (apenas por curiosidade, em saber como as coisas são implementadas).

Para ser mais claro, eu gostaria de saber como é que o pop-up vem na minha área de trabalho quando eu conecto uma unidade USB ao meu sistema e como a unidade é montada.

Eu também gostaria de saber como ele descobre se algumas imagens estão presentes no meu USB e se "sim", como ele me pergunta se eu preciso abri-lo no GIMP ou algum outro software?

Eu sei que é uma pergunta muito grande e ampla, mas por favor me guie com algumas dicas sobre como entender a ideia por trás disso.

Eu não fiz grandes navegações de código, mas garanto que não tenho nenhum problema em fazê-lo se puder ser orientado corretamente.

    
por Sen 21.12.2010 / 12:27

1 resposta

16
  1. O dispositivo está conectado e o software que gerencia o barramento de hardware para esse dispositivo recebe uma interrupção (ou outra notificação no nível do hardware) e o driver de barramento enumera os dispositivos conectados ou executa outras ações de hardware específicas do barramento para identificar o dispositivo.
  2. Solicitações de kernel para carregar um driver para o novo hardware chamando / sbin / modprobe com o identificador de barramento / dispositivo / etc do hardware.
  3. No espaço do usuário, o modprobe tenta encontrar um alias especificado pelo driver correspondente. (Veja /lib/modules/$(uname -r)/modules.alias para a lista completa). Estes terão uma aparência diferente com base na interface de hardware. Por exemplo, pci:v0000102Bd00002527sv*sd*bc*sc*i* para um fornecedor de dispositivo PCI 102B, dispositivo 2527 e qualquer coisa para subvendor, etc, ou USB: usb:v2040p4982d*dc*dsc*dp*ic*isc*ip* .
  4. depois que o driver de dispositivo é carregado (ou um novo dispositivo que já tinha um driver foi inicializado), o driver no kernel envia uma notificação do dispositivo carregado para udev no espaço do usuário.
  5. udev corresponde a notificação à sua lista de regras em /lib/udev/rules.d/ e /etc/udev/rules.d . A partir daqui, o comportamento é extremamente especializado, baseado nas regras.
  6. No caso de um disco USB, o arquivo 80-udisks.rules é provavelmente o melhor lugar para se trabalhar. Essas regras usarão recursos como blkid e outros auxiliares para analisar o tipo e o conteúdo de um disco, preenchendo todos os tipos de valores de configuração, incluindo coisas como ENV{UDISKS_PRESENTATION_HIDE}="1" para ignorar um disco por algum motivo. Veja "man 7 udisks" para detalhes.
  7. O udisks-daemon observa os dispositivos que aparecem no banco de dados udev
  8. Várias ações são configuradas em udisks , e a política para permitir essas ações pode ser vista no arquivo de políticas /usr/share/polkit-1/actions/org.freedesktop.udisks.policy . (Quem pode montar, desmontar, etc.)
  9. Os serviços interessados em dispositivos ouvirão eventos do DBus em udisks e executarão ações quando virem determinadas condições. Por exemplo, o Nautilus do GNOME (via monitor de volume gvfs) solicitará a montagem automática de dispositivos (via udisks , que verificará sua política, mencionada acima).
  10. Uma vez que um sistema de arquivos foi montado, esses mesmos serviços de escuta terão mais ações. Por exemplo, o Nautilus perguntará se você deseja abrir F-Spot quando o diretório comum de armazenamento de fotos DCIM for encontrado em um sistema de arquivos.
por Kees Cook 23.12.2010 / 23:31