Existe uma maneira definitiva de relacionar o código-fonte de um driver no kernel do Linux ao próprio dispositivo?

3

O código fonte do kernel Linux contém as fontes de drivers para muitos dispositivos no diretório /drivers . Às vezes, olhando para o comentário do código-fonte, é possível obter uma sugestão do dispositivo para o qual o driver foi escrito. Mas, muitas vezes, não faço ideia do dispositivo ou da família de dispositivos para os quais o driver é direcionado. É possível, por acaso, rastrear um driver de volta ao dispositivo correspondente?

    
por Holmes.Sherlock 13.07.2016 / 07:28

1 resposta

4

Depende do tipo de dispositivo para o qual o driver está escrito. Um exemplo simples, mas comum, são os dispositivos PCI .

Os dispositivos PCI identificam-se com uma série de registros no Espaço de Configuração PCI . Assim, por exemplo, uma placa de rede identificará o tipo de cartão com uma série de valores de registro que o kernel Linux pode ler.

Os drivers de dispositivo para dispositivos PCI exportam uma tabela de IDs de PCI que descrevem quais dispositivos o próprio controlador pode controlar. Esta tabela de IDs está registrada no kernel do Linux. O kernel do Linux pode então percorrer cada dispositivo conectado ao sistema, obter o ID do PCI do dispositivo e, em seguida, verificar qual driver está registrado para esse ID. É assim que um driver é selecionado para uma parte específica do hardware PCI.

Eu escrevi uma postagem no blog a> sobre a pilha de rede do Linux (ajuste, otimização, monitoramento e mais). No início desse post eu caminho através do código de driver de rede igb Linux (com exemplos de código reais) e mostro o código que exporta os IDs PCI para os dispositivos que o driver igb pode controlar.

    
por 13.07.2016 / 17:55