Mini2440 — Emulando Atari com Linux embarcado

- por Sergio Prado

Categorias: Linux, Mini2440 Tags: ,

Nesta nossa área cheia de novi­dades e desafios con­stantes, fica difí­cil acom­pan­har tudo o que acon­tece sem real­mente gostar e se diver­tir com o tra­balho. Sem­pre que eu pre­ciso encarar um novo desafio (seja pes­soal ou profis­sional), é aí que busco min­has forças. Paixão pelo tra­balho é fun­da­men­tal para man­ter a dis­ci­plina e bus­car aquela ener­gia extra que real­mente faz a diferença.

E seguindo esta filosofia de “apren­dizado com diver­são”, pen­sei no que ainda pode­ria explo­rar no kit Friendl­yARM mini2440, que não tivesse sido feito, e que fosse desafi­ador, estim­u­lante e diver­tido.

Tive então a idéia de emu­lar o Atari 2600. Sim, aquele con­sole antigo, mas que (pelo menos para mim) traz boas lem­branças dos tem­pos de infân­cia. Minha idéia foi trans­for­mar a mini2440 em um con­sole Atari 2600, usando um dis­play LCD de 3.5″ como saída de vídeo, um joy­stick USB como con­t­role e um cartão SD para ler as ROMs (jogos).

 Mini2440   Emulando Atari com Linux embarcadomini2440 atari system Mini2440   Emulando Atari com Linux embarcado

Escolhi usar o Stella (http://stella.sourceforge.net/), um emu­lador de Atari multi-plataforma e lib­er­ado sob a licença GPL. Meu primeiro passo foi dar uma olhada nos pré-requisitos do pro­jeto, que basi­ca­mente são estes:

  • Req­ui­si­tos de Hard­ware
    • 32M de RAM: OK, o kit tem 64M.
    • Dis­play grá­fico de 16 bits: o dis­play é de 3.5″ e suporta modo grá­fico de 16 bits.
    • Entrada para joy­stick: temos a porta USB.
    • Arquite­tura i386, MIPS, PPC: Ops, nada de ARM? Será que funciona?
  • Req­ui­si­tos de soft­ware:
    • Linux 2.6: OK!
    • GNU C++ 4.x: pre­cis­are­mos habil­i­tar a tool­chain C++ no Buildroot.
    • SDL V1.2.10 ou maior: pre­cis­are­mos habil­i­tar o SDL no Buildroot.

Não me pare­cia nada de outro mundo. Escolhi o Buil­d­root como sis­tema de build para gerar minha imagem final. Bas­taria seguir este meu artigo, con­fig­u­rar e adi­cionar o pacote do Stella, e habil­i­tar algu­mas opções adi­cionais, como tool­chain C++ e a bib­lioteca 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 fun­cio­nou de primeira. Quer uma lista de alguns desafios que encon­trei?

1. O vídeo não ren­der­izava em modo pais­agem. O dri­ver de frame­buffer do dis­play LCD supor­tava ape­nas 240x320, enquanto que o Stella roda ape­nas com res­oluções a par­tir de 320x240. Depois de dias debugando e estu­dando o dri­ver do dis­play, a bib­lioteca SDL e a apli­cação Stella, encon­trei uma solução bem sim­ples: setar uma var­iável de ambi­ente usada pela bib­lioteca SDL para rota­cionar o dis­play! Sim, foram dias de análise para resolver o prob­lema com uma linha de código em shell script! Mas no fim, adquiri bas­tante con­hec­i­mento na camada de vídeo do Linux.

$ export SDL_VIDEO_FBCON_ROTATION=CW

2. Com a cor­reção da ren­der­iza­ção do vídeo, cau­sei um prob­lema com o touch­screen. Como eu rota­cionei o dis­play, os val­ores lidos pelo touch ficaram deslo­ca­dos. Pre­ci­sei escr­ever um patch que fizesse esse hack na bib­lioteca 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. Tam­bém tive prob­le­mas com o som, que não fun­cionava com o dri­ver padrão em modo OSS. Resolvi o prob­lema habil­i­tando o bib­lioteca ALSA no Buil­d­root, e criando alguns links sim­bóli­cos para os arquivos de dis­pos­i­tivo do dri­ver 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 tes­tar o som com a bib­lioteca ALSA:

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

4. O joy­stick fun­cio­nou de primeira, mas estran­hamente causava erro de seg­men­tação de memória na apli­cação Stella ao ten­tar usar o dire­cional. Então desco­bri que pre­cisava habil­i­tar a inter­face de joy­stick 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 colo­car o pacote Stella no Buil­d­root (desen­volvi um patch para cor­ri­gir um erro de cross-compilação). Tam­bém pre­ci­sei habil­i­tar e con­fig­u­rar o hot­plug no ker­nel o mdev no Buil­d­root para iden­ti­ficar e mon­tar auto­mati­ca­mente o cartão SD no boot.

Real­mente foi um pro­jeto que deu tra­balho, mas é o tipo de exper­iên­cia que vale a pena, pois é um apren­dizado não se con­segue ape­nas lendo livros ou arti­gos na inter­net.

No final, criei um script para facil­i­tar todo o processo para quem tam­bém quiser “brin­car”. Disponi­bi­lizei este script, junto com todos os arquivos necessários para com­pi­lar e gerar a imagem, em um pro­jeto no github, que pode ser aces­sado aqui.

GERANDO A IMAGEM

Para gerar a imagem, exe­cute os coman­dos 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 com­pi­lação deve levar de 1 a 2 horas, depen­dendo da sua máquina. Após com­pi­lar, você terá disponível em output/images as ima­gens do ker­nel e do rootfs disponíveis:

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

Para gravar o ker­nel e o rootfs, você pode se basear neste artigo aqui. Mude ape­nas a con­fig­u­ração da var­iável “bootargs” do U-Boot, con­forme abaixo:

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

TESTANDO

No primeiro boot, você pre­cis­ará con­fig­u­rar a inter­face touch­screen, pres­sio­n­ando a caneta nos pon­tos indi­ca­dos pela fer­ra­menta de con­fig­u­ração. Após con­fig­u­rar o touch­screen, a apli­cação Stella já ini­cia auto­mati­ca­mente, e você poderá con­fig­u­rar seu joy­stick em “Options->Input Set­tings” se quiser.

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

 Mini2440   Emulando Atari com Linux embarcado Mini2440   Emulando Atari com Linux embarcado

 Mini2440   Emulando Atari com Linux embarcado100 5585(1) Mini2440   Emulando Atari com Linux embarcado

Obs: Não quero entrar aqui nos méri­tos legais de usar um emu­lador com ROMs. Ape­nas para con­star, você pre­cisa ter o jogo para poder baixar a ROM e usá-la em um emu­lador.

Gravei tam­bém um vídeo onde podemos ver o boot da mini2440 e alguns jogos em ação. Só não reclamem das habil­i­dades do jogador! Colo­quei minha esposa para jogar enquanto gravava. O prob­lema foi tirar o con­t­role dela depois… :)


E para con­cluir, o que podemos tirar de apren­dizado neste pro­jeto?

Primeira­mente, se você quer apren­der, pre­cisa colo­car a mão na massa! Só assim para trans­for­mar seu con­hec­i­mento em habil­i­dades. Com um pouco de cria­tivi­dade, dis­ci­plina e per­sistên­cia, você con­segue apren­der coisas que talvez não apren­de­ria em um emprego for­mal.

Em segundo lugar, perceba a importân­cia do código livre para este pro­jeto. Tudo o que fiz foi usando soft­ware e fer­ra­men­tas de código aberto. Ter em mãos o código do ker­nel do Linux e das bib­liote­cas foi essen­cial para solu­cionar alguns dos prob­le­mas que encon­trei no meio do cam­inho. Escrevendo este artigo, disponi­bi­lizando o pro­jeto e moti­vando as pes­soas a faz­erem o mesmo, espero estar con­tribuindo de volta com a comu­nidade.

Um abraço!

Ser­gio Prado

  • http://www.streamsolution.eu/ Edwin van den Oetelaar

    Nice project, thanks for shar­ing your expe­ri­ence with the world. I learned some stuff here!

    • http://sergioprado.org ser­gio­prado

      Thanks Edwin!

  • Marcelo

      Parabéns Sér­gio!!! Legal o post e muito motivador!

  • Lucas Zam­par

    Como sem­pre, sur­preen­dendo a todos!
    Sér­gio, me mande por email um con­tato seu. Pre­cisamos con­ver­sar.
     
     
    Um grande abraço,
     
     
    Lucas Zampar

  • Juliano Alves de Oliveira

    Parabéns Ser­gio,
    Mais uma vez me surpreendeu,isso me da força pra con­tin­uar a ir atrás daquele erro que tem­pos atrás eu vinha ten­tando resolver com sua ajuda, um dia eu consigo.

    • http://sergioprado.org ser­gio­prado

      É isso aí Juliano, não desiste! Nen­hum prob­lema é “insolu­cionável” até que encon­tremos o próximo! :)

      Um abraço.

  • Roberto Sil­veira

    Grande Sér­gio
    Mto massa o pro­jeto cara, parabéns!.
    Tenho acom­pan­hado o teu blog aqui, tá muito legal. 
    Grande abraço
    Roberto

  • Roberto Sil­veira

    Ape­nas para com­par­til­har com a galera dos sis­temas embara­ca­dos, a Atmel lançou um série chamada AVR Xplained. Par­tic­u­lar­mente usei alguns micros da família AVR+AVR Dragon+AVR Stu­dio e gostei bas­tante. A noti­cia boa é que cada placa custa a bagatela de USD 29, e ainda por cima dá pra encon­trar uns micros de 32 bits pra brin­car…
    http://www.atmel.com/products/AVR/xplain.asp?category_id=163&family_id=607&icn=hmap2-Xplained-Series&ici=may_2011
    Abraço
    Roberto

    • http://sergioprado.org ser­gio­prado

      Valeu pela dica Roberto!

      Um abraço.

  • Júlio Hof­fi­mann

    Parabéns Sér­gio!
    Nova­mente estou impres­sion­ado com a qual­i­dade dos seus arti­gos.
    Abraço!

  • Marcelo

    Sér­gio,
     
    Parabéns pelo artigo, e saiba que comigo você con­seguiu seu obje­tivo — vou pôs a mão na massa pra trnas­for­mar min­has idéias em real­i­dade!
     
    Volto aqui no futuro pra con­tar o que saiu… 
     
    Abs,
     
    Marcelo CP

    • http://sergioprado.org ser­gio­prado

      Com­bi­nado Marcelo!

      Um abraço.

  • André Már­cio

    Parabéns tam­bém!
    Fiquei impres­sion­ado com o seu feito!
    Abraço!

  • Fran­cis Mendes

    Tive que mudar algu­mas coisas (pois o meu hard­ware é um pouco difer­ente — é o GT2440), mas no final con­segui:
    https://lh6.googleusercontent.com/-TY6nGuLmN_c/TdGyxfAUq6I/AAAAAAAAABA/cbIXDTiEBPY/atari.jpg
    Você já con­siderou enviar a adição do pacote stella para o repositório do buil­d­root?
    Abraço

    • http://sergioprado.org ser­gio­prado

      Legal Fran­cis!

      Se você lem­brar o que alterou, manda aqui. Assim você ajuda quem tiver o GT2440.

      Não tinha pen­sado em adi­cionar o Stella no rep. Vou enviar o patch pra lista do Buildroot.

      Um abraço.

  • Fran­cis Mendes

    O que eu mudei para fun­cionar no GT2440 foi o seguinte:

    - O GT já fun­ciona em modo pais­agem além de ter uma res­olução difer­ente (480x272px), então eu retirei o patch que você fez no SDL para inverter o touch
    – Eu con­fig­urei o buil­d­root para com­pi­lar o meu próprio ker­nel, porque eu já tinha o ker­nel do GT2440 fun­cional. Tirei um diff do ker­nel do GT2440 com o ker­nel do kernel.org e con­fig­urei o buil­d­root para aplicar o patch na hora de com­pi­lar o ker­nel. Tam­bém editei o .con­fig para tirar alguns dri­vers que não pre­cisava e con­fig­urei o buil­d­root para usar este .con­fig ao invés de um def­con­fig. Ao invés de gerar um uIm­age, gerei um zIm­age, porque uso como boot­loader o super­vivi mesmo.
    – Con­fig­urei o buil­d­root para gerar uma imagem .ext2 somente, pois a par­tir dela que eu gero uma imagem no for­mato yaffs (que é o for­mato que o super­vivi suporta).
    – Na hora da com­pi­lação do stella, ele reclamou que não achava o sdl-config. Desco­bri que o con­fig­ure do stella estava bus­cando o sdl-config no host, e não no diretório de stag­ing do buil­d­root. Editei o arquivo output/build/stella-3.2.2/configure e editei a var­iável _sdlpath para o diretório /output/build/sdl-1.2.14/, além de fazer o arquivo sdl-config ser exe­cutável. Man­dei com­pi­lar de novo e fun­cio­nou. Certeza que esse não é o mel­hor jeito de lidar com o prob­lema, mas fun­cio­nou, então…
    – Tive de alterar o script de ini­cial­iza­ção do stella, primeiro para tirar o SDL_VIDEO_FBCON_ROTATION, pois o GT não pre­cisa de rotação, e para mudar os cam­in­hos dos even­tos do joy­stick. No GT os cam­in­hos para ini­ciar o joy­stick são: /dev/input/event1 e /dev/input/event3. As var­iáveis da tslib recebem o /dev/event0 ao invés de /dev/input/event1.
    – Tam­bém editei o arquivo .stella/stellarc e mudei a var­iável launcher­res para 480x272 (res­olução da tela do GT).

  • Thi­ago Costa

    Final­mente uma util­i­dade de ver­dade para o mini2440!!! Rsrs.

    Olá Sér­gio, tinha tempo que não pas­sava pelo BLOG, como sem­pre muito bem escrito. Eu con­segui ter­mi­nar min­has atribuições com o Kit para o pro­jeto da  minha empresa. Usei Qt 4.6 e estou com uma per­gunta, eu com­pilei a ver­são do Qt 4.7.2 com OpenSSL porém quando eu jogo pro mini ele não exe­cuta de jeito nen­hum. Segundo os posts da inter­net a solução ado­tada pela maio­ria é o down­grade mesmo. Chegou a pen­sar neste prob­lema?
     
    Abraços.

    • http://sergioprado.org ser­gio­prado

      Olá Thi­ago!

      Nunca cheguei a usar o Qt com suporte a OpenSSL. Qual o prob­lema com o Qt 4.7.2?

      Abraços.

    • Nil­son Oliveira

      Thi­ago, eu tam­bém passo pelo mesmo prob­lema, ocorre que o fato de o openssl não rodar na mini é que o RSA Encryp­tion não está fun­cio­nando (com­pro­vado por teste ape­nas ten­tando criar uma men­sagem crip­tografada via RSA e ler essa men­sagem). Você teve algum avanço em fazer o openssl funcionar?

  • http://www.polaticus.com.br Jefer­son da Luz

    Ser­gio, você acha que seja pos­sível rodar um emu­lador de SNES no MiniARM ?

    • http://sergioprado.org Ser­gio Prado

      Olá Jefer­son,

      Sim, não vejo prob­le­mas! E agora o tra­balho fica muito mais fácil. É só pegar esta minha dis­tro e sub­sti­tuir o Stella por um emu­lador de SNES.

      Abraços!

  • Leonardo Torok

    Olá, Sér­gio
    Estou ten­tando com­pi­lar usando o script automático que você forneceu, mas o buil­d­root está apre­sen­tando um erro no final, ao ten­tar gerar a imagem jffs2. Segue a saída do erro abaixo. O que pode estar cau­sando esse prob­lema?
     
     
    »> host-e2fsprogs 1.41.14 Build­ing
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    make[3]: Saindo do diretório ‘/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    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á atu­al­izado.
    make[3]: Saindo do diretório ‘/home/arm/AtariEmulator/Mini2440-Atari-System/buildroot-2011.02/output/build/host-e2fsprogs-1.41.14/lib/ext2fs’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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’
    mak­ing 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 func­tion ‘main’:
    unix.c:(.text+0x21d7): unde­fined ref­er­ence to ‘ext2fs_get_device_size2’
    unix.c:(.text+0x2697): unde­fined ref­er­ence to ‘ext2fs_get_device_size2’
    e2fsck.o: In func­tion ‘e2fsck_reset_context’:
    e2fsck.c:(.text+0x223): unde­fined ref­er­ence to ‘ext2fs_free_icount’
    super.o: In func­tion ‘release_inode_block’:
    super.c:(.text+0x29c): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    super.o: In func­tion ‘check_super_block’:
    super.c:(.text+0x17cd): unde­fined ref­er­ence to ‘ext2fs_iblk_sub_blocks’
    super.o: In func­tion ‘check_resize_inode’:
    super.c:(.text+0x1af4): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    super.c:(.text+0x1b80): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    pass1.o: In func­tion ‘e2fsck_get_alloc_block’:
    pass1.c:(.text+0x2fb): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘e2fsck_clear_inode’:
    pass1.c:(.text+0x3b7): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass1.c:(.text+0x3d2): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1.c:(.text+0x3e4): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1.c:(.text+0x3fa): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1.c:(.text+0x410): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1.o: In func­tion ‘mark_inode_bad’:
    pass1.c:(.text+0x550): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘mark_block_used’:
    pass1.c:(.text+0x61c): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x636): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x656): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘process_bad_block’:
    pass1.c:(.text+0xcfd): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0xe61): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0xe80): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0xec6): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘e2fsck_setup_tdb_icount’:
    pass1.c:(.text+0x10f5): unde­fined ref­er­ence to ‘ext2fs_create_icount_tdb’
    pass1.o: In func­tion ‘new_table_block’:
    pass1.c:(.text+0x1555): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘scan_extent_node’:
    pass1.c:(.text+0x1bb6): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x1bff): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x1c15): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘check_blocks’:
    pass1.c:(.text+0x2167): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x3189): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.o: In func­tion ‘e2fsck_pass1’:
    pass1.c:(.text+0x3b76): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x3b8f): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x407e): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x40fe): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x4190): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x41d9): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x4250): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x42e3): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass1.c:(.text+0x4361): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x4376): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x43fd): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass1.c:(.text+0x44aa): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x455b): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x46c4): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1.c:(.text+0x496d): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x4a65): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x4ca8): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x50f6): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x512e): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x51bf): unde­fined ref­er­ence to ‘ext2fs_create_icount2’
    pass1.o: In func­tion ‘e2fsck_block_alloc_stats’:
    pass1.c:(.text+0x288): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1.c:(.text+0x298): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1b.o: In func­tion ‘search_dirent_proc’:
    pass1b.c:(.text+0x52): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.o: In func­tion ‘process_pass1b_block’:
    pass1b.c:(.text+0xe0): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.c:(.text+0x125): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1b.o: In func­tion ‘decrement_badcount’:
    pass1b.c:(.text+0x389): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1b.o: In func­tion ‘clone_file_block’:
    pass1b.c:(.text+0x3ee): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.c:(.text+0x4f4): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1b.c:(.text+0x509): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass1b.o: In func­tion ‘delete_file_block’:
    pass1b.c:(.text+0x59e): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.c:(.text+0x5e8): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1b.o: In func­tion ‘e2fsck_pass1_dupblocks’:
    pass1b.c:(.text+0x8cb): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.c:(.text+0xfc8): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass1b.c:(.text+0x1152): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass1b.c:(.text+0x127d): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.o: In func­tion ‘deallocate_inode_block’:
    pass2.c:(.text+0xc9): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass2.o: In func­tion ‘e2fsck_pass2’:
    pass2.c:(.text+0x510): unde­fined ref­er­ence to ‘ext2fs_create_icount2’
    pass2.o: In func­tion ‘e2fsck_process_bad_inode’:
    pass2.c:(.text+0x9d3): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass2.c:(.text+0xfab): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    pass2.o: In func­tion ‘check_dir_block’:
    pass2.c:(.text+0x10bf): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x169b): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass2.c:(.text+0x16b3): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass2.c:(.text+0x177c): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    pass2.c:(.text+0x1b4f): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x1bc2): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x1fa3): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x1fde): unde­fined ref­er­ence to ‘ext2fs_icount_increment’
    pass2.c:(.text+0x2166): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x2434): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x2928): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass2.c:(.text+0x294d): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.o: In func­tion ‘e2fsck_expand_directory’:
    pass3.c:(.text+0x109): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    pass3.o: In func­tion ‘e2fsck_adjust_inode_count’:
    pass3.c:(.text+0x1ea): unde­fined ref­er­ence to ‘ext2fs_icount_decrement’
    pass3.c:(.text+0x20f): unde­fined ref­er­ence to ‘ext2fs_icount_decrement’
    pass3.c:(.text+0x23e): unde­fined ref­er­ence to ‘ext2fs_icount_increment’
    pass3.c:(.text+0x263): unde­fined ref­er­ence to ‘ext2fs_icount_increment’
    pass3.o: In func­tion ‘expand_dir_proc’:
    pass3.c:(.text+0x63c): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.o: In func­tion ‘e2fsck_get_lost_and_found’:
    pass3.c:(.text+0x74f): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.c:(.text+0x860): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x8c6): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x8db): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x9d8): unde­fined ref­er­ence to ‘ext2fs_iblk_set’
    pass3.c:(.text+0xa8f): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass3.c:(.text+0xaac): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass3.o: In func­tion ‘e2fsck_pass3’:
    pass3.c:(.text+0xfaa): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.c:(.text+0xfc8): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.c:(.text+0xff0): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x10c0): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.c:(.text+0x1131): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x1184): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass3.c:(.text+0x11a2): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x121a): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x1232): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x131b): unde­fined ref­er­ence to ‘ext2fs_iblk_set’
    pass3.c:(.text+0x1388): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass3.c:(.text+0x13a6): unde­fined ref­er­ence to ‘ext2fs_icount_store’
    pass3.c:(.text+0x13bc): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x13d2): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass3.c:(.text+0x13eb): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass4.o: In func­tion ‘e2fsck_pass4’:
    pass4.c:(.text+0xd6): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass4.c:(.text+0x16a): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass4.c:(.text+0x188): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass4.c:(.text+0x1a6): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass4.c:(.text+0x1c7): unde­fined ref­er­ence to ‘ext2fs_icount_fetch’
    pass4.c:(.text+0x1e0): unde­fined ref­er­ence to ‘ext2fs_icount_fetch’
    pass4.c:(.text+0x2d2): unde­fined ref­er­ence to ‘ext2fs_free_icount’
    pass4.c:(.text+0x2ea): unde­fined ref­er­ence to ‘ext2fs_free_icount’
    pass4.c:(.text+0x645): unde­fined ref­er­ence to ‘ext2fs_icount_fetch’
    pass4.c:(.text+0x65e): unde­fined ref­er­ence to ‘ext2fs_icount_fetch’
    pass5.o: In func­tion ‘e2fsck_pass5’:
    pass5.c:(.text+0x1c5): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x1e0): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0x23c): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x250): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0x2f2): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x346): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x35a): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0x449): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0x4a6): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass5.c:(.text+0x507): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x5a1): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0x5ee): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    pass5.c:(.text+0x6e5): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0x701): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0x9e6): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0xa0b): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0xa2f): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0xa42): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0xa93): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0xaa4): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0xdaf): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_start’
    pass5.c:(.text+0xdc0): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0xf73): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_end’
    pass5.c:(.text+0x1145): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0x1170): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    pass5.c:(.text+0x123e): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    journal.o: In func­tion ‘e2fsck_move_ext3_journal’:
    journal.c:(.text+0x5e6): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    rehash.o: In func­tion ‘e2fsck_rehash_dir’:
    rehash.c:(.text+0x10af): unde­fined ref­er­ence to ‘ext2fs_iblk_sub_blocks’
    rehash.o: In func­tion ‘write_dir_block’:
    rehash.c:(.text+0x15eb): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    ../lib/libext2fs.a(alloc.o): In func­tion ‘ext2fs_get_free_blocks’:
    alloc.c:(.text+0xc8): unde­fined ref­er­ence to ‘ext2fs_test_block_bitmap_range’
    ../lib/libext2fs.a(alloc.o): In func­tion ‘check_block_uninit’:
    alloc.c:(.text+0x201): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    alloc.c:(.text+0x253): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    ../lib/libext2fs.a(alloc.o): In func­tion ‘ext2fs_new_block’:
    alloc.c:(.text+0x310): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    alloc.c:(.text+0x34c): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    ../lib/libext2fs.a(alloc.o): In func­tion ‘ext2fs_new_inode’:
    alloc.c:(.text+0x453): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    alloc.c:(.text+0x48b): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    alloc.c:(.text+0x501): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    ../lib/libext2fs.a(alloc_sb.o): In func­tion ‘ext2fs_reserve_super_and_bgd’:
    alloc_sb.c:(.text+0xb3): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    alloc_sb.c:(.text+0xd2): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    alloc_sb.c:(.text+0x108): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    ../lib/libext2fs.a(alloc_stats.o): In func­tion ‘ext2fs_block_alloc_stats’:
    alloc_stats.c:(.text+0x7f): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    alloc_stats.c:(.text+0xf9): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    ../lib/libext2fs.a(alloc_stats.o): In func­tion ‘ext2fs_inode_alloc_stats2’:
    alloc_stats.c:(.text+0x172): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    alloc_stats.c:(.text+0x216): unde­fined ref­er­ence to ‘ext2fs_unmark_generic_bitmap’
    ../lib/libext2fs.a(bb_inode.o): In func­tion ‘set_bad_block_proc’:
    bb_inode.c:(.text+0x82): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    ../lib/libext2fs.a(bb_inode.o): In func­tion ‘ext2fs_update_bb_inode’:
    bb_inode.c:(.text+0x2dc): unde­fined ref­er­ence to ‘ext2fs_iblk_set’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_get_block_bitmap_range’:
    bitmaps.c:(.text+0x2a): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_range’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_get_inode_bitmap_range’:
    bitmaps.c:(.text+0x5a): unde­fined ref­er­ence to ‘ext2fs_get_generic_bitmap_range’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_set_block_bitmap_range’:
    bitmaps.c:(.text+0x8a): unde­fined ref­er­ence to ‘ext2fs_set_generic_bitmap_range’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_set_inode_bitmap_range’:
    bitmaps.c:(.text+0xba): unde­fined ref­er­ence to ‘ext2fs_set_generic_bitmap_range’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_compare_inode_bitmap’:
    bitmaps.c:(.text+0xe4): unde­fined ref­er­ence to ‘ext2fs_compare_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_compare_block_bitmap’:
    bitmaps.c:(.text+0x114): unde­fined ref­er­ence to ‘ext2fs_compare_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_resize_block_bitmap’:
    bitmaps.c:(.text+0x143): unde­fined ref­er­ence to ‘ext2fs_resize_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_resize_inode_bitmap’:
    bitmaps.c:(.text+0x173): unde­fined ref­er­ence to ‘ext2fs_resize_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_fudge_block_bitmap_end’:
    bitmaps.c:(.text+0x1cb): unde­fined ref­er­ence to ‘ext2fs_fudge_generic_bitmap_end’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_fudge_inode_bitmap_end’:
    bitmaps.c:(.text+0x20b): unde­fined ref­er­ence to ‘ext2fs_fudge_generic_bitmap_end’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_allocate_block_bitmap’:
    bitmaps.c:(.text+0x28c): unde­fined ref­er­ence to ‘ext2fs_make_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_allocate_inode_bitmap’:
    bitmaps.c:(.text+0x2fd): unde­fined ref­er­ence to ‘ext2fs_make_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_clear_block_bitmap’:
    bitmaps.c:(.text+0x188): unde­fined ref­er­ence to ‘ext2fs_clear_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_clear_inode_bitmap’:
    bitmaps.c:(.text+0x198): unde­fined ref­er­ence to ‘ext2fs_clear_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_set_bitmap_padding’:
    bitmaps.c:(.text+0x318): unde­fined ref­er­ence to ‘ext2fs_set_generic_bitmap_padding’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_copy_bitmap’:
    bitmaps.c:(.text+0x328): unde­fined ref­er­ence to ‘ext2fs_copy_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_free_block_bitmap’:
    bitmaps.c:(.text+0x338): unde­fined ref­er­ence to ‘ext2fs_free_generic_bitmap’
    ../lib/libext2fs.a(bitmaps.o): In func­tion ‘ext2fs_free_inode_bitmap’:
    bitmaps.c:(.text+0x348): unde­fined ref­er­ence to ‘ext2fs_free_generic_bitmap’
    ../lib/libext2fs.a(block.o): In func­tion ‘block_iterate_ind’:
    block.c:(.text+0xa5): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    block.c:(.text+0x2cb): unde­fined ref­er­ence to ‘ext2fs_write_ind_block’
    ../lib/libext2fs.a(block.o): In func­tion ‘block_iterate_dind’:
    block.c:(.text+0x40e): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    block.c:(.text+0x5f3): unde­fined ref­er­ence to ‘ext2fs_write_ind_block’
    ../lib/libext2fs.a(block.o): In func­tion ‘ext2fs_block_iterate2’:
    block.c:(.text+0xf2f): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    block.c:(.text+0x10a8): unde­fined ref­er­ence to ‘ext2fs_write_ind_block’
    ../lib/libext2fs.a(bmap.o): In func­tion ‘ext2fs_bmap2’:
    bmap.c:(.text+0x7c8): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    ../lib/libext2fs.a(check_desc.o): In func­tion ‘ext2fs_check_desc’:
    check_desc.c:(.text+0xf4): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    check_desc.c:(.text+0x10b): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    check_desc.c:(.text+0x133): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    check_desc.c:(.text+0x14a): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    check_desc.c:(.text+0x17e): unde­fined ref­er­ence to ‘ext2fs_mark_generic_bitmap’
    check_desc.c:(.text+0x195): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    ../lib/libext2fs.a(csum.o): In func­tion ‘ext2fs_set_gdt_csum’:
    csum.c:(.text+0x1ab): unde­fined ref­er­ence to ‘ext2fs_test_generic_bitmap’
    ../lib/libext2fs.a(mkjournal.o): In func­tion ‘ext2fs_add_journal_inode’:
    mkjournal.c:(.text+0xd38): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    ../lib/libext2fs.a(res_gdt.o): In func­tion ‘ext2fs_create_resize_inode’:
    res_gdt.c:(.text+0x13d): unde­fined ref­er­ence to ‘ext2fs_iblk_set’
    res_gdt.c:(.text+0x2ea): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    res_gdt.c:(.text+0x3aa): unde­fined ref­er­ence to ‘ext2fs_read_ind_block’
    res_gdt.c:(.text+0x3f8): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    res_gdt.c:(.text+0x51b): unde­fined ref­er­ence to ‘ext2fs_iblk_add_blocks’
    res_gdt.c:(.text+0x55a): unde­fined ref­er­ence to ‘ext2fs_write_ind_block’
    res_gdt.c:(.text+0x582): unde­fined ref­er­ence to ‘ext2fs_write_ind_block’
    collect2: ld returned 1 exit sta­tus
    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

    • http://sergioprado.org Ser­gio Prado

      Olá Leonardo,

      Na ver­dade o prob­lema esta na com­pi­lação da fer­ra­menta ext2fs, respon­sável por gerar a imagem ext2 do rootfs. Deve ser algo rela­cionado com seu ambi­ente de desen­volvi­mento. Tenta insta­lar os pacotes abaixo:

      sudo apt-get install e2fslibs e2fslibs-dev e2fsprogs

      Se não fun­cionar, uma solução pro­visória é entrar no menu de con­fig­u­ração do Buil­d­root e desabli­tar a ger­ação da imagem ext2.

      Um abraço.

  • Leonardo Torok

    Olá Sér­gio,
    A insta­lação dos pacotes resolveu o prob­lema e con­segui com­pi­lar e exe­cu­tar com sucesso o sis­tema e o emu­lador. Só que agora estou com um prob­lema estranho. Após várias insta­lações, o kit não mostra mais nada no dis­play LCD. Eu tento insta­lar a imagem nova­mente mas o dis­play con­tinua assim. Ten­tei com outro mini2440 e o dis­play fun­cio­nou. Mas depois de insta­lar o sis­tema algu­mas vezes no novo kit, o dis­play voltou a não mostrar mais a imagem. 
    O estranho é que, pela saída do con­sole na ser­ial, vejo que o sis­tema dá boot nor­mal­mente e até vejo a saída dos resul­ta­dos da cal­i­bração da tela quando toco no dis­play, só que sem a imagem na tela. O que pode ser isso?

  • http://sergioprado.org Ser­gio Prado

    Olá Leonardo,

    É bem provável que seja hard­ware. Algum mal con­tato no cabo do dis­play. Veja se não esta mal encaix­ado. Eu tam­bém já tive este prob­lema aqui. Mas cuidado que o cabo é bem frágil.

    Um abraço.

  • Leonardo Torok

    Olá, Sér­gio
    Prob­lema resolvido, nem era um prob­lema de hard­ware. Pre­ci­sei reti­rar o “mini2440=3tb” dos argu­men­tos de boot. Acred­ito que seja porque o meu dis­play é um X35, enquanto o do seu Mini2440 pode ser de outro fab­ri­cante (que eu saiba, esses minis pos­suem dis­plays de diver­sos fab­ri­cantes).
    Abraços

    • http://sergioprado.org Ser­gio Prado

      Olá Leonardo,

      Achei que era hard­ware porque você disse que o prob­lema era inter­mi­tente. Mas que bem que fun­cio­nou! Valeu pela dica.

      Um abraço.

  • Leonardo Torok

    Olá, Sér­gio
    Tam­bém achei que seria hard­ware, tanto que fiz testes com out­ros dis­plays e kits (temos 4 Mini2440 aqui). Pare­ceu ser inter­mi­tente porque esqueci de gravar a var­iável de ambi­ente nos primeiros testes, ficando com o valor antigo que era o que fun­cionava no meu kit. Quando fui fazer o flash nova­mente, ai sim eu lem­brei de gravar a var­iável e o prob­lema ocor­reu. Mas agora está tudo certo.
    Estou seguindo seu tuto­r­ial do Emde­bian agora, já con­segui instalá-lo no kit e está tudo ok. Deixo como dica tro­car os repositórios do Emde­bian pelos do Debian Lenny orig­i­nal (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 Emde­bian está apre­sen­tando erros con­stantes. Leonardo, você pode me pas­sar o seu e-mail para tro­car­mos experiências?

  • Leonardo Torok

    Elton, é leotorok@gmail.com.

  • Elmo Oliveira

    Sér­gio,

    Como faço para rodar uma apli­cação java na mini 2440 com o sis­tema nativo?

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

    Sds,

    Elmo Oliveira
    Tec­nolo­gia da Informação

  • Ibrahim

    Olá Ser­gio,

    Sou primo do Lucas Zam­par e esta­mos ten­tando rodar a apli­cação do lin­phone com linux embar­cado (mini6410 e mini210).

    Con­seguimos rodar a apli­cação uti­lizando uti­lizando geren­ci­adores de janela como o wmaker, fluxbox, xfce4, entre outros.

    Esta­mos tendo difi­cul­dades para fazer com que o lin­phone (que usa o gtk+) rodar sem os geren­ci­adores de janela.

    Uti­lizamos 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,

    • http://sergioprado.org/ Ser­gio Prado

      Claro, é só dizer quais difi­cul­dades estão enfrentando.

      Um abraço.

      • http://twitter.com/Ibrattus Ibrahim Mat­tus Neto

        Bom dia,

        Esta­mos tendo difi­cul­dades em exe­cu­tar apli­cações gtk+ dire­ta­mente pelo DirectFB.

        Usando um geren­ci­ador de janelas, como o fluxbox, somos capazes de rodar a apli­cação gtk+ (linphone)

        O DirectFB está fun­cio­nando e cri­amos o rootfs para o mini210 com o buildroot-2013.02-rc2

        Obri­gado pela ajuda

  • Richard Val­divia

    Sér­gio,

    Exce­lente tópico. Sou desen­volve­dor e come­cei a me inter­es­sar por sis­temas embar­ca­dos através de seus arti­gos. Parabéns e obri­gado por com­par­til­har suas exper­iên­cias conosco!

    • http://sergioprado.org/ Ser­gio Prado

      Obri­gado Richard! Con­tinue acompanhando!

  • Heres

    Ser­gio,

    estou ten­tando adi­cionar a bib­lioteca ALSA com o buildroot,

    mas não fun­ciona. 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) can­not find card ‘0’

    ALSA lib conf.c:4154:(_snd_config_evaluate) func­tion snd_func_card_driver retury

    ALSA lib confmisc.c:392:(snd_func_concat) error eval­u­at­ing strings

    ALSA lib conf.c:4154:(_snd_config_evaluate) func­tion snd_func_concat returned ey

    ALSA lib confmisc.c:1251:(snd_func_refer) error eval­u­at­ing name

    ALSA lib conf.c:4154:(_snd_config_evaluate) func­tion snd_func_refer returned ery

    ALSA lib conf.c:4633:(snd_config_expand) Eval­u­ate 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

    Obri­gado!

    • http://sergioprado.org/ Ser­gio Prado

      Olá Heres,

      Me parece que seu ker­nel não esta com os dri­vers de video habil­i­ta­dos. Você com­pi­lou ele oou pegou uma ver­são pre-compilada? Qual o resul­tado 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.