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

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

Brincando com o Minix


O Minix é um sistema operacional gratuito, com o código fonte disponível e compatível com a versão 7 do UNIX. Minix foi desenvolvido por Andrew Stuart Tanenbaum (com uma grande contribuição de Bruce Evans), originalmente para compensar a proibição da AT&T contra o estudo de SO baseado no código do UNIX e prover uma ferramenta de ensino para seus alunos. Vale citar que Minix foi escrito do “zero” e apesar de ser compatível com Unix, não contém nenhum código da AT&T e por isso pode ser distribuído livremente.

Este texto tem como objetivo obter informações para a utilização de Minix em um curso de sistemas operacionais. TODOS os processos de compilação, instalação e testes descritos neste relatório foram verificados na prática.

Continue reading

A motivação para criar esse blog!

Olá todos,

Recentemente resolvi comprar um domínio e migrar minha página, que ainda estava hospedada na universidade, para um servidor com mais recursos (por sinal da empresa dos guris – ribas, restinga e cechin – recomendo). Aproveitei para reformulá-la e no meio da brincadeira resolvi criar um blog. 😉

O que vou escrever?

Tem várias coisas interessantes que eu vejo por ai, ou descubro no dia a dia e acabo guardando só para mim. Desde dicas (programação, configuração, depuração do kernel, etc.), artigos, links para ferramentas… até alguns textos que eu mesmo escrevo para organizar as idéias na minha cabeça. 😉 Até agora eu estava mantendo tudo em vários arquivos txt, mas de forma muito desorganizada. Além de não compartilhar o conhecimento, eu acabava perdendo muita coisa no meio da bagunça. Por isso, resolvi organizar esse material em forma de um blog. Mesmo que poucos leiam o blog, eu ainda vou ter minhas coisas bem organizadas e ainda por cima acessível de qualquer lugar.

[]’s

-veiga