Gerenciando módulos no Linux

Aprenda como configurar alguns dispositivos (placa de som e rede) em modo texto e como bônus vários comandos importantes nesse gerenciamento.

[ Hits: 127.563 ]

Por: Leonardo Afonso Amorim em 28/10/2008


Comandos para gerenciamento de módulos



Os demais comandos que veremos agora não se aplicam para módulos built-in (afinal de contas eles já foram carregados). Os comandos que veremos agora são para manipulação de módulos. Depois que listamos nossos dispositivos com o comando lspci...

O primeiro comando para manipulação de módulos é o lsmod:

# lsmod
ou
# cat /proc/modules

Esse comando tem a função de listar todos os módulos que estão ativos no sistema, mesmo que o módulo não esteja sendo usado no momento.

O próximo comando essencial nessa parte de módulos é o modprobe:

# modprobe nome_módulo

Ele é o responsável por ativar/levantar um módulo.

É através dele que habilitamos um determinado dispositivo, como por exemplo a placa de rede.

Para ver quais os módulos estão compilados (disponíveis para uso):

# modprobe -l

O parâmetro é "l" de limão, e não é o número um.

Os módulos ficam no seguinte diretório:

# cd /lib/modules/$(uname -r)

Para quem não sabe, posso colocar um comando dentro de $() quando quero que essa variável guarde como valor o resultado do comando.

Se temos mais de um kernel compilado na máquina, logicamente teremos mais de um diretório em /lib/modules.

Você pode descobrir quais módulos tem disponíveis da seguinte forma:

# find /lib/modules/$(uname -r) -name '*.ko'

Uma coisa legal no Linux é que temos várias maneiras de fazer uma coisa só, aí você escolhe a que mais lhe agrada.

Lembrando que você pode ter vários kernels disponíveis, mas só um funcionando ao mesmo tempo, pois isso para termos certeza que estamos entrando no diretório que guarda os módulos do kernel que estou usando no momento, aí eu digito esse comando acima.

O modprobe levanta um módulo com a sua dependência, ou seja, se determinado módulo para ser iniciado precisa que um módulo em específico já esteja no ar, o modprobe faz isso sem lhe perguntar nada! Veja que prático!

Um exemplo prático é a placa de som, que para funcionar, além do módulo da placa em si, precisa do soundcore (módulo de som).

Então, nesse caso o comando modprobe já resolveria essa dependência levantando o módulo da placa e também o soundcore.

Para determinar o número de módulos disponíveis:

# lsmod | grep -v ^"Module" | wc -l

Para determinar o número de módulos carregados:

# modprobe -l | wc -l

No meu caso tenho 1756 módulos disponíveis e 88 módulos carregados na memória.

Agora se eu quero levantar um módulo sem resolver sua dependência, lembrando que nem todos os módulos tem dependências, pois isso depende do seu dispositivo.

Para isso usamos o comando:

# insmod módulo

Se o módulo tiver dependência e você usar o comando insmod ele acusará um erro.

Agora, falando o inverso, se eu quero derrubar um módulo, ou seja, desativá-lo:

# modprobe -r nome_do_módulo

Sem dependência:

# rmmod módulo

Observação: Lembrando que um módulo só pode ser desativado se o mesmo não estiver em uso!

Por exemplo: só posso derrubar o módulo da placa de rede, caso a mesma também esteja derrubada. Ou seja, sem funcionamento!

É válido dizer que quando falo remover estou me referindo a tirar o módulo da memória e não deletá-lo do sistema.

Vamos fazer um exemplo prático:

Determine quais módulos são utilizados pelo dispositivo de cdrom:

# lsmod | grep cdrom
cdrom 32544 1 ide_cd

Essa mensagem significa que o módulo cdrom é usado pelo módulo ide_cd.
32544 é o tamanho do módulo.
1 é quantidade de módulos que usam o módulo listado.

Tente remover o módulo cdrom utilizando o rmmod:

# rmmod cdrom
ERROR: Module cdrom is in use by ide_cd

Não funcionou porque o módulo cdrom está sendo usado pelo ide_cd, e lembrando que só posso tirar um módulo da memória se o mesmo não estiver em uso.

Remova o módulo ide_cd com rmmod já que ele está utilizando o módulo cdrom:

# rmmod ide_cd

O comando não vai retornar nenhuma mensagem, significa que ele tirou o módulo da memória.

Verifique que o módulo ide_cd foi removido mas o cdrom ainda está carregado:

# lsmod | grep ide_cd

Não retornou nada, significa que não está mais na memória.

# lsmod | grep cdrom
cdrom 32544 0 Retornou a linha do módulo cdrom, ele ainda continua na memória.

