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:
- XILINX JTAG tools on Linux without proprietary kernel modules (http://www.rmdir.de/~michael/xilinx/)
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.
- Introdução
- Diferença entre versões
- Instalação
- Estrutura interna do Minix
- Compilando um kernel
- Comandos básicos do Minix
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 ninguém nunca leia o blog, eu ainda vou ter minhas coisas bem organizadas e ainda por cima acessível de qualquer lugar. Oops, blog? ;-)
Por que um blog?
Quem me conhece sabe que nunca gostei dessas coisas. Até alguns meses atrás achava que isso era coisa de emo ou de guriazinha de colégio, mas agora tenho que admitir que blog é uma ferramenta bem útil. A minha primeira idéia era simplesmente organizar os textos que eu tinha em txt (com um mínimo de formatação), colocar em um diretório e fazer um scriptizinho para ler esses textos e gerar as páginas. Para atualizar, bastaria eu fazer o upload de um texto novo para o servidor e automaticamente ele entraria no ar. Mas depois que comecei a brincar com o tal do cpanel, vi que não adianta inventar moda… existem muitas ferramentas legais e fáceis de usar. No blog, ainda organizo as coisas em categorias, ganho um ferramenta de busca e posso acessar de qualquer browser. Agora vejo que a minha implicância com os blogs era puro preconceito mesmo! ;-)
[]’s
-veiga
Hello world!
Hello world! ;-)
-veiga