Um módulo do kernel é um código compilado que pode ser inserido no kernel em tempo de execução, como em insmod
ou modprobe
.
Um driver é um código que é executado no kernel para falar com algum dispositivo de hardware. Isso "impulsiona" o hardware. A maioria dos hardwares do seu computador possui um driver associado.¹ Uma grande parte de um kernel em execução é o código do driver.²
Um driver pode ser construído estaticamente no arquivo do kernel no disco.³ Um driver também pode ser construído como um módulo do kernel para que possa ser carregado dinamicamente posteriormente. (E então talvez descarregado.)
A prática padrão é construir drivers como módulos do kernel, sempre que possível, em vez de vinculá-los estaticamente ao kernel, já que isso dá mais flexibilidade. Há boas razões para não, no entanto:
-
Às vezes, um determinado driver é absolutamente necessário para ajudar o sistema a inicializar. Isso não acontece com a frequência que você imagina, devido ao recurso initrd .
-
Drivers estaticamente construídos podem ser exatamente o que você quer em um sistema com escopo estatístico, como um sistema incorporado . Ou seja, se você souber de antemão exatamente quais drivers serão sempre necessários e que isso nunca mudará, você tem uma boa razão para não se incomodar com os módulos dinâmicos do kernel.
-
Se você construir seu kernel estaticamente e desativar o recurso de carregamento de módulo dinâmico do Linux, você evita a modificação em tempo de execução do código do kernel. Isso proporciona segurança e estabilidade adicionais à custa da flexibilidade.
Nem todos os módulos do kernel são drivers. Por exemplo, um recurso relativamente recente no kernel do Linux é que você pode carregar um agendador de processos diferente . Outro exemplo é que os tipos mais complexos de hardware geralmente têm várias camadas genéricas que ficam entre o driver de hardware de baixo nível e o userland, como o Um driver HIDUSB , que implementa um elemento específico da USB stack , independente do hardware subjacente.
Além disso:
-
Uma exceção a esta afirmação geral é o chip da CPU, que não tem "driver" per se . Seu computador também pode conter hardware para o qual você não possui driver.
-
O restante do código em um kernel do sistema operacional fornece serviços genéricos como gerenciamento de memória , IPC , scheduling , etc. Esses serviços podem servir principalmente a aplicativos userland , como com os exemplos vinculados anteriormente, ou podem ser serviços internos usados por drivers ou outras infraestruturas dentro do kernel.
-
O em
/boot
, carregado na RAM no momento da inicialização pelo carregador de boot no início do processo de inicialização .