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?