quarta-feira, 17 de agosto de 2011

Device Drivers em Linux Embarcado

Recentemente apresentei na faculdade meu ultimo projeto ( trabalho de conclusão de curso) , onde tive a felicidade de poder escolher o tema desejado, eu escolhi : Device Drivers em Linux Embarcado. O desafio estava lançado. A ideia era conseguir explicar o que são device drivers porem voltado para um projeto prático colocando todos os detalhes de implementação.

Parte 1 - Bibliografia
Como já não é novidade , bons materiais sobre device drivers são em inglês, a maioria dos livros que abordam bem especificado este tema . Somente alguns artigos na internet e alguns blogs contém alguma informação util valida para um projeto maior, recomendo o  blog do Sergio Prado .  Como o projeto é uma monografia devemos evitar ao máximo sites, no meu  caso eu utilizei somente sites referente as especificacoes da placa que nós utilizamos e o webserver.

Parte 2 - Teoria
Primeiramente o desafio foi : Como abordar um tema destes de uma forma que qualquer leitor entenda? Não é uma tarefa simples, devemos seguir uma linha lógica de tópicos até chegarmos aonde queremos. No caso deste tema primeiramente, a ideia foi especificar seus métodos de funcionamento, como é a estrutura basica de um device driver , a maneira que ele interage com o sistema ( kernel space / user space) , dentre outras caracteristicas importantes para entendermos a parte prática.

Parte 3- Projeto Prático
O projeto prático foi feito da seguinte forma, com a ajuda do meu colega Ramon, nós escolhemos o kit Friendly ARM Mini 2440 onde decidimos fazer um device driver para a porta GPIO. Como podemos ver na figura abaixo:



O que esta porta irá controlar? Motores ( carro ) . Foi ai que a ideia se concretizou, batizamos de PorscheARM. A ideia era o seguinte : Controlar o carro via browser , ou seja, nós teriamos um webserver embarcado nesta placa, então nós utilizamos um webserver que é pequeno e eficiente para isto o Boa webserver . O sistema que utilizamos foi o Linux 2.6 baixado o ultimo kernel do proprio site da ARM. Para mostrar didaticamente o funcionamento de um device driver criamos um nó device para cada direção : direita, esquerda, pra baixo , pra cima . A pagina web (feita em CGI) mandava os comandos para o device driver que controlava os motores. (WEB) -> DEVICE -> Motores . Abaixo fotos do projeto











 Parte 3 - Utilizando o acelerometro do iphone como controle
Com o intuito de aprimorar mais o sistema foi feito um código em javascript que capturava a posição X,Y,Z do iphone e mandava pro nosso webserver e com isso atraves do device driver comunicava com os motores indo pra direção conforme orientava o celular. Note que não observamos nenhum atraso com este teste.


Parte 4 - Testes
Os testes do projeto foram feitos e filmados pelo Ramon , podemos ver os videos abaixo:

E testado no ginásio da faculdade




Quer ver mais detalhado?
Estou disponibilizando neste link o trabalho completo deste projeto, teórico e prático, onde os códigos fontes estão no anexo deste pdf compartilhado ou no github, segue o link do PDF :  TCC_Device Drivers em Linux Embarcado 

Espero ter ajudado alguém com este post . É uma área que tenho muito interesse e estou sempre disposta a compartilhar conhecimento sobre isto e espero que vocês compartilhem também. =)

 

 



8 comentários:

  1. muito boa a iniciativa principalmente que documentação para isso é bem difícil infelizmente, mas ficou algumas duvidas já que o 4shared é bloqueado onde estou. qual SO baseado em Linux 2.6 ? outra coisa versão deste kernel 2.6.xx pois faz toda diferença cada um dos mesmos para aprender com o source. qual servidor de web esta utilizando BOA?

    ResponderExcluir
  2. O kernel do friendlyARM utilizado foi Linux 2.6.32.2 que pode ser baixado neste link: http://www.friendlyarm.net/dl.php?file=linux-2.6.32.2-mini2440_20110305.tgz . O servidor web era no localhost mesmo. :) .Para compilar os arquivos para placa (device drivers) foi feito através do ARM-GCC no Ubuntu.

    ResponderExcluir
  3. Parabéns pelo projeto Priscila!

    Qual foi a principal dificuldade que encontrou?

    Abraços,

    Sergio Prado

    ResponderExcluir
  4. Obrigada! A principal dificuldade que eu achei foi mesmo na parte de fundamentação teórica por causa de não achar muitos materiais sobre isso porém filtrei o que queria das bibliografias. Já a parte prática foi mais rapida do que eu pensava que ia ser.

    ResponderExcluir
  5. W++: copiei o TCC dela para uma area na sourceforge, que provavelmente nao eh bloqueada:

    http://framework.sourceforge.net/pics/TCC_DeviceDrivers.pdf

    ResponderExcluir
  6. Priscila, parabéns pela trabalho.

    Dei uma lida em seu TCC, porém fiquei com uma dúvida: Foi necessário compilar o kernel novamente? Pelo jeito sim né?
    Você acabou não mencionando isso na monografia.

    Abraços,

    Rafae

    ResponderExcluir
    Respostas
    1. Foi necessário sim! Obrigado pela dica, irei acrescentar os detalhes a respeito do kernel.

      Excluir