Skip to content

Comando Linux / Unix: modprobe

28 de abril de 2021

Neste artigo

O kernel do Linux cresceu e se tornou um grande software. De certa forma, isso é bom. Em outros, torna-se um tanto inflexível. A solução é dividir partes do kernel em módulos. Estes módulos podem ser carregados ou não, atendendo à configuração do computador e às suas necessidades. O comando modprobe carrega novos módulos do kernel em um sistema Linux, permitindo que você habilite novos recursos e suporte sem uma reinicialização.

Retrato de jovem arquiteto usando laptop em um escritório

Westend61 / Getty Images

Usando Modprobe

O Modprobe geralmente é simples de usar. Depois de saber o módulo do kernel que deseja carregar, passe-o para o comando modprobe. sudo modprobe rtl8723de

Isso é tudo que há para fazer. O módulo é carregado até que você reinicie o sistema. Se você deseja remover um módulo sem reinicializar, execute novamente o comando com o -r bandeira. sudo modprobe -r rtl8723de

Na maior parte, é assim que você trabalhará com o modprobe. Para saber mais, verifique a documentação técnica abaixo.

Documentação Técnica Modprobe

O comando modprobe executa o manuseio de alto nível de módulos carregáveis.

Sinopse

modprobe [-adnqv] [-C config] módulo [symbol=value …] modprobe [-adnqv] [-C config] [-t type] padronizar modprobe -eu [-C config] [-t type] padronizar modprobe -c [-C config] modprobe -r [-dnv] [-C config] [module …] modprobe -Vh

Opções

-uma, –tudo

Carregue todos os módulos correspondentes em vez de parar após o primeiro carregamento bem-sucedido.

-c, –showconfig

Mostra a configuração usada atualmente.

-C, –config config

Use o arquivo config em vez de (o opcional) /etc/modules.conf para especificar a configuração. A variável de ambiente MODULECONF também pode ser usado para selecionar (e substituir) um arquivo de configuração diferente do padrão /etc/modules.conf (ou /etc/conf.modules que está obsoleto). Quando variável de ambiente UNAME_MACHINE for definido, modutils usa seu valor em vez do campo da máquina do syscall uname (). Isso é principalmente útil ao compilar módulos de 64 bits em um espaço de usuário de 32 bits ou vice-versa, definir UNAME_MACHINE para o tipo dos módulos. Os modutils atuais não suportam o modo de construção cruzada completa para módulos, ele é limitado a escolher entre as versões de 32 e 64 bits da arquitetura do host.

-d, –depurar

Mostra informações sobre a representação interna da pilha de módulos.

-h, –ajuda

Exiba um resumo das opções e saia imediatamente.

-k, –auto-limpeza

Defina autoclean nos módulos carregados. Usado pelo kernel quando ele chama modprobe para satisfazer um recurso ausente (fornecido como um módulo). O -q opção está implícita por -k. Essas opções são enviadas automaticamente para o insmod.

-n, –mostrar

Não execute a ação, apenas mostre o que seria feito.

-q, –quieto

Não reclame sobre a falha do insmod ao instalar um módulo. Continue normalmente, mas silenciosamente, com outras possibilidades para o modprobe testar. Esta opção é enviada automaticamente para insmod.

-r, –remover

Remova o módulo (pilhas) ou faça autoclean, dependendo se houver algum módulo mencionado na linha de comando.

-s, –syslog

Relatório via syslog em vez de stderr. Esta opção é enviada automaticamente para insmod.

-t tipo de módulo; –modelo tipo de módulo

Considere apenas módulos deste tipo. modprobe só olha para módulos cujo caminho de diretório inclui exatamente / moduletype /. tipo de módulo pode incluir mais de um nome de diretório, por exemplo, -t drivers / rede lista os módulos em xxx / drivers / net / e seus subdiretórios.

-v, –verbose

Imprima todos os comandos à medida que são executados.

-V, –version

Exibe a versão do modprobe. Os nomes dos módulos não devem conter caminhos (não /), nem o nome pode conter o traço .o. Por exemplo, escorregar é um nome de módulo válido para modprobe, /lib/modules/2.2.19/net/slip e slip.o são inválidos. Isso se aplica à linha de comando e às entradas na configuração.

Descrição do Comando

Os utilitários modprobe e depmod têm como objetivo tornar um kernel modular Linux mais gerenciável para usuários, administradores e mantenedores de distribuição. O Modprobe usa um arquivo de dependência do tipo Makefile, criado pelo depmod, para carregar automaticamente os módulos relevantes do conjunto de módulos disponíveis nas árvores de diretório predefinidas. O Modprobe é usado para carregar um único módulo, uma pilha de módulos dependentes ou todos os módulos marcados com uma tag especificada. O Modprobe carrega automaticamente todos os módulos básicos necessários em uma pilha de módulos, conforme descrito pelo arquivo de dependência modules.dep. Se o carregamento de um desses módulos falhar, toda a pilha atual de módulos carregados na sessão atual será descarregada automaticamente. O Modprobe possui duas maneiras de carregar módulos. Uma maneira (o modo de teste) tentará carregar um módulo de uma lista (definida por padronizar) O Modprobe para de carregar assim que um módulo é carregado com sucesso. Isso pode ser usado para carregar automaticamente um driver Ethernet de uma lista. A outra maneira que modprobe pode ser usado é carregar todos os módulos de uma lista. Com a opção -r, o modprobe descarrega automaticamente uma pilha de módulos, semelhante à maneira rmmod -r faz. Usando apenas modprobe -r limpa os módulos carregados automaticamente não usados ​​e também executa os comandos pré e pós-remoção no arquivo de configuração /etc/modules.conf. Combinando as opções -eu e -t lista todos os módulos disponíveis de um determinado tipo. Opção -c imprime a configuração usada atualmente (arquivo de configuração + padrão).

