Category: Embedded Systems

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

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

Conversor USB-to-Serial no Mac OS X

Recentemente, eu comprei um cabo conversor USB-to-Serial para acessar equipamentos e placas de desenvolvimento via console no meu MacBook. Já tinha utilizado outras opções, mas essa realmente me chamou a atenção pelo preço e facilidade de utilização. O conversor que eu comprei é este, que está disponível em sites chineses por apenas $4 (um conversor desses na Digimer custa em torno de R$ 50). 😉

A grande maioria desses conversores utilizada um chip da Prolific. Então, o procedimento a seguir deve funcionar para quase todos.

Utilização no Linux

Antes de utilizar no Mac, resolvi testar o conversor no Linux. No Ubuntu, o conversor funcionou automaticamente, sem a necessidade de instalar nada. Basta plugar o cabo na USB e aparece um dispositivo serial do tipo ttyUSBx.

ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2009-11-02 17:06 /dev/ttyUSB0

Utilizei o programa minicom para acessar uma placa de desenvolvimento via serial e tudo funcionou normalmente.

minicom -s

Utilização no Mac OS X

No Mac OS X, foi necessário instalar um driver. A própria Prolific disponibiliza um driver, no entanto existe um driver open source para esse chip que funciona muito bem e ainda disponibiliza alguma documentação. Nem cheguei a testar ao driver do fabricante, fui direto para a segunda opção. Após a instalação do driver, basta plugar o cabo na USB e aparece um dispositivo serial do tipo tty.PL2303-xxx.

ls -l /dev/tty.PL2303-*
crw-rw-rw-  1 root  wheel   11,  18  2 Nov 18:56 /dev/tty.PL2303-0000101D

O emulador de terminal disponível no Mac é o screen. Utilizei esse programa para acessar uma placa de desenvolvimento via serial e tudo funcionou normalmente. É necessário passar o dispositivo e o baudrate como parâmetro para o programa.

screen /dev/tty.PL2303-0000101D 115200

Outra opção é instalar o minicom utilizando o MacPorts.

port instal minicom
minicom -s

Procurei algumas opções gráficas, mas não consegui achar muita coisa livre. A melhor opção encontrada foi o goSerial.

Para mais informações:

Como instalar o ISE 10.1 no Linux (Ubuntu 8.04)

Ano passado postei um tutorial de como instalar e resolver os problemas de utilização da ferramenta iMPACT, que faz parte do ISE Desing Suite da Xilinx, utilizada para programar FPGAs via cabo JTAG. Na ocasião estava usando a versão 9.1i do ISE no Ubuntu 7.10). Recentemente precisei instalar a versão 10.1 do ISE em um Ubuntu 8.04 e percebi que meu tutorial postado anteriormente não cobria mais todos os probleminhas de instalação. Como o outro tutorial foi útil para algumas pessoas, resolvi reescreve-lo adicionado essas novas informações.

Instalação

Colocar o DVD de instalação do ISE e instalar normalmente:

mount /media/cdrom
cd /media/cdrom/ise
./setup

No meu exemplo, escolhi instalar o ISE no diretório que ele sugeriu: /opt/Xilinx/10.1

Os “Cable Drivers” da instalação padrão não funcionam na maioria das distribuições Linux (são específicos para RHEL). Por isso, é necessário instalar um usb-driver alternativo que pode ser obtido em:

A instalação do driver resume-se a:

apt-get install libusb-dev
tar xzf usb-driver-HEAD.tar.gz -C /opt/Xilinx/10.1
cd /opt/Xilinx/10.1/usb-driver
make
ls libusb-driver.so

Teste do Cabo JTAG

1. Testar o dispositivo com o comando lsusb:

lsusb | grep "Xilinx"
Bus 006 Device 017: ID 03fd:0008 Xilinx, Inc.

O campo ID deve conter 03fd:0008. Caso seja diferente desse valor, é sinal que o firmware inicial do dispositivo não foi carregado corretamente (após o carregamento do firmware, o ID do produto é trocado para 0008). Caso o ID esteja correto, pule para o passo 5.

