Compilando o Android da Linaro
- por Sergio Prado
A Linaro é uma organização sem fins lucrativos que tem o objetivo de manter e melhorar o suporte do ecossistema Linux para a plataforma ARM. Isso inclui, além do kernel, melhorias no suporte do GCC e versões customizadas do Ubuntu e do Android para ARM.
O Android da Linaro é a versão que acompanha mais de perto o AOSP do Google, com algumas customizações e suporte para algumas placas ARM de referência.
Caso você precise portar o Android para uma plataforma ARM, o Android da Linaro é provavelmente a sua melhor opção de ponto de partida.
Sempre que precisei compilar o Android da Linaro passei por dificuldades, porque a documentação deles é ruim e desatualizada. Por este motivo, resolvi documentar o procedimento aqui.
PREPARANDO O AMBIENTE
Os testes foram realizados em uma máquina de 64 bits com o Ubuntu 12.04 instalado.
Antes de começar, execute os procedimentos de preparação do host descritos no site da Linaro.
BAIXANDO O CÓDIGO-FONTE
Para testar, iremos compilar o Android 4.4.4 para a Pandaboard.
Crie um diretório para armazenar o código-fonte:
$ mkdir -p ~/linaro/4.4.4 && cd ~/linaro/4.4.4 |
Configure algumas variáveis de ambiente com as informações do código-fonte que será baixado:
$ export MANIFEST_REPO=git://android.git.linaro.org/platform/manifest.git $ export MANIFEST_BRANCH=linaro_android_4.4.4 $ export MANIFEST_FILENAME=default.xml $ export REPO_GROUPS="common,pandaboard,devel" |
A variável REPO_GROUPS permite definir quais grupos de projeto o comando “repo sync” irá baixar. No nosso teste, serão baixados apenas os projetos comuns à todas as placas (common), os projetos da Pandaboard (pandaboard) e os projetos com ferramentas de desenvolvimento e testes (devel).
Caso você queira baixar o branch master do código-fonte, altere a variável MANIFEST_BRANCH para o conteúdo abaixo:
$ export MANIFEST_BRANCH=linaro_android_master |
Agora é só baixar o código-fonte:
$ repo init -u ${MANIFEST_REPO} -b ${MANIFEST_BRANCH} -m ${MANIFEST_FILENAME} -g ${REPO_GROUPS} $ repo sync |
Ao final do processo, verifique se o código-fonte foi baixado corretamente:
$ ls abi cts docs libcore packages tools art dalvik external libnativehelper pdk u-boot bionic developers frameworks Makefile prebuilts bootable development hardware native-toolchain sdk build device kernel ndk system |
COMPILANDO
Para compilar para a Pandaboard, basta executar o comando abaixo:
$ make TARGET_PRODUCT=pandaboard boottarball systemtarball userdatatarball -j8 |
No final da compilação, as imagens estarão disponíveis no diretório de saída do produto da pandaboard:
$ ls out/target/product/pandaboard/ boot HOWTO_getsourceandbuild.txt root u-boot.bin boot.tar.bz2 HOWTO_install.txt symbols u-boot.img clean_steps.mk MLO system uImage data obj system.tar.bz2 uInitrd fake_packages previous_build_config.mk test userdata.tar.bz2 |
Durante a compilação, tive o seguinte problema:
art/dalvikvm/dalvikvm.cc: In function 'int art::InvokeMain(JNIEnv*, char**)': art/dalvikvm/dalvikvm.cc:72:3: error: 'replace' is not a member of 'std' |
Para corrigir, foi necessário definir a variável de ambiente WITH_HOST_DALVIK e reiniciar a compilação.
$ export WITH_HOST_DALVIK=false |
A Linaro possui um servidor de build que mantém imagens pré-compiladas para os targets de referência. Alguns tutoriais também estão disponíveis para quem quiser trabalhar com o Android da Linaro e colaborar com o desenvolvimento.
Um abraço,
Sergio Prado