segunda-feira, 10 de junho de 2013

Tutorial 9 - compilação Device Driver e Load de modulo no Kernel


Olá Pessoal!

Neste 9 tutorial vamos fazer compilar e adicionar ao kernel linux um modulo de device drivers. Você pode tanto adiciona-lo estaticamente, compilando os fontes e habilitando a opção no menu de configuraçao, quanto adicionado como módulo dinamicamente quando achar necessario. Os passos que faremos são os mesmo para qualquer arquitertura, lembrando sempre que você deve mudar os atributos ARCH e CROSS_COMPILE quando tiver uma arquiterura diferente, falando de ARM, por exemplo, ficaria make ARCH=arm CROSS_COMPILE=arm-none-linux-genueabi- .
Vamos começar!

Usaremos os fontes de um driver fornecido chamado simple_char! Que pode ser baixado nos links abaixo.

Primeiramente use o comando para descomprimir o arquivo

gunzip simple_char.zip

Feito isso temos os arquivos:

ioctl.c – Biblioteca de comandos de controle
Makefile – arquivo de configuraçao da compilação, aqui podemos especificar path de instalção, qual compilador devera ser usado.
simple_char.c – fontes do driver
simple_ioctl.h – configuração de ioctl para o driver
simple_load – shellscript que faz o carregamento do driver no kernel
simple_unload – shellscript que faz o descarregamento do modulo no kernel

Mova o driver para uma pasta de sua preferencia e torne o diretorio corrente.

cd /simple_char
dentro do diretorio chame o comando

make


verificamos o seguinte erro:


Isso se deve que o driver adiciona um no struct do fops um atributo de ioctl utilizado para kernel de versões anteriores a 2.6.36. Para corrigir abra os fonte do simple_char.c

gedit simple_char
na linha 287 comente o sequinte codigo:
Feito isso novamente execute o make

make

verifique a mensagem confirmando execução e que os arquivos .o foram gerados.

obs: aqui compilamos para x86 mas o procedimento é o mesmo para todas a arquiteturas adicionando somente os paramentros ARCH e CROSS_COMPILE ficaria:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

feito isso temos o arquivo compilado e vamos adiciona-lo ao kernel usando o shellscript

sudo sh simple_load

para verificar se o modulo esta “online” utilize 
o lsmod para verificar se ele foi inicializado

lsmodpara remover utilize o script de remoção

sudo sh simple_unload

 agora para remove-lo vamos utilizar o script unload

sudo sh simple_unload


utilizaremos o comando

lsmod | grep simple_char 

para procurar na lista de modulos se o nosso simple_char ainda esta la
 

 
confirmando que ele foi removido com sucesso!!!

Abaixo segue video com maiores detalhes do tutorial




bom pessoal por hoje é isso!
Aprendemos a compilar um modulo de acordo com a arquitetura e adiciona-lo ao kernel dinamicamente.
Bom hackeamento do kernel pra vocês e open source na veia!!!
té!






Nenhum comentário:

Postar um comentário