O Libusb é uma biblioteca para interagir com dispositivos USB da mesma maneira que curses é uma biblioteca para interagir com terminais de texto, ALSA (mais precisamente seu componente libasound) é uma biblioteca para interagir com dispositivos audi, etc. O kernel lida com interações de hardware. Ele fornece arquivos de dispositivo que os aplicativos podem abrir para interagir com o hardware, por meio de read
, write
e ioctl
chamadas do sistema .
ioctl
é uma chamada de sistema: permite que aplicativos (código de nível de usuário) emitam solicitações que são processos pelo kernel.
O Libusb permite que aplicativos registrem funções de retorno de chamada que são executadas quando o dispositivo tem algo a relatar. Aqui está uma visão geral do fluxo de informações sob o capô:
- O sinal elétrico no barramento dispara um evento no controlador USB.
- O controlador USB dispara um sinal de interrupção no processador principal.
- O processador executa o manipulador de interrupção no kernel do sistema operacional.
- O kernel percebe que um processo está atualmente em uma chamada de bloqueio
read
,write
ouioctl
no arquivo do dispositivo e faz com que essa chamada do sistema retorne. - No processo de usuário, quando a chamada do sistema retorna, o código da biblioteca é executado.
- O código da biblioteca executa a função de retorno de chamada registrada pelo programador da aplicação.