Skip to main content

Tudo sobre o comando Linux / Unix: insmod

How to use lsmod, insmod, and rmmod commands in Linux (Pode 2025)

How to use lsmod, insmod, and rmmod commands in Linux (Pode 2025)
Anonim

O comando Linux / Unix insmod instala um módulo carregável no kernel em execução.insmod tenta ligar um módulo ao kernel em execução, resolvendo todos os símbolos da tabela de símbolos exportados do kernel.

Se o nome do arquivo do módulo for fornecido sem diretórios ou extensão,insmod irá procurar o módulo em alguns diretórios padrão comuns. A variável de ambienteMODPATH pode ser usado para substituir esse padrão. Se um arquivo de configuração do módulo, como/etc/modules.conf existe, ele substituirá os caminhos definidos noMODPATH.

A variável de ambienteMODULECONF também pode ser usado para selecionar um arquivo de configuração diferente do padrão/etc/modules.conf (ou/etc/conf.modules (descontinuada)). Esta variável de ambiente substituirá todas as definições acima.

Quando variável de ambienteUNAME_MACHINE está definido, modutils usará seu valor em vez do campo da máquina a partir do syscall uname (). Isso é principalmente útil quando você está compilando módulos de 64 bits em espaço de usuário de 32 bits ou vice-versa,UNAME_MACHINE para o tipo dos módulos. Os modutils atuais não suportam o modo de construção cruzada completa para módulos, limitando-se a escolher entre as versões de 32 e 64 bits da arquitetura do host.

Opções

-e persist_name , --persistir= persist_name

Especifica onde os dados persistentes para o módulo são lidos no carregamento e gravados quando esta instanciação do módulo é descarregada. Esta opção é silenciosamente ignorada se o módulo não tiver dados persistentes. Os dados persistentes são lidos apenas porinsmod se esta opção estiver presente, por padrãoinsmod não processa dados persistentes.

Como uma forma abreviada,-e "" (uma string vazia) é interpretada porinsmod como o valor depersistir como definido emmodules.conf, seguido pelo nome do arquivo do módulo relativo ao caminho de busca do módulo em que foi encontrado, menos qualquer ".gz", ".o" ou ".mod". E semodules.conf especifica "persistdir ="(isto épersistir é um campo vazio), então esta forma abreviada é silenciosamente ignorada. (Vejomodules.conf (5).)

-f, --força

Tente carregar o módulo mesmo se a versão do kernel em execução e a versão do kernel para o qual o módulo foi compilado não corresponderem. Isso apenas substitui a verificação de versão do kernel, não tem efeito nas verificações de nome de símbolo. Se os nomes dos símbolos no módulo não coincidirem com o kernel, então não há como forçarinsmod para carregar o módulo.

-h, --Socorro

Exibe um resumo das opções e sai imediatamente.

-k, --auto-limpeza

Definir o sinalizador de limpeza automática no módulo. Esta bandeira será usada porKerneld(8) para remover módulos que não tenham sido usados ​​em algum período de tempo - geralmente um minuto.

-EU, --lock

Usarrebanho(2) para impedir cargas simultâneas do mesmo módulo.

-m, --mapa

Saída de um mapa de carga no stdout, facilitando a depuração do módulo no caso de um kernel panic.

-n, --sem carga

Dummy run, faça tudo, exceto carregar o módulo no kernel. Se solicitado por um-m ou-O, a execução produzirá um mapa ou um arquivo blob. Como o módulo não está carregado, o endereço de carregamento real do kernel é desconhecido, portanto, o mapa e o arquivo blob são baseados em um endereço de carga arbitrário de 0x12340000.

-o nome do módulo , --nome= nome do módulo

Nomeie explicitamente o módulo, em vez de derivar o nome do nome base do arquivo de objeto de origem.

-O blob_name , --blob= blob_name

Salve o objeto binário em blob_name . O resultado é um blob binário (sem cabeçalhos ELF) mostrando exatamente o que é carregado no kernel após a manipulação e realocação da seção. Opção-m Recomenda-se obter um mapa do objeto.

-p, --problema

Teste o módulo para ver se ele pode ser carregado com sucesso. Isso inclui localizar o arquivo de objeto no caminho do módulo, verificar números de versão e resolver símbolos. Ele não verifica as realocações nem produz um arquivo de mapa ou de blob.

-P prefixo , --prefixo= prefixo

