Compilando o Android para a Wandboard Quad
- por Sergio Prado
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 trabalho e armazene seu caminho em uma variável de ambiente:
$ export ANDROID_WAND_PATH=~/android_wandboard/ $ mkdir -p $ANDROID_WAND_PATH && cd $ANDROID_WAND_PATH |
Usaremos esta variável de ambiente para referenciar o diretório de trabalho em alguns comandos durante este artigo. Não esqueça de definir esta variável sempre 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 imagens no cartão SD. Para isso, usaremos a ferramenta mediacreate.
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, execute o mediacreate. Substitua <device> no comando abaixo pelo nome do arquivo de dispositivo do cartão SD (ex: /dev/sdd).
$ sudo ./mediacreate -f -z -c configs/wandboard_quad_android.cfg -d /dev/<device> |
Agora é só colocar 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.
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