Como o kernel do linux conhece os números maior e menor do dispositivo?

4

Até onde eu sei, o kernel detecta hardware, adiciona informações ao sysfs cria um dispositivo em / dev e gera um evento do udev. Minha pergunta é: os drivers de dispositivos fazem tudo isso ou é o próprio kernel? Se os drivers fizerem isso, eles saberão o número principal e secundário do dispositivo para criar o arquivo em devtmps.

Eu também entendo (talvez erroneamente) que é o udev que chama o modprobe para carregar os drivers que manipulam um dispositivo.

Foi-me dito que eles o fazem com o conteúdo da variável de ambiente MODALIAS uevent, carregando assim todos os módulos cujos aliases correspondam a essa string (o driver correto). Resumindo: quais são os passos de detecção de hardware no linux e quem executa cada passo: o kernel em si, o driver dentro do kernel ou o udev no userspace. Obrigado.

    
por miguel 08.10.2016 / 22:51

1 resposta

6

O kernel conhece os números dos dispositivos porque decide os números dos dispositivos. Cada driver registra os números de dispositivos que gerencia. Os números são codificados no código-fonte ou, em alguns casos, alocados dinamicamente. O sistema de arquivos sysfs permite que aplicativos como o udev descubram os dispositivos suportados pelo kernel. Consulte Como o udev obtém números de dispositivos para os dispositivos que cria? para mais detalhes.

O código de inicialização do driver investiga o hardware e registra os dispositivos com base no hardware encontrado durante a análise. Alguns tipos de hardware não suportam sondagem; por exemplo, o barramento ISA (um barramento em grande parte desatualizado em computadores do tipo PC) não fornece nenhuma maneira de listar o hardware conectado, o motorista só pode tentar se comunicar e rezar para que não haja um periférico diferente no mesmo endereço. Em algumas plataformas, o bootloader inclui uma árvore de dispositivos descrevendo os periféricos disponíveis e onde eles são mapeados, e o kernel do Linux ativa os drivers com base nessas informações. Existem três maneiras de carregar um driver para um periférico.

  • O driver pode ser incluído como parte da imagem do kernel.
  • O driver pode ser compilado como um módulo e carregado explicitamente (por exemplo, incluindo-o em /etc/modules ou em um initramfs).
  • Existe um mecanismo para carregar automaticamente determinados drivers com base nas informações relatadas pelos tipos de barramento que podem listar periféricos conectados junto com um número de identificação universal, como PCI (o barramento principal no PC moderno) e USB. O kernel executa modprobe e passa um nome simbólico que codifica a identificação do periférico, que é um alias para o nome “real” do módulo do driver. Veja Os módulos do driver são carregados e descarregados automaticamente?
por 09.10.2016 / 00:02