Configuração

O comportamento de modprobe (e depmod) pode ser modificado pelo arquivo de configuração (opcional) /etc/modules.conf. Para obter uma descrição detalhada do que este arquivo pode conter, bem como a configuração padrão usada por depmod e modprobe, consulte modules.conf(5). Os comandos pré e pós-remoção não são executados se um módulo for autolimpado pelo kerneld. Em vez disso, procure o suporte futuro para armazenamento de módulo persistente. Se você quiser usar os recursos de pré e pós-instalação, desligue o autoclean para o kerneld e, em vez disso, coloque algo como a seguinte linha no crontab (também é usado para sistemas kmod) para fazer o autoclean a cada 2 minutos: * / 2 * * * * test -f / proc / modules && / sbin / modprobe -r

Estratégia

A ideia é que o modprobe procure primeiro no diretório que contém os módulos compilados para a versão atual do kernel. Se o módulo não for encontrado lá, modprobe procura no diretório comum à versão do kernel (por exemplo, 2.0, 2.2). Se o módulo ainda não for encontrado, o modprobe procura no diretório que contém os módulos uma versão padrão e assim por diante. Quando você instala um novo Linux, os módulos devem ser movidos para um diretório relacionado ao lançamento (e versão) do kernel que você está instalando. Em seguida, faça um link simbólico deste diretório para o diretório padrão. Cada vez que você compila um novo kernel, o comando make modules_install cria um novo diretório, mas não altera o link padrão. Ao obter um módulo não relacionado à distribuição do kernel, coloque-o em um dos diretórios independentes de versão em / lib / modules. Esta é a estratégia padrão, que pode ser substituída em /etc/modules.conf.

Exemplos

modprobe -t net

Carregue um dos módulos que estão armazenados no diretório marcado internet. Cada módulo é tentado até obter sucesso.

modprobe -a -t boot

Todos os módulos que são armazenados em diretórios marcados Bota são carregados.

deslizamento modprobe

Isso tenta carregar o módulo slhc.o se não foi carregado anteriormente, pois o módulo slip precisa da funcionalidade do módulo slhc. Esta dependência é descrita no arquivo modules.dep que foi criado automaticamente pelo depmod.

modprobe -r slip

Isso descarrega o módulo deslizante. Ele também descarrega o módulo slhc automaticamente, a menos que seja usado por algum outro módulo também (por exemplo, ppp).

Veja também: depmod (8), lsmod (8), kerneld (8), ksyms (8), rmmod (8).

Modo de segurança

Se o uid efetivo não for igual ao uid real, o modprobe trata sua entrada com extrema suspeita. O último parâmetro é sempre tratado como um nome de módulo, mesmo se começar com . Só pode haver um nome de módulo e opções do formulário variável = valor são proibidos. O nome do módulo é sempre tratado como uma string, nenhuma meta expansão é executada no modo de segurança. No entanto, a metaexpansão é aplicada aos dados lidos do arquivo de configuração. euid pode não ser igual a uid quando modprobe é invocado a partir do kernel, isso é verdade para kernels 2.4.0-test11 e posteriores. Em um mundo ideal, modprobe poderia confiar no kernel para passar apenas parâmetros válidos para modprobe. No entanto, pelo menos um exploit de root local ocorreu porque o código do kernel de alto nível passou parâmetros não verificados direto do usuário para o modprobe. Portanto, o modprobe não confia mais na entrada do kernel. modprobe define automaticamente o modo de segurança quando o ambiente consiste apenas nessas strings HOME = /
TERM = linux
PATH = / sbin: / usr / sbin: / bin: / usr / bin

Isso detecta a execução do modprobe do kernel nos kernels 2.2 até 2.4.0-test11, mesmo se uid == euid, o que faz nos kernels anteriores.

Comandos de registro

Se o diretório / var / log / ksymoops existe e modprobe é executado com uma opção que pode carregar ou excluir um módulo, modprobe registra seu comando e retorna o status em / var / log / ksymoops / ‘data +% Y% m% d.log’. Não há nenhuma opção para desativar este registro automático, se você não quiser que isso ocorra, não crie / var / log / ksymoops. Se esse diretório existir, ele deve pertencer ao root e estar no modo 644 ou 600 e você deve executar o script insmod_ksymoops_clean todos os dias ou assim.

Utilitários necessários

depmod (8), insmod (8). Use o homem comando (% homem) para ver como um comando é usado no seu computador.