2. Copiar as regras de carregamento e os arquivo de firmware:

cp /opt/Xilinx/10.1/ISE/bin/lin/xusbdfwu.rules /etc/udev/rules.d/xusbdfwu.rules
cp /opt/Xilinx/10.1/ISE/bin/lin/xusb*.hex /usr/share/

3. O programa fxload é utilizado para carregar o firmware inicial, portanto:

apt-get install fxload

4. O programa fxload utiliza o USB File System para acessar os dispositivos USB, então é necessário adicionar a seguinte linha ao /etc/fstab:

none  /proc/bus/usb  usbfs  defaults  0  0

Na primeira vez, montar o usbfs na mão:

mount /proc/bus/usb

5. Para acessar o dispositivo usb como usuário normal, colocar a seguinte linha no arquivo /etc/udev/rules.d/libusb-driver.rules e reiniciar o udev novamente:

ACTION=="add", BUS=="usb", SYSFS{idVendor}=="03fd", MODE="666"

6. Reiniciar o udev e plugar o cabo JTAG novamente:

/etc/init.d/udev restart

Alternativamente, é possivel fazer um teste rápido com:

lsusb | grep Xilinx
Bus 002 Device 004: ID 03fd:0007 Xilinx, Inc.
sudo /sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D  /proc/bus/usb/002/004
lsusb | grep Xilinx
Bus 006 Device 007: ID 03fd:0008 Xilinx, Inc.

Utilização

Para executar a ferramenta iMPATCT, criei um scriptizinho ao qual chamei de impact.sh:

#!/bin/sh

XIL_DIR=/opt/Xilinx/10.1
DRV_DIR=$XIL_DIR/usb-driver

export LD_PRELOAD=$DRV_DIR/libusb-driver.so
$XIL_DIR/ISE/bin/lin/impact

Pronto! O iMPACT será executado corretamente.

./impact.sh

-veiga

Para mais informações:

Como instalar o ISE 9.1i no Linux (Ubuntu)

No trabalho, já tive diversas vezes que utilizar a ferramenta iMPACT do ISE para programar uma FPGA via cabo JTAG. Para não ter que usar uma máquina Windows, resolvi perder um tempinho e fazer funcionar o ISE 9.1i no Linux (mais especificamente no Ubuntu, que é a distro padrão que utilizamos na empresa). A seguir encontra-se uma descrição do processo de instalação e alguns probleminhas enfrentados.

Obs: este tutorial está desatualizado, por favor leia o post Como instalar o ISE 10.1 no Linux (Ubuntu 8.04).

Instalação

Definir o bash como shell padrão (Ubuntu vem com dash):

  # rm /bin/sh
  # ls -s /bin/bash /bin/sh

Montar o cdrom e executar o comando setup:

  # mount /media/cdrom
  # cd /media/cdrom
  # ./setup

Será iniciado o programa de instalação semelhante ao do Windows. Após a instalação, deve-se configurar o PATH para conter os programas instalados.

Problemas encontrados

1. Caso ocorra o seguinte erro: “./setup: /bin/sh: bad interpreter: Permission denied” é necessário editar o /etc/fstab para permitir execução no cdrom/dvd. Exemplo de como deve ficar:

  /dev/hda        /media/cdrom0   udf,iso9660 user,noauto,exec     0       0

Obs: é importante montar o cdrom novamente para garantir a modificação.

2. Caso os “Cable Drivers” não funcionem (e muito provavelmente não vão funcionar porque são específicos para RHEL 3/4), pode-se instalar um usb-driver alternativo como o descrito em:

A instalação do driver resume-se a:

  # apt-get install libusb-dev
  # tar xzf usb-driver-HEAD.tar.gz
  # cd usb-driver
  # make
  # ls libusb-driver.so

Para executar o iMPACT com essa biblioteca:

  export LD_PRELOAD=/path/to/usb-driver/libusb-driver.so
  ./Xilinx9.1i/bin/lin/impact

-veiga