Quais drivers de dispositivo estão embutidos no kernel?

14

Recentemente, instalei um Linux incorporado fornecido pelo fornecedor em um dispositivo de hardware. Quando executei lsmod na linha de comando do dispositivo, a resposta estava vazia. Fui levado a acreditar que isso significa que os drivers para o hardware em execução no dispositivo foram incorporados ao kernel, e não aos arquivos .ko. Minha pergunta é: como esse processo acontece?

O suporte para hardware popular é gradualmente integrado ao kernel em versões subsequentes, substituindo os arquivos .ko? O arquivo .ko é simplesmente usado para suportar um novo hardware que não possui suporte ao driver integrado ao kernel no momento do lançamento? No meu conhecimento limitado, pensei que todos os drivers de hardware eram da forma de arquivos .ko, mas claramente isso está errado.

Estou um pouco confuso com todo o processo e ficaria grato por esclarecimentos, pois tenho a sensação de que posso estar olhando para a situação da maneira errada.

    
por mathematician1975 14.07.2012 / 00:22

4 respostas

10

Os drivers essenciais que são considerados críticos para o carregamento do kernel geralmente são construídos no kernel, enquanto outros drivers de hardware, etc. são construídos como módulos ou arquivos .ko .

Os módulos .ko são normalmente armazenados no diretório /lib da sua partição raiz. Para usar qualquer um desses, o kernel deve primeiro ser capaz de detectar e acessar o dispositivo de armazenamento subjacente e, em seguida, acessar seu sistema de arquivos. Portanto, é seguro assumir que um kernel sem o suporte a SATA / SCSI e ext2 / 3/4 embutido não será realmente inicializado;)

Você pode optar por alternar a maioria dos drivers de kernel integrados para o formato de módulo. A equipe de kernel do Ubuntu decide se modifica a configuração padrão da equipe de kernel do Linux e inclui / exclui drivers internos adicionais para as imagens de kernel armazenadas que você baixa.

Se você construir seu próprio kernel, poderá fazer o mesmo:

  • Na captura de tela acima, o * indica um driver interno, enquanto M indica um módulo.
  • O suporte ao dispositivo de loopback, que geralmente é essencial para inicializar um sistema, é integrado por padrão.
  • O driver USB de baixa velocidade (USB 1.0) também é integrado por padrão para permitir que você inicialize um pendrive, mas aqui eu o mudei para um módulo.
por ish 14.07.2012 / 00:39
3

Ao compilar um kernel , você pode configurar quais componentes estão instalados. Não apenas isso, mas você pode escolher se eles estão ou não no kernel ou se eles são um módulo .

Por exemplo, muitas pessoas usam o sistema de arquivos ext2 em sua partição / boot . Por causa disso, o kernel deve ser capaz de ler sistemas de arquivos ext2 no momento da inicialização. Para conseguir isso, o módulo ext2 está embutido no próprio kernel.

Agora, imagine a quantidade de módulos disponíveis. Não faria sentido tê-los todos embutidos em seu kernel, seria? É por isso que você pode construí-los como módulos .ko separados e carregá-los à vontade.

    
por earthmeLon 14.07.2012 / 00:45
1

Depende de como você configurou sua compilação do kernel do linux.

Dentro de um processo de compilação, você geralmente pode:

  • compila o kernel com ou sem suporte a módulos (geralmente vem com suporte a módulos)
  • compila um driver como módulo ou como um software embutido direto no kernel

para entender o que é um arquivo .ko para link

O motivo pelo qual você tem uma saída vazia em lsmod é porque você tem um kernel monolítico.

Uma maneira rápida de listar todos os seus módulos (se estiverem presentes) é executando este comando

find /lib/modules/*/ -type f -iname '*.ko' | less

observe o uso de less , você pode usar cada pager que quiser ou redirecionar a saída para onde quiser.

    
por user827992 14.07.2012 / 00:42
0

Veja o conteúdo do arquivo / lib / modules / $ (uname -r) /modules.builtin

por exemplo. para procurar um módulo específico

grep <module> /lib/modules/$(uname -r)/modules.builtin

Documentação / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
    
por Andrew 14.09.2016 / 21:17