Comando depmod do Linux
Nos sistemas operacionais Linux , o comando depmod gera uma lista de dependências do módulo do kernel e arquivos de mapa associados.
Descrição
O depmod analisa seus módulos do kernel (no diretório / lib / modules / kernel-release ) e cria uma lista de dependências (denominada modules.dep ), para que, quando os módulos forem adicionados e removidos com o modprobe , nenhum módulo fique sem os outros módulos que exigir. Ao mesmo tempo, ele cria um mapa correlacionando identificadores de hardware e os módulos que os manipulam. Esse mapeamento é usado para encontrar o módulo correto quando uma peça de hardware solicita.
O kernel depende do depmod e modprobe para transmitir os dados brutos para seus módulos, na ordem em que é necessário carregá-los.
Sintaxe
depmod [-b basedir ] [-e] [-E Module . symvers ] [-F System.map ] [-n] [-v] [-A] [-P prefixo ] [-w] [ versão ]
depmod [-e] [-E Module.symvers ] [-F System.map ] [-m] [-n] [-v] [-P prefixo ] [-w] [ versão ] [ nome do arquivo ...]
Descrição técnica
Os módulos do kernel Linux podem fornecer serviços (chamados “símbolos”) para uso de outros módulos (usando uma das variantes EXPORT_SYMBOL no código). Se um segundo módulo usa esse símbolo, esse segundo módulo depende claramente do primeiro módulo. Essas dependências podem se tornar bastante complexas.
O depmod cria uma lista de dependências do módulo lendo cada módulo em / lib / modules / release-kernel e determinando quais símbolos ele exporta e quais símbolos ele precisa. Por padrão, essa lista é gravada em modules.dep e uma versão binária de hash denominada modules.dep.bin , no mesmo diretório . Se os nomes dos arquivos forem fornecidos na linha de comando , apenas esses módulos serão examinados (o que raramente é útil, a menos que todos os módulos estejam listados).
O depmod também cria uma lista de símbolos fornecidos pelos módulos no arquivo chamado modules.symbols e sua versão de hash binária, modules.symbols.bin .
Finalmente, o depmod produzirá um arquivo chamado modules.devname se os módulos fornecerem nomes de dispositivos especiais ( devname ) que devem ser preenchidos em / dev na inicialização (por um utilitário como o udev).
Se uma versão for fornecida, o diretório do módulo dessa versão do kernel será usado em vez da versão atual do kernel (retornada por uname -r ).
Opções
-a , –all | Teste todos os módulos. Esta opção é ativada por padrão se nenhum nome de arquivo for fornecido na linha de comando. |
-A , –quick | Essa opção verifica se algum módulo é mais recente que o arquivo modules.dep antes que qualquer trabalho seja concluído: caso contrário, ele sai silenciosamente, em vez de gerar novamente os arquivos. |
-b basedir , –basedir , basedir | Se seus módulos não estiverem atualmente no diretório (normal) / lib / modules / kernel-version , mas em uma área de preparação, você poderá especificar um basedir que é anexado ao nome do diretório. Esse arquivo é retirado do arquivo modules.dep resultante, portanto está pronto para ser movido para o local normal. Use esta opção se você for um fornecedor de distribuição que precise gerar previamente os arquivos de metadados em vez de executar o depmod novamente mais tarde. |
-C , –config arquivo-ou-diretório | Esta opção substitui o diretório de configuração padrão em /etc/depmod.d/ . |
-e , –errsyms | Quando combinado com a opção -F , ele relata quaisquer símbolos que um módulo precise que não sejam fornecidos por outros módulos ou pelo kernel. Normalmente, qualquer símbolo não fornecido pelos módulos é assumido como sendo fornecido pelo kernel (o que deve ser verdadeiro em um mundo perfeito), mas essa suposição pode ser interrompida especialmente quando drivers de terceiros atualizados adicionalmente não são instalados corretamente ou foram construídos incorretamente. |
-E , –symvers | Quando combinado com a opção -e , ele reporta todas as versões de símbolos fornecidas pelos módulos que não correspondem às versões de símbolos fornecidas pelo kernel em seu Module.symvers . Esta opção é mutuamente incompatível com -F . |
-F , –filesyms System.map | Fornecido com o System.map produzido quando o kernel foi construído, isso permite que a opção -e relate símbolos não resolvidos. Esta opção é mutuamente incompatível com -E . |
-h , –help | Imprima a mensagem de ajuda e saia. |
-n , –dry-run | Isso envia o modules.dep resultante e os vários arquivos de mapeamento para a saída padrão em vez de gravá- los no diretório do módulo. |
-P | Algumas arquiteturas prefixam símbolos com caracteres estranhos. Isso especifica um caractere de prefixo (por exemplo, ‘ _ ‘) a ser ignorado. |
-v , –verbose | Modo verboso ; O depmod imprimirá na saída padrão todos os símbolos dos quais cada módulo depende e o nome do arquivo do módulo que fornece esse símbolo. |
-V , –version | Mostre a versão do depmod e saia. Veja abaixo as advertências quando executadas em kernels mais antigos. |
-W | Avisar sobre dependências duplicadas, aliases, versões de símbolos etc. |
Exemplos
A série de comandos a seguir ilustra uma maneira comum de usar o depmod . Cada comando é prefixado com sudo , pois eles exigem permissões de root :
sudo ln -s /path/to/your-kernel-module.ko / lib / modules / `uname -r`
sudo depmod -a
sudo modprobe seu módulo do kernel
Esses comandos executam as seguintes operações:
- No primeiro comando, usamos ln para criar um link simbólico para o nosso arquivo de módulo no diretório / lib / modules / kernel-release . O comando uname -r , colocado entre aspas , é executado pelo shell e é convertido na string apropriada que representa nossa versão de lançamento do kernel.
- No segundo comando, uma lista de dependências atualizada é gerada pelo depmod -a para garantir que o módulo que estamos instalando tenha conhecimento de todos os módulos e dependências existentes. Essa lista de dependências será usada pelo modprobe ao instalar o módulo no terceiro comando.
- O modprobe instala o módulo do kernel.
Comandos relacionados
insmod – insere um módulo no kernel do Linux.
lsmod – Mostra o status dos módulos do kernel do Linux.
modinfo – Mostra informações sobre um módulo do kernel Linux.
modprobe – Adicione e remova módulos do kernel do Linux.
rmmod – Remova um módulo do kernel do Linux.