Device Drivers em Linux Embarcado – Uma aplicação utilizando a Friendly ARM Mini 2440

Há alguns anos apresentei o tão esperado trabalho de conclusão de curso, onde tive a felicidade de poder escolher o tema que desejava. Eu escolhi na ocasião Device Drivers em Linux Embarcado. O desafio estava lançado. A ideia era conseguir explicar o que são device drivers, porém voltado para um projeto prático colocando todos os detalhes de implementação neste documento.

Bibliografia

Como já não é novidade, a maioria dos materiais que encontramos sobre device drivers é em inglês, bem como a maioria dos livros que abordam especificamente esse tema. Somente alguns artigos na internet e alguns sites e blogs contêm alguma informação útil e válida para um projeto maior. Hoje em dia temos o site Embarcados como uma das grandes referências no assunto no Brasil. O Blog do Software Livre também é referência nesse assunto e Vinicius, um dos responsáveis pelo site, colabora com o Embarcados. Além disso, na época do TCC utilizei diversas informações retiradas principalmente do site do Sergio Prado, grande fonte de informação sobre esse tema já há alguns anos. Como o projeto é uma monografia, devíamos evitar ao máximo sites. No meu caso eu utilizei somente sites referentes às especificações da placa que nós utilizamos e ao webserver.

Teoria

Primeiramente o desafio foi: Como abordar tal tema de uma forma que qualquer leitor entenda? Não é uma tarefa simples. Deveria seguir uma linha lógica de tópicos até chegar onde queria. No caso desse tema, primeiramente, a ideia foi especificar seus métodos de funcionamento, como é a estrutura básica de um device driver, a maneira que ele interage com o sistema (kernel space/user space), dentre outras características importantes para entendermos a parte prática.

Projeto Prático

O projeto prático foi feito da seguinte forma, com a ajuda do meu colega Ramon Chaib. 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:

fig1

Figura 1: Friendly ARM Mini 2440

O que esta porta irá controlar? Motores (carro)! Foi aí que a ideia se concretizou, e a batizamos de PorscheARM. A ideia era o seguinte: Controlar o carro via browser, ou seja, nós teríamos um webserver embarcado nesta placa. Portanto, tinha que ser utilizado um webserver que fosse pequeno e eficiente, o que nos direcionou para o uso do Boa webserver. O sistema que utilizamos foi baseado no Linux 2.6, baixado o último kernel do próprio site da ARM. Para mostrar didaticamente o funcionamento de um device driver criamos um device node para cada direção  direita, esquerda, pra baixo e pra cima. A página web, feita em CGI, enviava os comandos para o device driver que controlava os motores. O fluxo era WEB -> DEVICE -> Motores. Veja abaixo fotos do projeto.

fig2

Figura 2: Carrinho

Utilizando o acelerômetro 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 da tela do iPhone e enviava para o nosso webserver. Com isso, através do device driver instalado no carrinho, era realizada a comunicação com os motores, os quais assumiam suas direções conforme orientação do celular. Note que não observamos nenhum atraso com este teste.

Testes

Os testes do projeto foram feitos e filmados pelo Ramon Chaib, e podemos ver um deles no vídeo abaixo:

Para mais detalhes

Estou disponibilizando aqui o trabalho completo desse projeto, teoria e prática, onde os códigos fontes estão disponíveis no arquivo TCC_DeviceDrivers.pdf ou nos arquivos do github. Acesse o PDF em aqui.

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

Referências 

Blog Software Livre

Profile de Vinicius

Blog do Sergio Prado

Mini2440

Boa Webserver

https://github.com/priscila225/DeviceDrivers

 PDF do TCC

Originalmente publicado em: http://debuggingcode.blogspot.com.br/2011/08/device-drivers-em-linux-embarcado.html

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Linux Embarcado » Device Drivers em Linux Embarcado - Uma aplicação utilizando a Friendly ARM Mini 2440
Comentários:
Notificações
Notificar
guest
5 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Francisco Erivaldo Fernandes Junior
Erivaldo Junior
21/02/2016 19:14

Saudações Priscila,

Vi que você possui uma placa FriendlyARM. Você já tentou instalar uma distribuição Linux custom nessa placa? Possuo uma placa Mini210S e gostaria de instalar um linux com um sistema de compilação mais completo, pretendo compilar o ROS nessa placa.

Willian Henrique
Willian Henrique
26/11/2014 17:51

Bom tarde Priscila, Primeiramente parabéns pelo trabalho, ficou muito legal. Estou estudando um pouco de device driver resolvi dar uma fuçada no seu código para apreender melhor e então me surgiu uma dúvida, no datasheet do processador o endereço dos dados do port G é 0x56000054 (GPFDAT 0x56000054 Port G data) e no seu código você utiliza 0xFB000050 (GPF_BASE 0xFB000050), porque há essa diferença? Vi no seu trabalho que cita que este endereço é virtual (não seria mais o endereço física) onde que esta especificado o endereço virtual? normalmente eu utilizo a função ioremap para tornar o endereço virtual, tem… Leia mais »

Andre Tenorio
( André Tenório )
20/10/2014 07:30

Muito legal mesmo! Uso as mesmas fontes de pesquisa que você Priscila... fazem parte do meu dia a dia!
Abs!

Neuber Jose de Sousa Sousa
neuber jose sousa
12/05/2016 16:54

Onde acho código?

Henrique Rossi
Reply to  neuber jose sousa
12/05/2016 22:54

Olá Neuber,

A Priscila disponibilizou o projeto em https://github.com/priscila225/DeviceDrivers. Precisa de algo mais?

Abraços

Talvez você goste:

Séries

Menu

WEBINAR
 
Sensores e soluções para aplicações em indústria inteligente

Data: 13/08 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link