Posso detectar se meu kernel customizado foi construído com suporte a módulos?

6

Recebi uma instalação mínima do Linux fornecida pelo fornecedor. De uma resposta a uma pergunta anterior, descobri que é possível construir um kernel com ou sem suporte a módulos. Eu tenho um dispositivo CANBUS que eu preciso anexar que vem com drivers na forma de arquivos. Eu gostaria de poder instalá-los com os scripts de instalação fornecidos, mas em primeiro lugar eu preciso saber se meu kernel foi construído com suporte a módulos - é possível para mim detectar isso a partir da linha de comando?

Quando executo lsmod , ele não retorna nada, então sei que não há arquivos .ko no momento - mas será que isso significa que o kernel não me permitirá instalar um arquivo .ko?

    
por mathematician1975 16.07.2012 / 10:46

2 respostas

9

Se você tiver um sistema de arquivos /proc , o arquivo /proc/modules existirá se e somente se o kernel for compilado com o suporte a módulos. Se o arquivo existe mas está vazio, seu kernel suporta módulos, mas nenhum está carregado no momento. Se o arquivo não existir, seu kernel não poderá carregar nenhum módulo.

É tecnicamente possível ter suporte a módulos carregáveis sem /proc . Você pode verificar a presença das chamadas do sistema init_module e delete_module no binário do kernel. Isso pode não ser fácil se você tiver apenas um binário compactado (por exemplo, vmlinuz ou uImage ). Veja Como eu descompacte o vmlinuz no vmlinux? para vmlinuz . Uma vez que você tenha conseguido descomprimir a maior parte do kernel, procure pela string sys_init_module .

Note que se os módulos forem suportados, você precisará de arquivos adicionais para compilar seus próprios módulos de qualquer maneira: cabeçalhos do kernel . Estes são arquivos de cabeçalho C ( *.h ), alguns dos quais são gerados quando o kernel é compilado (então você não pode simplesmente pegá-los da fonte do kernel). Veja O que uma árvore de código-fonte do kernel contém? Isso está relacionado aos cabeçalhos do kernel do Linux?

    
por 17.07.2012 / 23:43
2

A maioria das distribuições armazena um arquivo de texto com a configuração do kernel em algum lugar. Em um sistema Debian, você encontrará em /boot/config-<kernel_version> .

Você pode simplesmente executar grep nesse arquivo:

grep CONFIG_MODULES /boot/config-<kernel_version>
    
por 16.07.2012 / 10:54