Já que o módulo cdrom não está mais sendo utilizado podemos removê-lo:

# rmmod cdrom
# lsmod |grep cdrom


Abra a bandeja do cdrom e verifique que o suporte ao CDROM foi carregado novamente:

# eject
# lsmod |grep cdrom


Não foi!

Então, vamos levantar os módulos do cdrom novamente, só que com o comando insmod (para o comando insmod deve ser informado o caminho completo de onde está o módulo). Você pode fazer assim:

# modprobe -l cdrom
/lib/modules/2.6.18-5-686/kernel/drivers/cdrom/cdrom.ko

# insmod /lib/modules/2.6.18-5 686/kernel/drivers/cdrom/cdrom.ko
ou
# insmod $(modprobe -l cdrom)

E depois:

# insmod $(modprobe -l ide_cd)

Verificando se os módulos levantaram:

# lsmod |grep cdrom cdrom 32544 1 ide_cd

Verifique que agora você consegue usar o cdrom:

# eject

Puxe o cdrom:

# eject -t

Vamos tirar os módulos da memória novamente para ver que o modprobe é bem mais prático para usar:

# modprobe -r ide_cd

Tente ejetar o cd agora, você não vai conseguir.

Levante os módulos agora:

# modprobe ide_cd

Veja que ele levantou o cdrom também:

# lsmod | grep cdrom 32544 1 ide_cd

Como o modprobe sabe quais módulos dependem de quais módulos?

# cd /lib/modules/$(uname -r)
# ls -l
# vim modules.dep


Esse arquivo é construído com o comando depmod:

# depmod -a

Esses seriam os principais comandos que usamos nessa parte de módulos!

Página anterior     Próxima página

Páginas do artigo
   1. Reconhecendo o hardware
   2. Definição de módulo
   3. Comandos para gerenciamento de módulos
   4. Exemplo prático: Placa de som
   5. Exemplo prático: Placa de rede
   6. Dicas finais
Outros artigos deste autor

Técnicas de memorização para facilitar o uso VI (Comandos básicos)

Afinal, será que ser hacker, realmente, é o que a mídia divulga?

Introdução ao uso de Shell Script

Configurar uma rede doméstica e compartilhar ADSL no Slackware

O mundo a um clique e um "Eu" fora de nós

Leitura recomendada

64 Bits - A próxima batalha

Dslink 180u no Linux

Som AC97 no Debian GNU/Linux

Token de Certificação para Assinatura Digital OAB - Instalação no Ubuntu 14.04/15.04

Fazendo sua webcam com chipset sn9c10x funcionar no Linux

  
Comentários
[1] Comentário enviado por corbe em 28/10/2008 - 10:01h

Estou tendo dificuldades em subir o modulo usbhid, uso o slackware, baixei o kernel-modules, da mesma versão do meu kernel, descompactei o pacote, copiei o usbhid
do pacote para meu diretorio de driver, e quando dou modprobe usbhid me aparece module invalid format,
o que isso quer dizer?

[2] Comentário enviado por corbe em 28/10/2008 - 10:13h

acho que a pergunta certa é , como instalo um modulo que não existe na minha pasta de modulos. ( /lib/modules/2.6.24.2/kernel/drivers.. )

[3] Comentário enviado por leonardoamorim em 28/10/2008 - 10:20h

Quando não encontrar um módulo no diretório correspondente é necessário recompilar o kernel ativando novos módulos.
Se o módulo for proprietário você deve procurar no site do fabricante verificando se tem versão para Linux. A nvidia por exemplo dispõe em seu site drivers de vídeo para Linux.

[4] Comentário enviado por corbe em 28/10/2008 - 10:31h


E no caso da nvidia, devo baixar o modulo do site e ainda sim recompilar o kernel? ou simplismente copialos ao diretorio de driver do sistema?

[5] Comentário enviado por leonardoamorim em 28/10/2008 - 10:33h

Corbe,

Segue um link de como instalar o módulo nvidia no Debian Etch:
http://leonardoafonso.blogspot.com/2007/08/configurando-placa-nvidia-no-debian.html

[6] Comentário enviado por walber em 28/10/2008 - 23:06h

Leonardo, mandou muito nesse artigo, parabéns.

[7] Comentário enviado por corbe em 29/10/2008 - 10:08h

Olá,
quando tento dar modprobe usbhid aparece a seguinte msg

FATAL: Error inserting usbhid (/lib/modules/2.6.24.5/kernel/drivers/hid/usbhid/usbhid.ko): Invalid module format

algum saberia me dizer o motivo que não consigo carregar esse modulo

[8] Comentário enviado por mafioso em 29/10/2008 - 12:11h

