Archive for the ‘Embedded’ Category.

Muita tecnologia para uma pessoa só

A culpa para eu não ter postado mais é uma só: é muita tecnologia para uma pessoa só!
Nessa vida de acadêmico, profissional e hobbista estou tendo que lidar com coisas tanto em baixíssimo quanto altíssimo nível;
A começar pela vida acadêmica, este trimestre a cadeira é de sistemas distribuídos, o contexto é:

  • comunicação com utilização de mensagens;
  • protocolos e semânticas;
  • tratamentos de erros, correções, tolerância a falhas;
  • tempo distribuído, ordens causais, exclusão mútua distribuída;

A linguagem de programação definida pelo professor (define:professor – Alguém que não é legal você contrariar) é JAVA. Sabe já fui xiita quanto a isto, mas para algumas coisas o Java realmente é uma mão na roda, por exemplo, faziam 4 anos desde a última vez que eu fiz um programa com janelinhas, e com Java consegui fazer um programa demo em menos de meia hora.

Outro ponto é: Objetos remotos. O Trabalho deste trimestre é fazer uma implementação utilizando Corba, e com Java isto é legal :) é muito simples compartilhar um objeto remoto utilizando Java, e eu sinceramente não sei porque este protocolo junto com o RMI (que é mais fácil ainda) não são utilizados em larga escala.

Saindo um pouco da vida acadêmica, caio na minha vida profissional, ai entramos em um outro extremo. Ai o contexto é outro:

  • kernel Linux, uCLibc, arm-linux-*
  • ARM, Atmel, TI
  • C e asm
  • NandFlash, Dataflash, EEPROM
  • 32MB, 4KB, 99Mhz…

E esta é a minha praia, eu sinceramente, sem brincadeira, fico feliz com os problemas que me aparecem lá, os últimos que me vem a cabeça…

  • fazer o suporte da INFERNO PACK para o u-boot mainline;
  • um patch com os drivers do INFERNO PACK para o kernel mainline e resolver os pepinos da integração deste com o PREMPT_RT;
  • resolver um problema da implementação de mutex na linuxthreads da uCLibc;
  • por o 2.6.33.5-rt + buildroot-2010.05 + um monte de aplicação em 3.5MB de dataflash;
  • provar para o pessoal do outro lado do barramento que a latência não é no Linux (eu adoro este);

Mas ultimamente um problema legal que tenho trabalhado é o fato do processador Atmel at91sam9g20 não conseguir ler a uma NAND Samsung de 512 mbit, faz mais de um mês que estou discutindo com a Atmel que o problema é a ROMBOOT do processador. O legal disto é que estou tendo bastante contato com o drivers/mtd/ e o código do bootstrap do processador.

Por fim, o lado hobbista… aaa, este é uma coisa só: kernel Linux/Tempo real. Pra quem não sabe, minha proposta de palestra para a LinuxCon foi aceita, em breve publicarei aqui o resumo dela e os slides. Mas bom, voltando ao assunto, ultimamente tenho lido bastante sobre tempo real, tanto teoricamente com o livro Real Time Systems quanto implementações no kernel Linux, como a implementação do HRT, DynTick, a proposta do escalonador EDF, alguns artigos sobre controle de admissão de processos de tempo real.

Enfim, como pode-se ver, meu tempo ultimamente tem passado desde registradores à objetos distribuídos… porém, pelo meu lado hobbista… tudo se resume na frase do Linus…

And yeah, I still think the hard-RT people are mostly crazy. — Linus;

Formato de compressão do kernel

Semana passada vi um artigo que falava sobre o formato de compactação do kernel disponível no kernel.org, isto porque com o relativamente novo LZMA pode-se obter uma considerável melhora na compressão do Kernel, em uma comparação dos formatos de compactação, o Kernel 3.6.32 obteve os seguintes tamanhos compactados:
GZ: 79MB
BZ2: 62MB
LZMA: 53MB

Claro que nem tudo é baunilha (estou no shopping e na minha frente tem um monte de televisores a venda, passando uma receita de como fazer um sorvete de baunilha, acho que isto eh uma mensagem subliminar da sorveteria)…

Devido a relativa pequena idade do LZMA, muitas distribuições mais antigas mas ainda utilizadas como o RHEL3 ainda não possuem ferramentas capazes de comprimir/descomprimir arquivos xz (extensão dos arquivos compactados com LZMA)… Para os embarcados: o Busybox já possui a um bom tempo o suporte a descompressão LZMA.

Novo BusyBox

Foi lançado uma nova versão do BusyBox (unstable): BusyBox 1.16.0. Esta nova versão trás um conjunto de novas ferramentas bastante interessantes como:

  • lspci
  • lsusb
  • flashcp
  • mkfs.reiser
  • mkfs_ext2
  • ntpd
  • traceroute6
  • tune2fs
  • wall

Por exemplo, com isto duas das aplicações que compilava externamente caíram fora dos meus embarcados: usbutils (que provia o lsusb) e o ntpd… Boa notícia (-: