Como o kernel do linux lida com drivers?

4

Acabei de ler sobre a maneira como o Linux lida com drivers de hardware. Aparentemente, a maioria dos drivers de hardware vem pré-compilada no kernel do Linux. Eu tenho algumas perguntas sobre isso ...

Se o kernel do Linux contém drivers de hardware para quase todos os dispositivos de hardware, E se um laptop que roda no Linux tem apenas um certo número de dispositivos de hardware, então e todos os drivers de hardware redundantes que o kernel Linux possui? Não é um desperdício de recursos manter todos esses drivers no kernel e mantê-lo em funcionamento no sistema mesmo quando não os estamos usando?

    
por Uday Kumar 22.12.2016 / 15:54

1 resposta

6

Primeiro um pouco de história. Nos primeiros dias do Linux, os drivers de dispositivos eram de fato compilados diretamente no kernel. Na verdade, ainda é possível compilar os drivers diretamente e muitos kernels ainda podem ter alguns drivers muito comuns incluídos dessa maneira. O modo como funcionava era o kernel genérico distribuído com as primeiras distribuições, como SLS ou Slackware, tinha virtualmente todos os drivers que o kernel suportava compilados diretamente nele para que funcionasse na maior variedade possível de hardware possível. Mesmo assim, não foi possível colocá-los todos porque alguns deles são mutuamente incompatíveis. Então, depois que você instalasse seu sistema, você construiria seu próprio kernel, examinando cuidadosamente a configuração para ter certeza de incluir os drivers corretos para tudo que seu computador tinha. Às vezes você tinha que editar manualmente os arquivos de cabeçalho no driver para incluir suporte para hardware excêntrico - uma placa Ethernet que usava um chipset específico usava os drivers desse chipset, mas às vezes havia maneiras engraçadas de ser implementado. Então você compilará, instalará e, esperançosamente, após a reinicialização, você terá um kernel personalizado construído apenas para o seu computador. Magra e otimizada. Na realidade, você geralmente repete esse processo várias vezes, incluindo coisas que você perdeu, adicionando suporte a um sistema de arquivos que você esqueceu ou ajustando as configurações de alguma forma. Enxagúe e repita.

Esses dias, felizmente, já passaram. O kernel suporta, há muito tempo, módulos carregáveis. Esses são drivers de kernel compilados para se tornar um tipo de biblioteca compartilhada que pode ser carregada ou descarregada sob demanda. Agora, a maneira como o kernel inicializa é que você tem o próprio arquivo de kernel e um pequeno sistema de arquivos compactado (veja initramfs na Wikipedia) que contém todos os módulos do kernel que o kernel suporta. O kernel carrega, ele encontra seu sistema de arquivos inicial e então ele pode começar a carregar todos os drivers de que precisa.

Esse pouco de história está pular muito trabalho e suar ao longo do caminho. No meio de usar todos os drivers compilados em um enorme kernel monolítico e ter um sistema de carregamento de drivers totalmente automatizado, temos hoje todos os passos nesse caminho, onde tivemos módulos que tinham que ser carregados explicitamente, carregamento semi-automático para alguns, etc. etc

Portanto, como os kernels modernos exigem a grande maioria dos drivers de que precisam, não há uma quantidade significativa de drivers de hardware redundantes ocupando recursos no kernel de qualquer distribuição Linux moderna.

    
por Kurt Fitzner 22.12.2016 / 17:00