Category: Embedded Linux

Oficina Prática sobre Linux Embarcado na ERRC 2010

Esse ano a Escola Regional de Redes de Computadores (ERRC 2010) ocorrerá em Alegrete-RS, nos dias 4, 5 e 6 de outubro de 2010. Organizado pela Universidade Federal do Pampa (UNIPAMPA), pela Universidade Federal de Santa Maria (UFSM) e pelo Instituto Federal Farroupilha (IFFarroupilha), o evento – que tem como objetivo apresentar e discutir as novas tecnologias na área de Redes de Computadores, reunirá professores, estudantes, pesquisadores e profissionais da área interessados em compartilhar idéias e conhecimentos, de modo a buscar novas soluções para todos.

Nesta edição, apresentarei uma oficina prática em desenvolvimento de Linux Embarcado, juntamente com meu colega Carlos Moratelli. A oficina terá duração de 4 horas e terá um formato de curso que abordará a construção de um sistema de Linux Embarcado a partir do zero. O foco do curso será em sistemas gerenciáveis via rede. Desta forma, abordaremos questões como suporte à rede e protocolos de gerenciamento.

Segue os dados da palestra:

Título: Construção de Linux Embarcado com Suporte a Gerenciamento
Palestrantes: Carlos Moratelli e Marcelo Veiga Neves
Data: 05/10/2010, a partir das 14h (durante a ERRC 2010)

Palestra sobre Linux em Sistemas Embarcados na UNIPAMPA

No dia 25 de junho de 2010, participei como palestrante da Semana Acadêmica do Centro de Tecnologia de Alegrete – SACTA 2010 – da Universidade Federal do Pampa – UNIPAMPA –  em Alegrete, RS. A minha palestra foi sobre Linux em Sistemas Embarcados e contou com uma seção de demonstração utilizando um dos equipamentos de rede da Digitel. A Digitel me emprestou um roteador 3G da linha Digitel NetRouter NRX 5100, que roda um Linux Embarcado.


Digitel NRX 5100 Digitel NRX 5100

Disponibilizei os slides da apresentação no SlideShare, segue os dados a seguir.

Título da Palestra: Linux em Sistemas Embarcados

Resumo:

Esta palestra tem como tema o desenvolvimento de Linux para sistemas embarcados. Primeiramente, será apresentada uma visão geral da área. Na sequência, serão abordados os problemas típicos envolvendo o porte do Linux para novas plataformas, a preparação de toolchains para cross-compilação, bootloaders, escolha de sistemas de arquivos, preparação do kernel para trabalhar com os barramentos e dispositivos típicos em sistemas embarcados, depuração do hardware embarcado, entre outros. A palestra terá também uma seção de demonstração utilizando uma placa baseada em PowerPC.

Slides no SlideShare:

Slides para download: http://marceloneves.org/docs/veiga-elinux-unipampa2010.pdf

Palestras do Tchelinux Disponibilizadas no SlideShare e Vimeo

Recentemente, o Jerônimo Madruga fez um trabalho bem legal disponibilizando os slides das palestras do grupo Tchelinux no SlideShare. Na mesma linha, no ano passado o Douglas Landgraf disponibilizou alguns vídeos de palestras do grupo no Vimeo.

Segue a minha palestra realizada no final do ano passado que agora está disponível no SlideShare do Tchelinux.

Seguem algumas sugestões de palestras disponíveis no Vimeo do Tchelinux:

Slides da palestra Desenvolvendo Sistemas de Linux Embarcado no Tchelinux 2009

No final do ano passado, participei do Tchelinux 2009 em Porto Alegre e apresentei a palestra “Desenvolvendo Sistemas de Linux Embarcado”. Agora estou disponibilizando os slides para download.

Segue os dados da palestra como foram divulgados no evento:

Título: Desenvolvendo Sistemas de Linux Embarcado

Currículo:
Marcelo Veiga Neves é formado em Ciência da Computação pela UFSM e mestre pela UFRGS. Atualmente, trabalha na empresa Digitel projetando e desenvolvendo software para sistemas embarcados (por exemplo, adaptando o kernel do Linux para novas plataformas baseadas em PowerPC, escrevendo drivers de dispositivos, protocolos de rede e programas diversos para sistemas embarcados, etc.).

Resumo da Palestra:
Esta palestra abordará os itens necessários para construir um sistema de Linux embarcado. Serão abordados os problemas típicos envolvendo Linux em sistemas embarcados, a preparação de toolchains para cross-compilação, bootloaders, escolha de sistemas de arquivos, preparação do kernel para trabalhar com os barramentos e dispositivos típicos em sistemas embarcados, depuração do hardware embarcado, entre outros. A palestra terá também uma seção de demonstração utilizando uma placa de desenvolvimento baseada em PowerPC.

Slides para download: http://www.marceloneves.org/docs/veiga-elinux-tchelinux2009.pdf

-veiga

Assert() é só para debug!

Tenho visto, no meu dia-a-dia, vários programas cheios de assert() no meio do código. Acho legal utilizar a macro assert() para depurar o código, o problema quando o uso desta começa ficar banal e a fazer parte da lógica do programa. Já vi utilizarem assert() para fazer programação defensiva, por exemplo. O assert() é uma ferramenta de depuração e deve ser usado somente durante o desenvolvimento e eliminado após essa fase.

Em sistemas embarcado, onde o tamanho da memória RAM e da Flash são limitados, eliminar os assert()’s pode fazer toda a diferença. A seguir tem um programinha de exemplo que utiliza um assert().

#include <stdio.h>
#include <assert.h>
int main()
{
        int *p = NULL;
        ...
        assert(p != NULL);
        ...
        return 0;
}

Compilando o programa acima com e sem o assert() é possível notar a diferença de tamanho.

[veiga@gandalf]$size test test.assert
text    data     bss     dec     hex filename
796     264       4    1064     428 test
906     268       4    1178     49a test.assert

Essa diferença é para apenas 1 assert(), aumentando o numero para 10, pose-se notar o quão problematico isso pode se tornar.

 [veiga@gandalf]$size test test.assert
   text    data     bss     dec     hex filename
    780     264       4    1048     418 test
   1274     268       4    1546     60a test.assert

O uso do comando strip em programas que contém o assert() não faz muita diferença já que cada macro é substituída por uma string do tipo:

"assertion \"%s\" failed: file \"%s\", line %d\n", \
                               "expression", __FILE__, __LINE__);

Uma maneira de eliminar todos os assert()’s em tempo de compilação é utilizar a opção -DNDEBUG (que elimina as macros de depuração). Por isso, é importante não utilizar o assert() para implementar funcionalidades do programa.

 [veiga@gandalf]$gcc -o test test.c -Wall -DNDEBUG

-veiga

Para mais informações sobre o assert(): http://www.hmug.org/man/3/assert.php