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: 40.257 ]

Por: Perfil removido em 18/06/2007


Criação



A criação de módulos é relativamente fácil, mas ela pode se tornar algo difícil, tudo depende da funcionalidade a ser programada. Programada? Isso mesmo. Precisamos saber algo de programação em C, mas somente para codificarmos o objetivo do módulo, pois a estrutura é quase sempre a mesma:
1	#define __KERNEL__
2	#define MODULE
3	#include <linux/module.h>
4	...
5	... código da funcionalidade ...
6	...

As três primeiras linhas fazem parte da estrutura de qualquer módulo e servem para identificá-lo como tal. A linha 5, na verdade, são muitas linhas de codificação em C e representam a funcionalidade que será desenvolvida. Nessa parte usamos muitas funções e instruções específicas para kernel. A linha 3 representa a inclusão de bibliotecas ou 'header files' e sempre dependerá do que está sendo desenvolvido, poderão aparecer muitas bibliotecas, tais como kernel.h, init.h, fs.h, etc.

Exemplo: esse exemplo cria um módulo que exibe a mensagem "Início do módulo" ao ser carregado e a mensagem "Fim do módulo" ao ser descarregado.

Nome do arquivo: modulo.h

1   #define __KERNEL__
2   #define MODULE
3   #include <linux/module.h>
4   /* carga do módulo */
5   int init_module(void) {
6      printk('-> Início do módulo');
7      return 0;
8   }
9   /* descarga do módulo */
10   void cleanup_module (void) {
11      printk('->> Fim do módulo');
12   }

O módulo precisa ser compilado em um código objeto para que ele seja posteriormente incorporado ao kernel. Observe que um módulo não possui a função Main, típica de programas em C, o motivo da ausência é que o kernel já possui uma.

# gcc -c modulo.h

Essa compilação produz o arquivo modulo.o, que já é o modulo propriamente dito. Basta agora carregarmos ele e verificarmos as mensagens com o comando dmesg.

Carregando...

# insmod modulo.o
# dmesg

...
-> Início do módulo ...

Descarregando...

# rmmod modulo
# dmesg

...
->> Fim do módulo

Conclusão

Com auxílio desses comandos, uma boa leitura na documentação de cada módulo e algum conhecimento em linguagem C será possível criar e instalar muitos módulos sem que haja maiores problemas com a compatibilidade.

Página anterior    

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

Cacti + Plugins (Settings, Monitor, Thold e Weathermap) - Instalação e configuração

Distribuições Linux no Samsung Chromebook ARM (XE303C12)

Um tour pelos ripadores de CDs para Linux

Newsbeuter Feed Reader - Instalação e configuração

Introdução a CGI com a RFC 3875

Leitura recomendada

ReactOS: O irmão open-source do Microsoft Windows NT 4.0

Instalação e configuração do Squid com TProxy no Debian

Compilando kernel com suporte a POM (path-omatic) e Layer7 no Debian e Slackware

Máquinas velhas a todo vapor

NetFilter Hook em Kernel 2.6

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts