Gerência e criação de módulos do kernel

Este artigo mostra como gerenciar e criar módulos do kernel. Para criação é necessário algum conhecimento de linguagem C e compilação com o gcc.

[ Hits: 38.858 ]

Por: Perfil removido em 18/06/2007


Aplicação



lsmod

Usado para listar os módulos disponíveis no kernel e também os que estão sendo utilizados. Ele consulta o conteúdo do arquivo /proc/modules e o formata, como no exemplo.

Exemplo: lista os módulos carregados no kernel:

$ lsmod
Module                  Size  Used by    Not tainted
snd-seq-oss            23104   0 (unused)
snd-seq-midi-event      3208   0 [snd-seq-oss]
snd-seq                33552   2 [snd-seq-oss snd-seq-midi-event]
snd-pcm-oss            28928   0 (unused)
snd-mixer-oss          11928   0 [snd-pcm-oss]
printer                 7520   0
keybdev                 1828   0 (unused)
mousedev                4244   1
hid                    21380   0 (unused)
...

insmod

Usado para carregar um módulo para o kernel habilitando-o, ou seja, fazendo as ligações necessárias entre o núcleo e o módulo. Este comando usa o arquivo /etc/modules.conf caso o nome do módulo não for fornecido de maneira completa.

Exemplo: carrega o módulo keybdev:

# insmod keybdev
Using /lib/modules/2.4.33.3/kernel/drivers/input/keybdev.o.gz

Sintaxe: insmod [opções] nome_do_modulo

Opções: entre as opções mais usadas estão:
  • -f (força o carregamento), que pode causar danos ao sistema;
  • -k (após o carregamento, o descarrega se inativo por algum tempo);
  • -L (não permite carregar novamente o mesmo módulo);
  • -p (testa o módulo primeiro, para ver se é possível carregá-lo);
  • -s (manda a saída, seja ela qual for para o syslog /var/log/messages).

rmmod

Descarrega módulos do kernel.

Exemplo: descarrega o módulo keybdev:

# rmmod keybdev

Sintaxe: rmmod [opções] nome_do_modulo

Opções: opções mais usadas:
  • -w (espera que o módulo fique ocioso para descarregá-lo);
  • -a (remove todos os módulos);
  • -s (manda a saída para o syslog).

modinfo

Exibe informações do módulo, tais como autor (-a), tipo de licença (-l), descrição do módulo (-d) e seus parâmetros (-p). Nem sempre o módulo apresentará todas essas informações.

Exemplo: mostra todas as informações referentes ao módulo keybdev:

# modinfo keybdev
filename:    /lib/modules/2.4.33.3/kernel/drivers/input/keybdev.o.gz
description: "Input driver to keyboard driver binding"
author:      "Vojtech Pavlik <[email protected]>"
license:     "GPL"
parm:        jp_kbd_109 int

Sintaxe: modinfo [opções] nome_do_modulo

modprobe

Tanto carrega quanto descarrega módulos do kernel, mas de maneira inteligente, pois resolve as dependências que porventura possam existir. Essas dependências são muito comuns e normalmente são os motivos da falha do carregamento de um pacote específico. O modprobe resolve bem essa questão e é justamente por isso que é preferível usá-lo ao invés do insmod ou rmmod.

Exemplo: carrega o módulo ide-scsi detalhadamente (não é comum exibir mensagem):

# modprobe -v ide-scsi
/sbin/insmod /lib/modules/2.4.33.3/kernel/drivers/scsi/ide-scsi.o.gz
Using /lib/modules/2.4.33.3/kernel/drivers/scsi/ide-scsi.o.gz
Symbol version prefix '' Descarrega o módulo ide-scsi detalhadamente (-v):

# modprobe -rv ide-scsi
delete ide-scsi

Sintaxe: modprobe [opções] nome_do_modulo

Opções: opções mais usadas:
  • -C arquivo_configuração (fornece um arquivo que configura o comportamento do comando);
  • -c (mostra as configurações atuais do comando),
  • -n (realiza os procedimentos de carregamento do módulo, mas o carrega de fato);
  • -r (remove o módulo);
  • -s (envia a saída para o syslog);
  • -f (força a instalação de um módulo);
  • -l (lista os módulos, usando ou não chave de busca);
  • -a (carrega todos os módulos indicados pela chave de busca informada);
  • -t (tenta carregar os módulos de um determinado diretório);
  • -v (verbose - detalhado).

depmod

Gera a lista de dependências para um determinado módulo, pois alguns módulos dependem de outros. Essa lista localiza-se em /lib/modules/versão-do-kernel/modules.dep.

Exemplo: gera a lista de dependências de todos os módulos:

# depmod -a

Obs.: esse arquivo gerado será usado posteriormente pelo comando modprobe pra resolver as futuras possíveis dependências.

Sintaxe: depmod [opções]

Opção:
  • -a (todos os módulos);
  • -n (apenas mostra as dependências na tela);
  • -b diretório (indica um diretório diferente do /lib/modules/versão_do_kernel).

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Aplicação
   3. Criação
Outros artigos deste autor

IDS com Debian 4, Snort 2.8.3.1 e BASE 1.4.1

Instalando o maravilhoso Arch Linux

Qmail + Patches + Performance Tuning, the Debian AMD64 way

Acessando partições NTFS no Linux

Multiterminais e Userful Multiplier nas escolas públicas: Uma solução barata que sai caro

Leitura recomendada

Slamd64: O Slackware para 64 bits

OpeniBoot - Seu iPhone com Linux!

Debian 3.1 (Sarge) - Atualizando pacotes para unstable e compilando um novo kernel

Debian Linux: Atualizando o kernel 2.6.24 para 2.6.26.3 (versão estável)

Kernel 2.6: a instalação mais fácil

  
Comentários
[1] Comentário enviado por mbsalgueiro em 18/06/2007 - 09:41h

Cara mto legal seu artigo so q falto informar onde vc tirou essas informacoes e onde podemos aprender mais sobre como programar p o kernel e seus modules... posta ae depois p nois n seja ruim vai!!! =D
abracao

[2] Comentário enviado por removido em 18/06/2007 - 17:16h

Realmente faltaram as fontes:

MORAES, Gleicon da Silveira, Programação Avançada em Linux. Novatec. 2005

BOVET, Daniel P.; CESATI, Marco. Understanding the linux kernel. O'Reilly. 2000

São muito bons livros, o do Gleicon (ISBN: 85-7522-076-4) é didático, mas superficial, agora para aprofundar o segundo é melhor (ISBN: 0-596-00002-2).

[3] Comentário enviado por sclinux em 18/06/2007 - 21:19h

Parabéns pelo artigo que certamente estimulará muitos iniciantes a aprofundarem seus conhecimentos sobre o kernel linux. Penso que quanto mais qualificados estiverem os profissionais que lidam com GNU/Linux melhor será o mercado de trabalho neste segmento.

[4] Comentário enviado por grabber em 19/06/2007 - 01:24h

Artigo bastante interessante e incentivador a todos os usuários intermediários de GNU/Linux. Desenvolvo módulos para kernel faz algum tempo e no início do artigo senti um pouco de inconsistência nos conceitos abordados. Mas está de parabéns essa é uma fonte incentivadora de novos talentos! Para quem quiser se aprofundar mais no kernel recomendo a leitura do livro da NOVELL, é extremamente abrangente! Atenciosamente, Grabber.

[5] Comentário enviado por removido em 19/06/2007 - 09:53h

Obrigado colegas chalhoub e grabber, o que faço aqui é simplesmente para contribuir, pois me identifico muito com a ideologia SL.
Desculpem as falhas ou as 'inconsistências', mas meu objetivo é divulgar e, como o grabber disse, incentivar.
Vocês que já publicaram artigos, sintam-se convidados a fazer o mesmo e fazer jus ao status de membro VOL.

[6] Comentário enviado por V3rM3 em 20/06/2007 - 10:56h

Parabéns mesmo.... esse artigo me deu Um NORTE =D

[7] Comentário enviado por cwars em 27/07/2007 - 13:08h

Com essa idéia de criar modulos, posso fazer com que isso crie uma extensão de novos tipos de arquivos diretamente no kernel, no caso java, de forma que os aplicativos possam ser executados de forma mais "nativa" e mais rapida, do mesmo jetio que foi feito o java no Mac OS X e o .Net no Windows Vista?

[8] Comentário enviado por removido em 31/07/2007 - 21:05h

cwars, não tenho certeza, mas se o kernel propiciar essa funcionalidade e você souber codifiá-la, é bem provável que você consiga criar esse módulo.
Não se esqueça que ele tem que ser carregado (insmod ou modprobe), se quiser que ele faça parte do kernel, é preciso adicionar essa função e compilar o fonte do kernel.

[9] Comentário enviado por cwars em 02/08/2007 - 07:27h

Então se essa possibilidade for possível... vou começar a fazer alguns testes, já que se isso funcionar talvés melhore o desempenho dessas máquinas virtuais.

[10] Comentário enviado por dekaysan em 19/07/2012 - 12:24h

olá eu tenho um tablet android, ele tem algo em comum com linux....
pois é o usb dele e o wifi tão dando problema...
e vi no kernel dele uns modulos .ko eu queria saber se tem como eu criar uns modules pra colocar no kernel dele.
pra resolver problema de wifi e usb.


Contribuir com comentário