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:
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.
[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
[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.
[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.