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é!






sábado, 1 de junho de 2013

Tutorial 8 - Realizando um Debug Remoto com o Eclipse para a BeagleBoard-xm via ssh



Neste oitavo tutorial será ensinado a como realizar um debug remoto de qualquer aplicação para BeagleBoard-xm via ssh.

Este Tutorial possui 2 videos que poderão ser visualizados logo abaixo, bem como documentado logo abaixo dos videos.


Debugando Remotamente [Parte 1]



Primeiramente vá em Windows > Open Perspective > Other. Selecione "Remote System Explorer" e clique em OK.


Clique com o botão direito na área do explorer, vá em New > Connection. Selecione Linux como o seu SO e clique em Next. Abra um terminal e digite o comando ifconfig para obter seu IP e o insira no campo de IP da janela no Eclipse no campo "Host Name", escreva uma descrição para sua placa e clique em Next. 


Selecione a caixa "ssh.file" e clique em Next. Process shell escolha "processes.shellLinux" e clique em Next. Escolha "ssh.shells" e clique em Next. Na próxima janela clique em Next.



No explorer, clique no ip da sua placa para expandir e clique em seguida em My Home. Clique em Ok na nova janela e aceite todos os próximos avisos.




Agora basta clicar em "Root" para acessar o diretório remoto.

Debugando Remotamente [Parte 2]



Vá no menu Run > Debug Configuration. Clique duas vezes sobre "C/C++ Remote Application" para abrir a janela de configurações.


Em Browse, vá na pasta home e crie uma nova pasta com o nome do seu projeto e dê Ok. Adicione ao caminho final /*nome do seu projeto*.


Para finalizar digite "sudo" na text box de "Commands to execute before application" e clique em Ok. Pronto, seu eclipse está pronto para debuggar remotamente!






Tutorial 7 - Instalando o GDB server na Beagle Board

GDB server é um programa de computador que faz com que seja possível depurar remotamente outros programas.

Em execução no mesmo sistema que o programa a ser depurado, ele permite que o GNU Debugger se conectar a partir de outro sistema, isto é, somente o programa executável é necessário para ser depurado e precisa ser residente no sistema de destino, enquanto que o código-fonte, que é uma cópia do arquivo binário a ser depurado, reside no computador local do desenvolvedor. 

A conexão pode ser TCP ou uma linha serial.

Abaixo segue as linhas de comando necessárias para se instalar o GDB server na BeagleBoard-xm.

Para executar estes comando, o usuário deverá estar no Shell da BeagleBoard:



# opkg update

# opkg install task-native-sdk

# opkg update

# opkg install gdb

# opkg install gdbserver