Esta opção pode ser usada com módulos versionados para um kernel SMP ou bigmem, desde que tais módulos tenham um prefixo extra adicionado em seus nomes de símbolos. Se o kernel foi construído com versões de símbolo, entãoinsmod irá extrair automaticamente o prefixo da definição de "get_module_symbol" ou "inter_module_get", um dos quais deve existir em qualquer kernel que suporte módulos. Se o kernel não tem versões de símbolos, mas o módulo foi construído com versões de símbolos, então o usuário deve fornecer-P.

-q, --quieto

Não imprima uma lista de quaisquer símbolos não resolvidos. Não reclame sobre incompatibilidade de versão. O problema só será refletido no status de saída deinsmod.

-r, --raiz

Alguns usuários compilam módulos sob um ID de usuário não-root e instalam os módulos como root. Esse processo pode deixar os módulos pertencentes ao ID do usuário não-root, mesmo que o diretório modules seja de propriedade root. Se o ID do usuário não-root for comprometido, um intruso pode sobrescrever os módulos existentes pertencentes a esse ID do usuário e usar essa exposição para iniciar o acesso root.

Por padrão, os modutils rejeitarão tentativas de usar um módulo que não seja de propriedade do root. Especificando -r irá alternar a verificação e permitir que o root carregue módulos que não sejam de propriedade do root.

Nota: O valor padrão para verificação de raiz pode ser alterado quando modutils é configurado.O uso de -r para desabilitar a verificação de raiz ou definir o padrão como "nenhuma verificação de raiz" no momento da configuração é uma grande exposição de segurança e não é recomendado.

-s, --syslog

Saída tudo parasyslog(3) em vez do terminal.

-S, --kallsyms

Forçar o módulo carregado a terkallsyms dados, mesmo que o kernel não suporte. Esta opção é para sistemas pequenos onde o kernel é carregado semkallsyms dados, mas os módulos selecionados precisamkallsyms para depuração. Esta opção é a padrão no Red Hat Linux.

-v, --verbose

Seja verboso.

-V, --versão

Exibe a versão doinsmod.

-X, --exportar; -x, --noexport

Faça e não exporte todos os símbolos externos do módulo, respectivamente. O padrão é que os símbolos sejam exportados. Essa opção só será efetiva se o módulo não exportar explicitamente sua própria tabela de símbolos controlada e, portanto, for reprovado.

-Y, --ksymoops; -y, --noksymoops

Faça e não adicioneksymoops símbolos para ksyms. Estes símbolos são usados ​​porksymoops para fornecer melhor depuração se houver um Oops neste módulo. O padrão é para oksymoopssímbolos a serem definidos. Esta opção é independente do-X/-x opções.

ksymoops símbolos adicionam aproximadamente 260 bytes por módulo carregado. A menos que você esteja realmente com pouco espaço no kernel e esteja tentando reduzir ksyms ao seu tamanho mínimo, pegue o padrão e obtenha depuração Oops mais precisa.ksymoops símbolos são necessários para salvar os dados do módulo persistente.

-N, - somente numérico

Verifique apenas a parte numérica da versão do módulo com relação à versão do kernel, ou seja, ignore EXTRAVERSION ao decidir se um módulo pertence a um kernel. Este flag é automaticamente configurado para o kernel 2.5 em diante, é opcional para kernels anteriores.

Parâmetros do Módulo

Alguns módulos aceitam parâmetros de tempo de carregamento para personalizar sua operação. Esses parâmetros são geralmente números de porta e E / S de E / S que variam de máquina para máquina e não podem ser determinados a partir do hardware.

Nos módulos construídos para os kernels da série 2.0, qualquer símbolo de ponteiro inteiro ou de caractere pode ser tratado como um parâmetro e modificado. Começando nos kernels da série 2.1, os símbolos são explicitamente marcados como parâmetros, de modo que apenas valores específicos possam ser alterados. Além disso, informações de tipo são fornecidas para verificar os valores fornecidos no tempo de carregamento.

No caso de inteiros, todos os valores podem estar em decimal, octal ou hexadecimal a la C: 17, 021 ou 0x11. Elementos de matriz são especificados seqüência separados por vírgulas. Elementos podem ser ignorados omitindo o valor.

Nos módulos da série 2.0, os valores que não começam com um número são considerados sequências. Começando em 2.1, as informações de tipo do parâmetro indicam se deve interpretar o valor como uma string. Se o valor começar com aspas duplas ('), a string é interpretada como C, seqüências de escape e tudo. Observe que, no prompt do shell, as citações podem precisar ser protegidas da interpretação do shell.

Módulos Licenciados e Símbolos GPL

A partir do kernel 2.4.10, os módulos devem ter uma string de licença, definida usandoMODULE_LICENSE (). Várias strings são reconhecidas como compatíveis com GPL; qualquer outra string de licença ou nenhuma licença significa que o módulo é tratado como proprietário.

Se o kernel suportar o/ proc / sys / kernel / contaminado bandeira entãoinsmod será OU a bandeira contaminada com '1' ao carregar um módulo sem uma licença GPL. Um aviso será emitido se o kernel suportar a contaminação e um módulo for carregado sem uma licença. Um aviso é sempre emitido para os módulos que têm umMODULE_LICENSE () isso não é compatível com GPL, mesmo em kernels mais antigos que não suportam a contaminação. Isso minimiza os avisos quando um novo modutils é usado em kernels mais antigos.

insmod -f (força) o modo OU a bandeira contaminada com '2' nos kernels que suportam o tainting. Sempre emite um aviso.

Alguns desenvolvedores do kernel exigem que os símbolos exportados por seu código só possam ser usados ​​por módulos com uma licença compatível com GPL. Estes símbolos são exportados porEXPORT_SYMBOL_GPL em vez do normalEXPORT_SYMBOL. Os símbolos somente GPL exportados pelo kernel e por outros módulos são visíveis somente para módulos com uma licença compatível com GPL, estes símbolos aparecem em/ proc / ksyms com um prefixo de 'GPLONLY_'. insmod ignora oGPLONLY_ prefixo em símbolos ao carregar um módulo licenciado GPL, de modo que o módulo apenas se refira ao nome do símbolo normal, sem o prefixo. Símbolos GPL apenas não são disponibilizados para módulos sem uma licença compatível com GPL, isso inclui módulos sem licença.

Assistência Ksymoops

Para ajudar na depuração do kernel Oops ao usar módulos,insmod O padrão é adicionar alguns símbolos aos ksyms, ver o-Y opção. Estes símbolos começam com__insmod_ nome do módulo_ . o nome do módulo é necessário para tornar os símbolos exclusivos. É legal carregar o mesmo objeto mais de uma vez em nomes de módulo diferentes. Atualmente, os símbolos definidos são:

__insmod_ nome do módulo _ Oobjectfile _ Mmtime _ Vversion

objectfile é o nome do arquivo do qual o objeto foi carregado. Isso garante que o ksymoops possa corresponder o código ao objeto correto. mtime é o último registro de data e hora modificado nesse arquivo em hexadecimal, zero se a estatística falhar. versão é a versão do kernel para a qual o módulo foi compilado, -1 se nenhuma versão estiver disponível. o_O símbolo tem o mesmo endereço inicial que o cabeçalho do módulo.

__insmod_ nome do módulo _ Ssectionname _ Comprimento

Este símbolo aparece no início das seções ELF selecionadas, atualmente .text, .rodata, .data, .bss e .sbss. Só aparece se a seção tiver um tamanho diferente de zero. Nome da Seção é o nome da seção ELF, comprimento é o comprimento da seção em decimal. Esses símbolos ajudam os ksymoops a mapear endereços para seções quando nenhum símbolo estiver disponível.

__insmod_ nome do módulo _Persistente_ nome do arquivo

Criado apenas porinsmod se o módulo tiver um ou mais parâmetros marcados como dados persistentes e um nome de arquivo para salvar dados persistentes-e, acima) está disponível.

O outro problema com a depuração do kernel Oops em módulos é que o conteúdo de / proc / ksyms e / proc / modules pode mudar entre o Oops e quando você processa o arquivo de log. Para ajudar a superar este problema, se o diretório / var / log / ksymoops existir,insmod ermmod irá copiar automaticamente / proc / ksyms e / proc / modules para / var / log / ksymoops com um prefixo de `date +% Y% m% d% H% M% S`. O administrador do sistema pode informar ao ksymoops quais arquivos de instantâneo devem ser usados ​​ao depurar um Ops. Não há comutador para desativar essa cópia automática. Se você não quiser que isso ocorra, não crie / var / log / ksymoops. Se esse diretório existir, ele deve ser de propriedade de root e estar no modo 644 ou 600 e você deve executar esse script todos os dias. O script abaixo é instalado como insmod_ksymoops_clean.

#! / bin / sh # Excluir ksyms e módulos salvos não acessados ​​em 2 dias if -d / var / log / ksymoops então set -e # Certifique-se de que há sempre pelo menos uma versão d = `data +% Y% m% d% A% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules encontre / var / log / ksymoops -tipo f -atime +2 -exec rm {} ; fi

Informação Básica a Saber

NOME

insmod - instalar o módulo do kernel carregável

SINOPSE

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o nome do módulo -O blob_name -P prefixo módulo símbolo= valor …