Recentemente, instalei um fornecedor fornecido linux incorporado em um dispositivo de hardware. Quando eu corri lsmod
na linha de comando do dispositivo, a resposta estava vazia. Eu 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 como arquivos .ko. Minha pergunta é a seguinte: como esse processo acontece?
O suporte ao hardware popular está gradualmente integrado ao kernel nas versões subseqüentes, substituindo os arquivos .ko? O arquivo .ko é simplesmente usado para oferecer suporte a novo hardware que não possui suporte de driver integrado ao kernel no momento do lançamento? Pelo meu conhecimento limitado, pensei que todos os drivers de hardware tinham a forma de arquivos .ko, mas claramente isso está errado.
Estou um pouco confuso com todo o processo e ficaria grato pelo esclarecimento, pois tenho a sensação de que posso estar vendo a situação da maneira errada.
Respostas:
Os drivers principais que são considerados críticos para o carregamento do kernel geralmente são embutidos no kernel, enquanto outros drivers de hardware etc. são criados como módulos ou arquivos .ko .
Os módulos .ko geralmente são armazenados no
/lib
diretório em 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 supor que um kernel sem o suporte SATA / SCSI e ext2 / 3/4 incorporado não será realmente inicializado;)Você pode optar por alternar a maioria dos drivers internos do kernel para o formato de módulo. A equipe de kernel do Ubuntu decide se deve modificar a configuração padrão da equipe de kernel do Linux e incluir / excluir drivers internos adicionais para as imagens de kernel que você baixa.
Se você construir seu próprio kernel, poderá fazer o mesmo:
*
indica um driver embutido, enquantoM
indica um módulo.fonte
Ao compilar um kernel , você pode configurar quais componentes estão instalados. Não apenas isso, mas você escolhe se eles são ou não incorporados ao kernel ou se são um módulo .
Por exemplo, muitas pessoas usam o sistema de arquivos ext2 em sua partição / boot . Por isso, o kernel deve poder ler os sistemas de arquivos ext2 no momento da inicialização. Para conseguir isso, o módulo ext2 é incorporado ao próprio kernel.
Agora, imagine a quantidade de módulos disponíveis. Não faria sentido tê-los todos embutidos no seu kernel, faria? É por isso que você pode construí-los como módulos .ko separados e carregá-los à vontade.
fonte
Isso depende de como você configurou sua compilação do kernel do linux.
Dentro de um processo de compilação, você geralmente pode:
para entender o que é um arquivo .ko para /programming/10476990/difference-between-o-and-ko-file
A razão pela qual você tem uma saída vazia
lsmod
é porque você tem um kernel monolítico.Uma maneira rápida de listar todos os seus módulos (se houver) é executando este comando
observe o uso de
less
, você pode usar todos os pagers desejados ou redirecionar a saída para onde desejar.fonte
.config
arquivo e modifique-o conforme necessário.Veja o conteúdo do arquivo / lib / modules / $ (uname -r) /modules.builtin
por exemplo, para procurar um módulo específico
Documentação / kbuild / kbuild.txt
fonte
parece conter todos os módulos internos e externos.
Mas também parece conter algumas entradas que na verdade não são módulos: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
TODO: leia a fonte e entenda com mais precisão o que é colocado lá.
A vantagem deste método é que você não confia em encontrar a configuração do kernel em
/boot
ou/proc/config.gz
.fonte