Os drivers de hardware do Linux são módulos do kernel. Por causa do modelo de código aberto e licenciamento do kernel, muito poucos deles são escritos por fabricantes de hardware; a maioria deles é engenharia reversa ou baseada em protocolos públicos padronizados. Tenho certeza que o bluetooth está no reino posterior, e também que coisas como mouses e teclados são, na maioria dos casos, totalmente genéricas.
Os módulos são parte integrante da árvore de origem do kernel; Ou seja, se você baixar o código-fonte do kernel do Linux, ele vem com o código para todos os módulos disponíveis. Você não precisa incluir todos eles quando você os construir, é claro.
Linux distros (geralmente) são uma coleção de binários pré-construídos, e isso inclui o kernel. O kernel em si é um binário; módulos podem ser construídos ou binários separados que o kernel pode carregar e descarregar. Uma vez que a construção de todos os módulos disponíveis no único binário resultaria em um kernel enorme e ridículo, e as distribuições querem cobrir o máximo de hardware possível, os pacotes distro do kernel incluem uma ampla variedade de módulos binários individuais.
Você pode ver isso em /lib/modules
. Módulos de drivers são registrados com o kernel e construídos ao mesmo tempo; o kernel está ciente do que está disponível no sistema. Quando você conecta um novo hardware, ele se identifica ao sistema e o kernel escolhe um driver apropriado de /lib/modules
para carregar.
Você pode ver todos os seus módulos atualmente carregados com lsmod
.