Mini2440 – Emulando Atari com Linux embarcado

- por Sergio Prado

Categorias: Linux, Mini2440 Tags: ,

Nesta nossa área cheia de novidades e desafios constantes, fica difícil acompanhar tudo o que acontece sem realmente gostar e se divertir com o trabalho. Sempre que eu preciso encarar um novo desafio (seja pessoal ou profissional), é aí que busco minhas forças. Paixão pelo trabalho é fundamental para manter a disciplina e buscar aquela energia extra que realmente faz a diferença.

E seguindo esta filosofia de “aprendizado com diversão”, pensei no que ainda poderia explorar no kit FriendlyARM mini2440, que não tivesse sido feito, e que fosse desafiador, estimulante e divertido.

Tive então a idéia de emular o Atari 2600. Sim, aquele console antigo, mas que (pelo menos para mim) traz boas lembranças dos tempos de infância. Minha idéia foi transformar a mini2440 em um console Atari 2600, usando um display LCD de 3.5″ como saída de vídeo, um joystick USB como controle e um cartão SD para ler as ROMs (jogos).


Escolhi usar o Stella (http://stella.sourceforge.net/), um emulador de Atari multi-plataforma e liberado sob a licença GPL. Meu primeiro passo foi dar uma olhada nos pré-requisitos do projeto, que basicamente são estes:

  • Requisitos de Hardware
    • 32M de RAM: OK, o kit tem 64M.
    • Display gráfico de 16 bits: o display é de 3.5″ e suporta modo gráfico de 16 bits.
    • Entrada para joystick: temos a porta USB.
    • Arquitetura i386, MIPS, PPC: Ops, nada de ARM? Será que funciona?
  • Requisitos de software:
    • Linux 2.6: OK!
    • GNU C++ 4.x: precisaremos habilitar a toolchain C++ no Buildroot.
    • SDL V1.2.10 ou maior: precisaremos habilitar o SDL no Buildroot.

Não me parecia nada de outro mundo. Escolhi o Buildroot como sistema de build para gerar minha imagem final. Bastaria seguir este meu artigo, configurar e adicionar o pacote do Stella, e habilitar algumas opções adicionais, como toolchain C++ e a biblioteca SDL.

NEM TUDO SÃO ROSAS

Pois é, nem tudo são rosas. O que achei que levaria uma tarde me tomou muito mais tempo. Nada funcionou de primeira. Quer uma lista de alguns desafios que encontrei?

1. O vídeo não renderizava em modo paisagem. O driver de framebuffer do display LCD suportava apenas 240×320, enquanto que o Stella roda apenas com resoluções a partir de 320×240. Depois de dias debugando e estudando o driver do display, a biblioteca SDL e a aplicação Stella, encontrei uma solução bem simples: setar uma variável de ambiente usada pela biblioteca SDL para rotacionar o display! Sim, foram dias de análise para resolver o problema com uma linha de código em shell script! Mas no fim, adquiri bastante conhecimento na camada de vídeo do Linux.

$ export SDL_VIDEO_FBCON_ROTATION=CW

2. Com a correção da renderização do vídeo, causei um problema com o touchscreen. Como eu rotacionei o display, os valores lidos pelo touch ficaram deslocados. Precisei escrever um patch que fizesse esse hack na biblioteca SDL.

--- sdl-1.2.14-orig/src/video/fbcon/SDL_fbevents.c  2009-10-12 20:07:15.000000000 -0300
+++ sdl-1.2.14/src/video/fbcon/SDL_fbevents.c   2011-04-23 16:20:31.623212774 -0300
@@ -741,11 +741,14 @@
 static void handle_tslib(_THIS)
 {
    struct ts_sample sample;
-   int button;
+   int button, aux;
 
    while (ts_read(ts_dev, &sample, 1) > 0) {
        button = (sample.pressure > 0) ? 1 : 0;
        button <<= 2;   /* must report it as button 3 */
+       aux = 240 - sample.x;
+       sample.x = sample.y;
+       sample.y = aux;
        FB_vgamousecallback(button, 0, sample.x, sample.y);
    }
    return;

3. Também tive problemas com o som, que não funcionava com o driver padrão em modo OSS. Resolvi o problema habilitando o biblioteca ALSA no Buildroot, e criando alguns links simbólicos para os arquivos de dispositivo do driver de som.

Package Selection for the target
    Audio and video libraries and applications
        [*] alsa-lib
$ mkdir -p /dev/snd/
$ ln -s /dev/pcmC0D0c  /dev/snd/pcmC0D0c
$ ln -s /dev/pcmC0D0p  /dev/snd/pcmC0D0p
$ ln -s /dev/controlC0 /dev/snd/controlC0
$ ln -s /dev/timer     /dev/snd/timer
$ chmod 0660 /dev/pcmC0D0c
$ chmod 0660 /dev/pcmC0D0p
$ chmod 0660 /dev/controlC0
$ chmod 0660 /dev/timer

Para testar o som com a biblioteca ALSA:

$ aplay /usr/share/sounds/alsa/Front_Center.wav

4. O joystick funcionou de primeira, mas estranhamente causava erro de segmentação de memória na aplicação Stella ao tentar usar o direcional. Então descobri que precisava habilitar a interface de joystick no kernel.

Device Drivers
    Input device support
        [*] Joystick interface
        [*] Joysticks/Gamepads
            [*] Classic PC analog joysticks and gamepads

5. Além disso, enfrentei alguns pequenos desafios como colocar o pacote Stella no Buildroot (desenvolvi um patch para corrigir um erro de cross-compilação). Também precisei habilitar e configurar o hotplug no kernel o mdev no Buildroot para identificar e montar automaticamente o cartão SD no boot.

Realmente foi um projeto que deu trabalho, mas é o tipo de experiência que vale a pena, pois é um aprendizado não se consegue apenas lendo livros ou artigos na internet.

No final, criei um script para facilitar todo o processo para quem também quiser “brincar”. Disponibilizei este script, junto com todos os arquivos necessários para compilar e gerar a imagem, em um projeto no github, que pode ser acessado aqui.

GERANDO A IMAGEM

Para gerar a imagem, execute os comandos abaixo:

$ git clone git://github.com/sergioprado/Mini2440-Atari-System.git
$ cd Mini2440-Atari-System
$ ./prepare.sh
$ cd buildroot-2011.02/
$ make

O processo de compilação deve levar de 1 a 2 horas, dependendo da sua máquina. Após compilar, você terá disponível em output/images as imagens do kernel e do rootfs disponíveis:

$ ls output/images/
rootfs.ext2  rootfs.jffs2  rootfs.tar  uImage

Para gravar o kernel e o rootfs, você pode se basear neste artigo aqui. Mude apenas a configuração da variável “bootargs” do U-Boot, conforme abaixo:

MINI2440 # setenv bootargs 'root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200 mini2440=3tb'
MINI2440 # saveenv

TESTANDO

No primeiro boot, você precisará configurar a interface touchscreen, pressionando a caneta nos pontos indicados pela ferramenta de configuração. Após configurar o touchscreen, a aplicação Stella já inicia automaticamente, e você poderá configurar seu joystick em “Options->Input Settings” se quiser.

Depois, escolha um jogo e divirta-se! Estes são os meus favoritos:


Obs: Não quero entrar aqui nos méritos legais de usar um emulador com ROMs. Apenas para constar, você precisa ter o jogo para poder baixar a ROM e usá-la em um emulador.

Gravei também um vídeo onde podemos ver o boot da mini2440 e alguns jogos em ação. Só não reclamem das habilidades do jogador! Coloquei minha esposa para jogar enquanto gravava. O problema foi tirar o controle dela depois… :)


E para concluir, o que podemos tirar de aprendizado neste projeto?

Primeiramente, se você quer aprender, precisa colocar a mão na massa! Só assim para transformar seu conhecimento em habilidades. Com um pouco de criatividade, disciplina e persistência, você consegue aprender coisas que talvez não aprenderia em um emprego formal.

Em segundo lugar, perceba a importância do código livre para este projeto. Tudo o que fiz foi usando software e ferramentas de código aberto. Ter em mãos o código do kernel do Linux e das bibliotecas foi essencial para solucionar alguns dos problemas que encontrei no meio do caminho. Escrevendo este artigo, disponibilizando o projeto e motivando as pessoas a fazerem o mesmo, espero estar contribuindo de volta com a comunidade.

Um abraço!

Sergio Prado

  • Nice project, thanks for sharing your experience with the world. I learned some stuff here!

  • Marcelo

      Parabéns Sérgio!!! Legal o post e muito motivador!

  • Lucas Zampar

    Como sempre, surpreendendo a todos!
    Sérgio, me mande por email um contato seu. Precisamos conversar.
     
     
    Um grande abraço,
     
     
    Lucas Zampar

  • Juliano Alves de Oliveira

    Parabéns Sergio,
    Mais uma vez me surpreendeu,isso me da força pra continuar a ir atrás daquele erro que tempos atrás eu vinha tentando resolver com sua ajuda, um dia eu consigo.

    • É isso aí Juliano, não desiste! Nenhum problema é “insolucionável” até que encontremos o próximo! :)

      Um abraço.

  • Roberto Silveira

    Grande Sérgio
    Mto massa o projeto cara, parabéns!.
    Tenho acompanhado o teu blog aqui, tá muito legal. 
    Grande abraço
    Roberto

  • Roberto Silveira

    Apenas para compartilhar com a galera dos sistemas embaracados, a Atmel lançou um série chamada AVR Xplained. Particularmente usei alguns micros da família AVR+AVR Dragon+AVR Studio e gostei bastante. A noticia boa é que cada placa custa a bagatela de USD 29, e ainda por cima dá pra encontrar uns micros de 32 bits pra brincar…
    http://www.atmel.com/products/AVR/xplain.asp?category_id=163&family_id=607&icn=hmap2-Xplained-Series&ici=may_2011
    Abraço
    Roberto

  • Júlio Hoffimann

    Parabéns Sérgio!
    Novamente estou impressionado com a qualidade dos seus artigos.
    Abraço!

  • Marcelo

    Sérgio,
     
    Parabéns pelo artigo, e saiba que comigo você conseguiu seu objetivo – vou pôs a mão na massa pra trnasformar minhas idéias em realidade!
     
    Volto aqui no futuro pra contar o que saiu… 
     
    Abs,
     
    Marcelo CP

  • André Márcio

    Parabéns também!
    Fiquei impressionado com o seu feito!
    Abraço!

  • Francis Mendes

    Tive que mudar algumas coisas (pois o meu hardware é um pouco diferente – é o GT2440), mas no final consegui:
    https://lh6.googleusercontent.com/-TY6nGuLmN_c/TdGyxfAUq6I/AAAAAAAAABA/cbIXDTiEBPY/atari.jpg
    Você já considerou enviar a adição do pacote stella para o repositório do buildroot?
    Abraço

    • Legal Francis!

      Se você lembrar o que alterou, manda aqui. Assim você ajuda quem tiver o GT2440.

      Não tinha pensado em adicionar o Stella no rep. Vou enviar o patch pra lista do Buildroot.

      Um abraço.

  • Francis Mendes

    O que eu mudei para funcionar no GT2440 foi o seguinte:

    – O GT já funciona em modo paisagem além de ter uma resolução diferente (480x272px), então eu retirei o patch que você fez no SDL para inverter o touch
    – Eu configurei o buildroot para compilar o meu próprio kernel, porque eu já tinha o kernel do GT2440 funcional. Tirei um diff do kernel do GT2440 com o kernel do kernel.org e configurei o buildroot para aplicar o patch na hora de compilar o kernel. Também editei o .config para tirar alguns drivers que não precisava e configurei o buildroot para usar este .config ao invés de um defconfig. Ao invés de gerar um uImage, gerei um zImage, porque uso como bootloader o supervivi mesmo.
    – Configurei o buildroot para gerar uma imagem .ext2 somente, pois a partir dela que eu gero uma imagem no formato yaffs (que é o formato que o supervivi suporta).
    – Na hora da compilação do stella, ele reclamou que não achava o sdl-config. Descobri que o configure do stella estava buscando o sdl-config no host, e não no diretório de staging do buildroot. Editei o arquivo output/build/stella-3.2.2/configure e editei a variável _sdlpath para o diretório /output/build/sdl-1.2.14/, além de fazer o arquivo sdl-config ser executável. Mandei compilar de novo e funcionou. Certeza que esse não é o melhor jeito de lidar com o problema, mas funcionou, então…
    – Tive de alterar o script de inicialização do stella, primeiro para tirar o SDL_VIDEO_FBCON_ROTATION, pois o GT não precisa de rotação, e para mudar os caminhos dos eventos do joystick. No GT os caminhos para iniciar o joystick são: /dev/input/event1 e /dev/input/event3. As variáveis da tslib recebem o /dev/event0 ao invés de /dev/input/event1.
    – Também editei o arquivo .stella/stellarc e mudei a variável launcherres para 480×272 (resolução da tela do GT).

  • Thiago Costa

    Finalmente uma utilidade de verdade para o mini2440!!! Rsrs.

    Olá Sérgio, tinha tempo que não passava pelo BLOG, como sempre muito bem escrito. Eu consegui terminar minhas atribuições com o Kit para o projeto da  minha empresa. Usei Qt 4.6 e estou com uma pergunta, eu compilei a versão do Qt 4.7.2 com OpenSSL porém quando eu jogo pro mini ele não executa de jeito nenhum. Segundo os posts da internet a solução adotada pela maioria é o downgrade mesmo. Chegou a pensar neste problema?
     
    Abraços.

    • Olá Thiago!

      Nunca cheguei a usar o Qt com suporte a OpenSSL. Qual o problema com o Qt 4.7.2?

      Abraços.

    • Nilson Oliveira

      Thiago, eu também passo pelo mesmo problema, ocorre que o fato de o openssl não rodar na mini é que o RSA Encryption não está funcionando (comprovado por teste apenas tentando criar uma mensagem criptografada via RSA e ler essa mensagem). Você teve algum avanço em fazer o openssl funcionar?

  • Jeferson da Luz

    Sergio, você acha que seja possível rodar um emulador de SNES no MiniARM ?

    • Olá Jeferson,

      Sim, não vejo problemas! E agora o trabalho fica muito mais fácil. É só pegar esta minha distro e substituir o Stella por um emulador de SNES.

      Abraços!

  • Leonardo Torok

    Olá, Sérgio
    Estou tentando compilar usando o script automático que você forneceu, mas o buildroot está apresentando um erro no final, ao tentar gerar a imagem jffs2. Segue a saída do erro abaixo. O que pode estar causando esse problema?
     
     
    >>> host-e2fsprogs 1.41.14 Building
    PATH=/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/host/bin:/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/host/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games LD_LIBRARY_PATH="/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/host/usr/lib:" PKG_CONFIG="" PKG_CONFIG_LIBDIR="/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/host/usr/lib/pkgconfig" PERLLIB="/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/host/usr/lib/perl"  /usr/bin/make -j2  -C /home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/
    make[1]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: `lib/ext2fs/ext2_types.h' está atualizado.
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: `lib/blkid/blkid_types.h' está atualizado.
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: `lib/uuid/uuid_types.h' está atualizado.
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[2]: `compile_et' está atualizado.
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    make[2]: `ext2_err.h' está atualizado.
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    /usr/bin/make libs
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/ext2fs/ext2_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/blkid/blkid_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/uuid/uuid_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: `compile_et' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    make[3]: `ext2_err.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    making all in lib/et
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    making all in lib/ss
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ss'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ss'
    making all in lib/e2p
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/e2p'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/e2p'
    making all in lib/uuid
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/uuid'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/uuid'
    making all in lib/ext2fs
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    making all in lib/blkid
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/blkid'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/blkid'
    making all in intl
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/intl'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/intl'
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    /usr/bin/make progs
    make[2]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/ext2fs/ext2_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/blkid/blkid_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: `lib/uuid/uuid_types.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: `compile_et' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    make[3]: `ext2_err.h' está atualizado.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    making all in lib/et
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/et'
    making all in lib/ss
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ss'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ss'
    making all in lib/e2p
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/e2p'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/e2p'
    making all in lib/uuid
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/uuid'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/uuid'
    making all in lib/ext2fs
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs'
    making all in lib/blkid
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/blkid'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/blkid'
    making all in intl
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/intl'
    make[3]: Nada a ser feito para `all'.
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/intl'
    making all in e2fsck
    make[3]: Entrando no diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/e2fsck'
    LD e2fsck
    unix.o: In function `main':
    unix.c:(.text+0x21d7): undefined reference to `ext2fs_get_device_size2'
    unix.c:(.text+0x2697): undefined reference to `ext2fs_get_device_size2'
    e2fsck.o: In function `e2fsck_reset_context':
    e2fsck.c:(.text+0x223): undefined reference to `ext2fs_free_icount'
    super.o: In function `release_inode_block':
    super.c:(.text+0x29c): undefined reference to `ext2fs_test_generic_bitmap'
    super.o: In function `check_super_block':
    super.c:(.text+0x17cd): undefined reference to `ext2fs_iblk_sub_blocks'
    super.o: In function `check_resize_inode':
    super.c:(.text+0x1af4): undefined reference to `ext2fs_read_ind_block'
    super.c:(.text+0x1b80): undefined reference to `ext2fs_read_ind_block'
    pass1.o: In function `e2fsck_get_alloc_block':
    pass1.c:(.text+0x2fb): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `e2fsck_clear_inode':
    pass1.c:(.text+0x3b7): undefined reference to `ext2fs_icount_store'
    pass1.c:(.text+0x3d2): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1.c:(.text+0x3e4): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1.c:(.text+0x3fa): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1.c:(.text+0x410): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1.o: In function `mark_inode_bad':
    pass1.c:(.text+0x550): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `mark_block_used':
    pass1.c:(.text+0x61c): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x636): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x656): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `process_bad_block':
    pass1.c:(.text+0xcfd): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0xe61): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0xe80): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0xec6): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `e2fsck_setup_tdb_icount':
    pass1.c:(.text+0x10f5): undefined reference to `ext2fs_create_icount_tdb'
    pass1.o: In function `new_table_block':
    pass1.c:(.text+0x1555): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `scan_extent_node':
    pass1.c:(.text+0x1bb6): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x1bff): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x1c15): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `check_blocks':
    pass1.c:(.text+0x2167): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x3189): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.o: In function `e2fsck_pass1':
    pass1.c:(.text+0x3b76): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x3b8f): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x407e): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x40fe): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x4190): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x41d9): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x4250): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x42e3): undefined reference to `ext2fs_icount_store'
    pass1.c:(.text+0x4361): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x4376): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x43fd): undefined reference to `ext2fs_icount_store'
    pass1.c:(.text+0x44aa): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x455b): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x46c4): undefined reference to `ext2fs_test_generic_bitmap'
    pass1.c:(.text+0x496d): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x4a65): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x4ca8): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x50f6): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x512e): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x51bf): undefined reference to `ext2fs_create_icount2'
    pass1.o: In function `e2fsck_block_alloc_stats':
    pass1.c:(.text+0x288): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1.c:(.text+0x298): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1b.o: In function `search_dirent_proc':
    pass1b.c:(.text+0x52): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.o: In function `process_pass1b_block':
    pass1b.c:(.text+0xe0): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.c:(.text+0x125): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1b.o: In function `decrement_badcount':
    pass1b.c:(.text+0x389): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1b.o: In function `clone_file_block':
    pass1b.c:(.text+0x3ee): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.c:(.text+0x4f4): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1b.c:(.text+0x509): undefined reference to `ext2fs_mark_generic_bitmap'
    pass1b.o: In function `delete_file_block':
    pass1b.c:(.text+0x59e): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.c:(.text+0x5e8): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1b.o: In function `e2fsck_pass1_dupblocks':
    pass1b.c:(.text+0x8cb): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.c:(.text+0xfc8): undefined reference to `ext2fs_test_generic_bitmap'
    pass1b.c:(.text+0x1152): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass1b.c:(.text+0x127d): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.o: In function `deallocate_inode_block':
    pass2.c:(.text+0xc9): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass2.o: In function `e2fsck_pass2':
    pass2.c:(.text+0x510): undefined reference to `ext2fs_create_icount2'
    pass2.o: In function `e2fsck_process_bad_inode':
    pass2.c:(.text+0x9d3): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass2.c:(.text+0xfab): undefined reference to `ext2fs_unmark_generic_bitmap'
    pass2.o: In function `check_dir_block':
    pass2.c:(.text+0x10bf): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x169b): undefined reference to `ext2fs_mark_generic_bitmap'
    pass2.c:(.text+0x16b3): undefined reference to `ext2fs_mark_generic_bitmap'
    pass2.c:(.text+0x177c): undefined reference to `ext2fs_iblk_add_blocks'
    pass2.c:(.text+0x1b4f): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x1bc2): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x1fa3): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x1fde): undefined reference to `ext2fs_icount_increment'
    pass2.c:(.text+0x2166): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x2434): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x2928): undefined reference to `ext2fs_test_generic_bitmap'
    pass2.c:(.text+0x294d): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.o: In function `e2fsck_expand_directory':
    pass3.c:(.text+0x109): undefined reference to `ext2fs_iblk_add_blocks'
    pass3.o: In function `e2fsck_adjust_inode_count':
    pass3.c:(.text+0x1ea): undefined reference to `ext2fs_icount_decrement'
    pass3.c:(.text+0x20f): undefined reference to `ext2fs_icount_decrement'
    pass3.c:(.text+0x23e): undefined reference to `ext2fs_icount_increment'
    pass3.c:(.text+0x263): undefined reference to `ext2fs_icount_increment'
    pass3.o: In function `expand_dir_proc':
    pass3.c:(.text+0x63c): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.o: In function `e2fsck_get_lost_and_found':
    pass3.c:(.text+0x74f): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.c:(.text+0x860): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x8c6): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x8db): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x9d8): undefined reference to `ext2fs_iblk_set'
    pass3.c:(.text+0xa8f): undefined reference to `ext2fs_icount_store'
    pass3.c:(.text+0xaac): undefined reference to `ext2fs_icount_store'
    pass3.o: In function `e2fsck_pass3':
    pass3.c:(.text+0xfaa): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.c:(.text+0xfc8): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.c:(.text+0xff0): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x10c0): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.c:(.text+0x1131): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x1184): undefined reference to `ext2fs_test_generic_bitmap'
    pass3.c:(.text+0x11a2): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x121a): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x1232): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x131b): undefined reference to `ext2fs_iblk_set'
    pass3.c:(.text+0x1388): undefined reference to `ext2fs_icount_store'
    pass3.c:(.text+0x13a6): undefined reference to `ext2fs_icount_store'
    pass3.c:(.text+0x13bc): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x13d2): undefined reference to `ext2fs_mark_generic_bitmap'
    pass3.c:(.text+0x13eb): undefined reference to `ext2fs_mark_generic_bitmap'
    pass4.o: In function `e2fsck_pass4':
    pass4.c:(.text+0xd6): undefined reference to `ext2fs_test_generic_bitmap'
    pass4.c:(.text+0x16a): undefined reference to `ext2fs_test_generic_bitmap'
    pass4.c:(.text+0x188): undefined reference to `ext2fs_test_generic_bitmap'
    pass4.c:(.text+0x1a6): undefined reference to `ext2fs_test_generic_bitmap'
    pass4.c:(.text+0x1c7): undefined reference to `ext2fs_icount_fetch'
    pass4.c:(.text+0x1e0): undefined reference to `ext2fs_icount_fetch'
    pass4.c:(.text+0x2d2): undefined reference to `ext2fs_free_icount'
    pass4.c:(.text+0x2ea): undefined reference to `ext2fs_free_icount'
    pass4.c:(.text+0x645): undefined reference to `ext2fs_icount_fetch'
    pass4.c:(.text+0x65e): undefined reference to `ext2fs_icount_fetch'
    pass5.o: In function `e2fsck_pass5':
    pass5.c:(.text+0x1c5): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x1e0): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0x23c): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x250): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0x2f2): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x346): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x35a): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0x449): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0x4a6): undefined reference to `ext2fs_mark_generic_bitmap'
    pass5.c:(.text+0x507): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x5a1): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0x5ee): undefined reference to `ext2fs_mark_generic_bitmap'
    pass5.c:(.text+0x6e5): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0x701): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0x9e6): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0xa0b): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0xa2f): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0xa42): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0xa93): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0xaa4): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0xdaf): undefined reference to `ext2fs_get_generic_bitmap_start'
    pass5.c:(.text+0xdc0): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0xf73): undefined reference to `ext2fs_get_generic_bitmap_end'
    pass5.c:(.text+0x1145): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0x1170): undefined reference to `ext2fs_test_generic_bitmap'
    pass5.c:(.text+0x123e): undefined reference to `ext2fs_test_generic_bitmap'
    journal.o: In function `e2fsck_move_ext3_journal':
    journal.c:(.text+0x5e6): undefined reference to `ext2fs_unmark_generic_bitmap'
    rehash.o: In function `e2fsck_rehash_dir':
    rehash.c:(.text+0x10af): undefined reference to `ext2fs_iblk_sub_blocks'
    rehash.o: In function `write_dir_block':
    rehash.c:(.text+0x15eb): undefined reference to `ext2fs_unmark_generic_bitmap'
    ../lib/libext2fs.a(alloc.o): In function `ext2fs_get_free_blocks':
    alloc.c:(.text+0xc8): undefined reference to `ext2fs_test_block_bitmap_range'
    ../lib/libext2fs.a(alloc.o): In function `check_block_uninit':
    alloc.c:(.text+0x201): undefined reference to `ext2fs_unmark_generic_bitmap'
    alloc.c:(.text+0x253): undefined reference to `ext2fs_mark_generic_bitmap'
    ../lib/libext2fs.a(alloc.o): In function `ext2fs_new_block':
    alloc.c:(.text+0x310): undefined reference to `ext2fs_test_generic_bitmap'
    alloc.c:(.text+0x34c): undefined reference to `ext2fs_test_generic_bitmap'
    ../lib/libext2fs.a(alloc.o): In function `ext2fs_new_inode':
    alloc.c:(.text+0x453): undefined reference to `ext2fs_test_generic_bitmap'
    alloc.c:(.text+0x48b): undefined reference to `ext2fs_test_generic_bitmap'
    alloc.c:(.text+0x501): undefined reference to `ext2fs_unmark_generic_bitmap'
    ../lib/libext2fs.a(alloc_sb.o): In function `ext2fs_reserve_super_and_bgd':
    alloc_sb.c:(.text+0xb3): undefined reference to `ext2fs_mark_generic_bitmap'
    alloc_sb.c:(.text+0xd2): undefined reference to `ext2fs_mark_generic_bitmap'
    alloc_sb.c:(.text+0x108): undefined reference to `ext2fs_mark_generic_bitmap'
    ../lib/libext2fs.a(alloc_stats.o): In function `ext2fs_block_alloc_stats':
    alloc_stats.c:(.text+0x7f): undefined reference to `ext2fs_mark_generic_bitmap'
    alloc_stats.c:(.text+0xf9): undefined reference to `ext2fs_unmark_generic_bitmap'
    ../lib/libext2fs.a(alloc_stats.o): In function `ext2fs_inode_alloc_stats2':
    alloc_stats.c:(.text+0x172): undefined reference to `ext2fs_mark_generic_bitmap'
    alloc_stats.c:(.text+0x216): undefined reference to `ext2fs_unmark_generic_bitmap'
    ../lib/libext2fs.a(bb_inode.o): In function `set_bad_block_proc':
    bb_inode.c:(.text+0x82): undefined reference to `ext2fs_test_generic_bitmap'
    ../lib/libext2fs.a(bb_inode.o): In function `ext2fs_update_bb_inode':
    bb_inode.c:(.text+0x2dc): undefined reference to `ext2fs_iblk_set'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_get_block_bitmap_range':
    bitmaps.c:(.text+0x2a): undefined reference to `ext2fs_get_generic_bitmap_range'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_get_inode_bitmap_range':
    bitmaps.c:(.text+0x5a): undefined reference to `ext2fs_get_generic_bitmap_range'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_set_block_bitmap_range':
    bitmaps.c:(.text+0x8a): undefined reference to `ext2fs_set_generic_bitmap_range'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_set_inode_bitmap_range':
    bitmaps.c:(.text+0xba): undefined reference to `ext2fs_set_generic_bitmap_range'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_compare_inode_bitmap':
    bitmaps.c:(.text+0xe4): undefined reference to `ext2fs_compare_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_compare_block_bitmap':
    bitmaps.c:(.text+0x114): undefined reference to `ext2fs_compare_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_resize_block_bitmap':
    bitmaps.c:(.text+0x143): undefined reference to `ext2fs_resize_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_resize_inode_bitmap':
    bitmaps.c:(.text+0x173): undefined reference to `ext2fs_resize_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_fudge_block_bitmap_end':
    bitmaps.c:(.text+0x1cb): undefined reference to `ext2fs_fudge_generic_bitmap_end'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_fudge_inode_bitmap_end':
    bitmaps.c:(.text+0x20b): undefined reference to `ext2fs_fudge_generic_bitmap_end'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_allocate_block_bitmap':
    bitmaps.c:(.text+0x28c): undefined reference to `ext2fs_make_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_allocate_inode_bitmap':
    bitmaps.c:(.text+0x2fd): undefined reference to `ext2fs_make_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_clear_block_bitmap':
    bitmaps.c:(.text+0x188): undefined reference to `ext2fs_clear_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_clear_inode_bitmap':
    bitmaps.c:(.text+0x198): undefined reference to `ext2fs_clear_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_set_bitmap_padding':
    bitmaps.c:(.text+0x318): undefined reference to `ext2fs_set_generic_bitmap_padding'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_copy_bitmap':
    bitmaps.c:(.text+0x328): undefined reference to `ext2fs_copy_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_free_block_bitmap':
    bitmaps.c:(.text+0x338): undefined reference to `ext2fs_free_generic_bitmap'
    ../lib/libext2fs.a(bitmaps.o): In function `ext2fs_free_inode_bitmap':
    bitmaps.c:(.text+0x348): undefined reference to `ext2fs_free_generic_bitmap'
    ../lib/libext2fs.a(block.o): In function `block_iterate_ind':
    block.c:(.text+0xa5): undefined reference to `ext2fs_read_ind_block'
    block.c:(.text+0x2cb): undefined reference to `ext2fs_write_ind_block'
    ../lib/libext2fs.a(block.o): In function `block_iterate_dind':
    block.c:(.text+0x40e): undefined reference to `ext2fs_read_ind_block'
    block.c:(.text+0x5f3): undefined reference to `ext2fs_write_ind_block'
    ../lib/libext2fs.a(block.o): In function `ext2fs_block_iterate2':
    block.c:(.text+0xf2f): undefined reference to `ext2fs_read_ind_block'
    block.c:(.text+0x10a8): undefined reference to `ext2fs_write_ind_block'
    ../lib/libext2fs.a(bmap.o): In function `ext2fs_bmap2':
    bmap.c:(.text+0x7c8): undefined reference to `ext2fs_iblk_add_blocks'
    ../lib/libext2fs.a(check_desc.o): In function `ext2fs_check_desc':
    check_desc.c:(.text+0xf4): undefined reference to `ext2fs_test_generic_bitmap'
    check_desc.c:(.text+0x10b): undefined reference to `ext2fs_mark_generic_bitmap'
    check_desc.c:(.text+0x133): undefined reference to `ext2fs_test_generic_bitmap'
    check_desc.c:(.text+0x14a): undefined reference to `ext2fs_mark_generic_bitmap'
    check_desc.c:(.text+0x17e): undefined reference to `ext2fs_mark_generic_bitmap'
    check_desc.c:(.text+0x195): undefined reference to `ext2fs_test_generic_bitmap'
    ../lib/libext2fs.a(csum.o): In function `ext2fs_set_gdt_csum':
    csum.c:(.text+0x1ab): undefined reference to `ext2fs_test_generic_bitmap'
    ../lib/libext2fs.a(mkjournal.o): In function `ext2fs_add_journal_inode':
    mkjournal.c:(.text+0xd38): undefined reference to `ext2fs_iblk_add_blocks'
    ../lib/libext2fs.a(res_gdt.o): In function `ext2fs_create_resize_inode':
    res_gdt.c:(.text+0x13d): undefined reference to `ext2fs_iblk_set'
    res_gdt.c:(.text+0x2ea): undefined reference to `ext2fs_read_ind_block'
    res_gdt.c:(.text+0x3aa): undefined reference to `ext2fs_read_ind_block'
    res_gdt.c:(.text+0x3f8): undefined reference to `ext2fs_iblk_add_blocks'
    res_gdt.c:(.text+0x51b): undefined reference to `ext2fs_iblk_add_blocks'
    res_gdt.c:(.text+0x55a): undefined reference to `ext2fs_write_ind_block'
    res_gdt.c:(.text+0x582): undefined reference to `ext2fs_write_ind_block'
    collect2: ld returned 1 exit status
    make[3]: ** [e2fsck] Erro 1
    make[3]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/e2fsck'
    make[2]: ** [all-progs-recursive] Erro 1
    make[2]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make[1]: ** [all] Erro 2
    make[1]: Saindo do diretório `/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14'
    make: ** [/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/.stamp_built] Erro 2

    • Olá Leonardo,

      Na verdade o problema esta na compilação da ferramenta ext2fs, responsável por gerar a imagem ext2 do rootfs. Deve ser algo relacionado com seu ambiente de desenvolvimento. Tenta instalar os pacotes abaixo:

      sudo apt-get install e2fslibs e2fslibs-dev e2fsprogs

      Se não funcionar, uma solução provisória é entrar no menu de configuração do Buildroot e desablitar a geração da imagem ext2.

      Um abraço.

  • Leonardo Torok

    Olá Sérgio,
    A instalação dos pacotes resolveu o problema e consegui compilar e executar com sucesso o sistema e o emulador. Só que agora estou com um problema estranho. Após várias instalações, o kit não mostra mais nada no display LCD. Eu tento instalar a imagem novamente mas o display continua assim. Tentei com outro mini2440 e o display funcionou. Mas depois de instalar o sistema algumas vezes no novo kit, o display voltou a não mostrar mais a imagem. 
    O estranho é que, pela saída do console na serial, vejo que o sistema dá boot normalmente e até vejo a saída dos resultados da calibração da tela quando toco no display, só que sem a imagem na tela. O que pode ser isso?

  • Olá Leonardo,

    É bem provável que seja hardware. Algum mal contato no cabo do display. Veja se não esta mal encaixado. Eu também já tive este problema aqui. Mas cuidado que o cabo é bem frágil.

    Um abraço.

  • Leonardo Torok

    Olá, Sérgio
    Problema resolvido, nem era um problema de hardware. Precisei retirar o "mini2440=3tb" dos argumentos de boot. Acredito que seja porque o meu display é um X35, enquanto o do seu Mini2440 pode ser de outro fabricante (que eu saiba, esses minis possuem displays de diversos fabricantes).
    Abraços

    • Olá Leonardo,

      Achei que era hardware porque você disse que o problema era intermitente. Mas que bem que funcionou! Valeu pela dica.

      Um abraço.

  • Leonardo Torok

    Olá, Sérgio
    Também achei que seria hardware, tanto que fiz testes com outros displays e kits (temos 4 Mini2440 aqui). Pareceu ser intermitente porque esqueci de gravar a variável de ambiente nos primeiros testes, ficando com o valor antigo que era o que funcionava no meu kit. Quando fui fazer o flash novamente, ai sim eu lembrei de gravar a variável e o problema ocorreu. Mas agora está tudo certo.
    Estou seguindo seu tutorial do Emdebian agora, já consegui instalá-lo no kit e está tudo ok. Deixo como dica trocar os repositórios do Emdebian pelos do Debian Lenny original (que posuem pacotes para ARM), já que eles tem muito mais pacotes, como o MySQL e o PHP.

  • Elton Soares

    Ótima dica do Leonardo, farei o teste amanhã, pois o repo do Emdebian está apresentando erros constantes. Leonardo, você pode me passar o seu e-mail para trocarmos experiências?

  • Leonardo Torok

    Elton, é leotorok@gmail.com.

  • Elmo Oliveira

    Sérgio,

    Como faço para rodar uma aplicação java na mini 2440 com o sistema nativo?

    Por favor nos ajude, pois é o nosso trabalho de TCC, temos menos de um mês para entrega do mesmo.

    Sds,

    Elmo Oliveira
    Tecnologia da Informação

  • Ibrahim

    Olá Sergio,

    Sou primo do Lucas Zampar e estamos tentando rodar a aplicação do linphone com linux embarcado (mini6410 e mini210).

    Conseguimos rodar a aplicação utilizando utilizando gerenciadores de janela como o wmaker, fluxbox, xfce4, entre outros.

    Estamos tendo dificuldades para fazer com que o linphone (que usa o gtk+) rodar sem os gerenciadores de janela.

    Utilizamos o buildroot-2013.02-rc2 para gerar o rootfs, porém sem sucesso ao incluir o gtk+

    Gostaria de saber se pode nos ajudar.

    Grato,

    • Claro, é só dizer quais dificuldades estão enfrentando.

      Um abraço.

      • Bom dia,

        Estamos tendo dificuldades em executar aplicações gtk+ diretamente pelo DirectFB.

        Usando um gerenciador de janelas, como o fluxbox, somos capazes de rodar a aplicação gtk+ (linphone)

        O DirectFB está funcionando e criamos o rootfs para o mini210 com o buildroot-2013.02-rc2

        Obrigado pela ajuda

  • Richard Valdivia

    Sérgio,

    Excelente tópico. Sou desenvolvedor e comecei a me interessar por sistemas embarcados através de seus artigos. Parabéns e obrigado por compartilhar suas experiências conosco!

  • Heres

    Sergio,

    estou tentando adicionar a biblioteca ALSA com o buildroot,

    mas não funciona. Você pode me ajudar?

    Segue abaixo os erros:

    # chmod 0660 /dev/pcmC0D0c

    chmod: /dev/pcmC0D0c: No such file or directory

    # chmod 0660 /dev/pcmC0D0p

    chmod: /dev/pcmC0D0p: No such file or directory

    # chmod 0660 /dev/controlC0

    chmod: /dev/controlC0: No such file or directory

    # chmod 0660 /dev/timer

    chmod: /dev/timer: No such file or directory

    # aplay /usr/share/sounds/alsa/Front_Center.wav

    ALSA lib confmisc.c:768:(parse_card) cannot find card ‘0’

    ALSA lib conf.c:4154:(_snd_config_evaluate) function snd_func_card_driver retury

    ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings

    ALSA lib conf.c:4154:(_snd_config_evaluate) function snd_func_concat returned ey

    ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name

    ALSA lib conf.c:4154:(_snd_config_evaluate) function snd_func_refer returned ery

    ALSA lib conf.c:4633:(snd_config_expand) Evaluate error: No such file or directy

    ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM default

    aplay: main:608: audio open error: No such file or directory

    Obrigado!

    • Olá Heres,

      Me parece que seu kernel não esta com os drivers de video habilitados. Você compilou ele oou pegou uma versão pre-compilada? Qual o resultado do comando abaixo?

      $ ls /dev/snd*

      • Heres

        Estou usando o buildroot.

        # ls /dev/snd*

        controlC0 pcmC0D0c pcmC0D0p timer

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.