Uma opção de kernel desativada é equivalente a não carregar o módulo correspondente?

3

Suponha que eu configurei uma opção de configuração do kernel tristate para ser construída como um módulo, mas não carrego o módulo do kernel correspondente no tempo de execução (e ele não é carregado automaticamente). A funcionalidade do kernel resultante é equivalente ao que seria se eu tivesse desativado a opção imediatamente? Ou existe alguma diferença entre um módulo descarregado e uma opção desativada do kernel?

Às vezes, ao instalar pacotes no meu sistema Gentoo, recebo avisos do formulário

CONFIG_FLUX_CAPACITOR is set when it should not be

Normalmente, a opção é definida para ser construída como um módulo que não é carregado. O software parece funcionar bem em cada caso que eu encontrei até agora, mas eu estou querendo saber se isso é algo que eu posso esperar estar bem em geral.

    
por David Z 18.07.2015 / 09:56

1 resposta

2

A opção de tempo de compilação desativado significa que o código não está compilado.

Descarregar um módulo significa que o código foi compilado em um módulo, mas não está carregado na memória e, portanto, não é executado. Esteja ciente de que, às vezes, os módulos podem ser carregados automaticamente, portanto, se você precisar desativar certas funcionalidades, a opção segura é desativá-lo em tempo de compilação ou colocá-lo na lista negra em /etc/modprobe.conf ou /etc/modprobe.d/* . Ou removendo o arquivo de módulo do sistema de arquivos - você pode querer executar depmod depois e fazer uma nota mental, que pode haver alguns outros módulos que dependem dele (o que pode causar alguns problemas mais tarde).

Dito isto, capacidade sábia é a mesma. Pode haver (ou não) uma pequena diferença no código que está adaptado para ser executado com ou sem o módulo que você está (ou não) desativando: suponha que você possa compilar o kernel com o recurso A como um módulo. Se o recurso B for capaz de usar o recurso A, mas não exigir, o código resultante poderá ser diferente. Com A habilitado (independente de ser como módulo ou compilado), B pode incluir uma verificação opcional para a presença do recurso A. Com A desativado em tempo de compilação , tal verificação em B é irrelevante e pode ser ignorado completamente. No entanto, isso é algo que deve ser explicitamente declarado no próprio código (por exemplo, por meio de uma diretiva C #ifdef ), mas o compilador sozinho não pode decidir isso. Portanto, depende dos autores das partes que têm o recurso A como dependência opcional. Se deve ser chamado de funcionalmente diferente é questionável - ele não altera as capacidades, mas muito provavelmente muda o tempo de execução (mesmo que seja um pouco - e mesmo isso pode ser crucial em alguns casos).

    
por 18.07.2015 / 12:28