São artigos como este que faz o uso do Linux ser cada vez mais fácil e agradável. Parabéns pelo artigo, kra. Eu já sabia bem estes conceitos de módulo, mas aprendi na marra... Seu artigo há uns anos atrás teria me poupado horas de pesquisa. Valeu.

A única coisa que eu adicionaria, é que para saber qual o módulo necessário para determinada placa, você também pode buscar no google. modinfo em cada módulo pode fazer alguém entrar em parafuso. Mesmo porque algumas placas funcionam com diferentes módulos, então é bom pesquisar para saber qual o melhor. Minha placa de rede wireless por exemplo, trabalha nativamente com o módulo bcm38xx. Porém, descobri que é muito melhor utilizar o módulo ndiswrapper pesquisando rapidamente no Google.

[9] Comentário enviado por rafranco em 29/10/2008 - 19:40h

leonardoamorim, estou há vários dias tentando fazer funcionar uma placa de som Creative CT4810 com chipset Ensoniq ES1371, espetada em um micro rodando Slackware 12.0 e DreamLinux 3.0. Ela até funcionou algumas vezes mas basta desligar o micro e tudo se perde. Segui seus ensinamentos e verifiquei no kernel 2.6.21.5 a existência de dois módulos de som snd-ens1370 e 1371. O comando modprobe levanta os módulos sem problemas. O Slack configura como ES1371, via alsaconf. Em rc.modules, descomentei as linhas correspondentes aos módulos. Passo pelo alsamixer, mas som que é bom, nada. Se puder ajudar, agradeço. P.S.: Na partição vizinha, o DreamLinux configurou tudo sozinho!

[10] Comentário enviado por Caaio Rooberto em 15/04/2009 - 11:10h

Meu amigo, eu estou aprendendo agora a mexer no linux. Pra variar, meu professor me passou um trabalho exatamente sobre modulos e processos correntes no linux.
Eis a duvida...
Aki estao as especificacoes do trabalho pa vc ter uma ideia:


Processo corrente e Procfs

Escrever um módulo que informe as seguintes dados do processo corrente em um
arquivo do /proc:

- PID do processo.
- Áreas de memória usada pelo processo.
- Arquivos abertos pelo processo. (Caso tenha algum arquivo aberto)


Para mais esclarecimento, o professor ainda falou q devemos usar uma estrutura chamada task_struct e q este processo corrente especificado acima eh do tipo task_struct. Logo, para conseguirmos o PID, a area de memoria usada e etc nós temos q usar esta task_struct. A questao eh essa, eu n sei usar isso.

Qlqr ajuda sera bem vinda.
Desde jah agradeco.

[11] Comentário enviado por (xinelo) em 27/08/2009 - 20:54h

como faço para deletar um módulo do sitema?

[12] Comentário enviado por roneibrasil em 05/01/2010 - 20:48h

tenho o ubuntu 9.10 karmic koala 64 bits e não estou conseguindo fazer funcionar o wireless, que é uma placa RTL8101E PCI Express Fast Ethernet controller (rev 02). sabe o que posso fazer? alguma dica? obrigado

[13] Comentário enviado por luizvieira em 06/04/2010 - 19:48h

Muito bom!
[ ]'s

[14] Comentário enviado por galdinocamargo em 20/05/2010 - 00:21h

Gostei também, muito bom!

abraço,
Rodrigo Galdino.

[15] Comentário enviado por tntsys em 25/05/2011 - 20:25h

legal cara vc é professor da 4linux.

[16] Comentário enviado por vbassis em 25/06/2011 - 13:25h

Parabéns!!!!!
excelente artigo.

Abraço,
Vinicius

[17] Comentário enviado por rodrigocontrib em 27/06/2013 - 06:39h

Fala ae,
Criei duas linhas de comando para auxiliar no modinfo, a primeira gera um arquivo teste-2706 a segunda pega este arquivo e da um cat grepando para um parametro qualquer da sua interface.
no meu caso a minha placa de som é : 00:05.0 Audio device: nVidia Corporation MCP61 High Definition Audio (rev a2)

lsmod |grep -i snd |awk '{print " find . -type f -iname " $1 "*" }'|sh + > /home/rodrigo/teste-2706
cat /home/rodrigo/teste-2706 | awk '{print " modinfo " $1}' |sh + |grep -i MCP*

Boa noite a todos, e fiquem com Jesus Cristo!

[18] Comentário enviado por sauloneiva em 09/07/2015 - 11:23h

Olá!!!
Estou tentando usar o modprobe -l, porém esta dando esta mensagem:
modprobe: unrecognized option '--l'.
Estou usando o Debian Weezy.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts