Compilando o Android para a Wandboard Quad

- por Sergio Prado

Categorias: Android, Wandboard Tags: ,

O Android é composto por dois grandes projetos, o kernel Linux e a plataforma Android.

O kernel Linux pode ser baixado no site do projeto em kernel.org, já a plataforma Android é disponibilizada pelo Google sob o nome AOSP (Android Open Source Project).

A cada versão do Android, o Google libera uma nova árvore do AOSP, onde é possível compilar o Android para seus últimos smartphones e tablets de referência (Nexus). Na verdade não é bem assim, já que os fabricantes de hardware guardam à sete chaves alguns binários de acesso ao hardware (interface com o rádio, GPU, etc). De qualquer forma, instruções sobre como compilar a plataforma Android estão disponíveis em source.android.com.

Com o AOSP disponível, qualquer fabricante pode portar o Android para a sua plataforma. E foi isso que o pessoal da Wandboard fez.

Uns tempos atrás escrevi um artigo sobre a Wandboard. Baixei a imagem mais recente na época e testei na Wanboard Solo. E a experiência com o Android nesta placa não foi das melhores. Mas já se passaram alguns meses, e o suporte ao Android na Wandboard já esta bem melhor. Além disso, tenho em minhas mãos uma Wandboard Quad, uma “maquininha” de 4 núcleos ARM Cortex-A9 com 2G de RAM! :)

Vamos então estudar como compilar e testar o Android nela?

PREPARANDO O AMBIENTE

A versão do Android suportada pela Wandboard no momento em que escrevo este artigo é a Jellybean 4.2.2.

O primeiro passo é preparar sua máquina para compilar o Android. E este processo pode dar trabalho. O Google recomenda uma máquina de 64 bits rodando o Ubuntu 10.04, 11.10 ou 12.04, a versão 6 do Java e mais um conjunto de pacotes instalados. Vou descrever abaixo o que fiz para preparar a minha máquina. O procedimento documentado pelo Google esta disponível aqui.

Estou usando uma máquina de 64 bits rodando o Ubuntu 12.04. O primeiro passo é instalar os pacotes necessários:

$ sudo apt-get install ia32-libs git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
u-boot-tools uuid libc6-dev-i386 lib32z1 uuid-dev:i386 liblzo2-dev:i386

E depois criar um link para a biblioteca do OpenGL:

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Por último, instale o Java 6:

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java6-installer

Com a máquina configurada, vamos iniciar o procedimento de compilação.

COMPILANDO O ANDROID

O AOSP é composto por dezenas de repositórios git, que podem ser acessados em http://android.googlesource.com. Para facilitar o trabalho de clonar todos estes repositórios nos locais corretos e criar o ambiente de build, o Google criou uma ferramenta chamada repo. Usaremos esta ferramenta para baixar o código-fonte do Android da Wandboard.

Primeiro crie um diretório de tra­balho e armazene seu caminho em uma var­iável de ambiente:

$ export ANDROID_WAND_PATH=~/android_wandboard/
$ mkdir -p $ANDROID_WAND_PATH && cd $ANDROID_WAND_PATH

Usare­mos esta var­iável de ambi­ente para ref­er­en­ciar o diretório de tra­balho em alguns coman­dos durante este artigo. Não esqueça de definir esta var­iável sem­pre que abrir uma nova seção do shell.

Agora baixe o código-fonte do AOSP disponibilizado pelo projeto da Wandboard. Prepare-se para algumas horas de espera, dependendo da sua conexão com a Internet. A versão 4.2.2 do Android possui em torno de 20G de código-fonte. Ah, e prepare mais 30G de espaço em disco para depois compilar o Android! :)

$ cd $ANDROID_WAND_PATH
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
$ chmod a+x ./repo 
$ ./repo init -u git://www.wandboard.org/android/manifest.git -m default.xml 
$ ./repo sync -j4

Ao fim do processo de sincronização do código-fonte, você terá disponível a árvore completa do AOSP para a Wandboard:

$ ls
abi       dalvik       frameworks  libcore          pdk
bionic    development  gdk         libnativehelper  prebuilts
bootable  device       hardware    Makefile         sdk
build     docs         images      ndk              system
cts       external     kernel_imx  packages

O próximo passo é compilar. Todo o mecanismo de compilação do AOSP é baseado em makefiles e variáveis de ambiente.

Primeiro devemos inicializar o ambiente com o script envsetup.sh:

$ source build/envsetup.sh

E depois habilitar o produto que queremos compilar com o comando lunch:

$ lunch
 
You're building on Linux
 
Lunch menu... pick a combo:
1. full-eng
2. full_x86-eng
3. vbox_x86-eng
4. full_mips-eng
5. full_grouper-userdebug
6. full_tilapia-userdebug
7. imx53_smd-eng
8. imx53_smd-user
9. arm2_6dq-eng
10. arm2_6dq-user
11. sabresd_6dq-eng
12. sabresd_6dq-userdebug
13. sabreauto_6q-eng
14. sabreauto_6q-user
15. arm2_6sl-eng
16. arm2_6sl-user
17. evk_6sl-eng
18. evk_6sl-user
19. hdmidongle_6dq-eng
20. hdmidongle_6dq-user
21. wandboard-eng
22. wandboard-userdebug
23. mini_armv7a_neon-userdebug
24. mini_armv7a-userdebug
25. mini_mips-userdebug
26. mini_x86-userdebug
27. full_mako-userdebug
28. full_maguro-userdebug
29. full_manta-userdebug
30. full_toroplus-userdebug
31. full_toro-userdebug
32. full_panda-userdebug
 
Which would you like? [full-eng]

A maioria dos produtos disponíveis fazem parte do AOSP padrão, e estão relacionados aos smartphones e tablets do Google. Já o produto “wandboard” foi adicionado pelo projeto da Wandboard. Digite 21 para configurar o ambiente para a Wandboard:

Which would you like? [full-eng] 21
 
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.2.2
TARGET_PRODUCT=wandboard
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.5.0-39-generic-x86_64-with-Ubuntu-12.10-quantal
HOST_BUILD_TYPE=release
BUILD_ID=1.0.0-rc3
OUT_DIR=out
============================================

Agora inicie o processo de compilação:

$ make -j4

A compilação também pode demorar, dependendo da sua máquina de desenvolvimento. Ao final do processo de compilação, as imagens serão geradas no diretório out/target/product/wandboard/:

$ ls out/target/product/wandboard/
android-info.txt     kernel                    recovery.img  u-boot-6dl.bin
boot.img             obj                       root          u-boot-6quad.bin
clean_steps.mk       previous_build_config.mk  symbols       u-boot-6solo.bin
data                 ramdisk.img               system        u-boot.bin
hardware-qemu.ini    ramdisk-recovery.img      system.img    uImage
installed-files.txt  recovery                  test          userdata.img

Estas são as imagens que utilizaremos para gravar no cartão SD:

  • u-boot-6quad.bin: imagem do bootloader (U-Boot).
  • boot.img: imagem do kernel Linux e do ramdisk, que é montado no diretório / e contém ferramentas e arquivos de inicialização do Android.
  • system.img: imagem principal do Android, contendo os componentes gerados pelo AOSP (binários, bibliotecas, componentes do framework e aplicações).
  • userdata.img: imagem com os dados das aplicações, montado no diretório /data e responsável por armazenar as aplicações instaladas.

GRAVANDO O SISTEMA NO CARTÃO SD

Agora vamos gravar as ima­gens no cartão SD. Para isso, usare­mos a fer­ra­menta medi­acre­ate.

Primeiro, baixe a ferramenta:

$ cd $ANDROID_WAND_PATH
$ git clone https://github.com/sergioprado/mediacreate.git
$ cd mediacreate/

Depois edite o arquivo de configuração da ferramenta mediacreate para a Wandboard, configurando o local do diretório das imagens do Android:

$ echo "IMGDIR=$ANDROID_WAND_PATH/out/target/product/wandboard" >> configs/wandboard_quad_android.cfg

Por fim, exe­cute o medi­acre­ate. Sub­sti­tua <device> no comando abaixo pelo nome do arquivo de dis­pos­i­tivo do cartão SD (ex: /dev/sdd).

$ sudo ./mediacreate -f -z -c configs/wandboard_quad_android.cfg -d /dev/<device>

Agora é só colo­car o cartão SD na Wandboard Quad e testar!

TESTANDO

O primeiro boot levou cerca de 2 minutos, enquanto que os próximos boots levaram menos de 40 segundos. O navegador e o acesso à Internet funcionaram muito bem, e a experiência de forma geral é muito boa.

DSC01921

DSC01920

No próximo artigo aprenderemos a instalar o Google Play e testar algumas aplicações que exigem um pouco mais do hardware, como jogos e vídeos em HD.

Até lá!

Um abraço,

Sergio Prado

Faça um Comentário

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