Onde o modprobe carrega um driver que o udev solicita?

7

Vamos pegar um cenário em que um sistema Linux foi inicializado e está sendo executado corretamente. Um usuário chega e hotplugs um dispositivo de memória USB.

A sequência de eventos que acontecem é ilustrada no diagrama abaixo:

Onde o modprobe carrega seu driver? O driver para o dispositivo solicitado foi encontrado em /sys/bus/drivers após o carregamento do modprobe ou antes?

O que estou tentando estabelecer aqui é o relacionamento entre as entradas em /sys/ e os eventos que acontecem no gráfico acima.

    
por Shady Programmer 13.12.2016 / 23:44

1 resposta

6

A mensagem uevent contém informações sobre o dispositivo ( exemplo ). Essas informações contêm identificação registrada de fornecedores e modelos para dispositivos conectados a barramentos, como PCI e USB. O Udev analisa esses eventos e constrói um nome de módulo de formato fixo que passa para modprobe . modprobe procura em /lib/modules/VERSION para um arquivo chamado depmod.alias , que é gerado quando o kernel é instalado e mapeia os nomes dos módulos de formato fixo para os nomes dos arquivos do módulo do driver. Veja Os módulos do driver são carregados e descarregados automaticamente? para mais detalhes sobre o processo - essa resposta descreve os dias anteriores em que o kernel chamava modprobe diretamente, mas a maneira como modprobe e aliases de módulo funcionam não mudou.

Veja também a apresentação de Michael Opdenacker, “Hotplugging with udev” , que tem mais exemplos e descreve outros aspectos do gerenciamento de dispositivos com o udev, e guia do Linux a partir do zero que tem uma seção sobre como o nomes de módulo de formulário são definidos.

modprobe carrega um módulo chamando a init_module chamada do sistema. Não interage com o sysfs de nenhuma maneira. Quando o módulo é carregado, o kernel cria uma entrada para ele em /sys/module . Qualquer entrada que apareça em outro lugar no sysfs depende do código no módulo (por exemplo, um módulo com um driver para um tipo de dispositivo USB chamará algum código de suporte USB genérico que adicione uma entrada em /sys/bus/usb/drivers ).

    
por 14.12.2016 / 02:16